1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
|
<?php
/**
* ADOdb tests.
*
* This file is part of ADOdb, a Database Abstraction Layer library for PHP.
*
* @package ADOdb
* @link https://adodb.org Project's web site and documentation
* @link https://github.com/ADOdb/ADOdb Source code and issue tracker
*
* The ADOdb Library is dual-licensed, released under both the BSD 3-Clause
* and the GNU Lesser General Public Licence (LGPL) v2.1 or, at your option,
* any later version. This means you can use it in proprietary products.
* See the LICENSE.md file distributed with this source code for details.
* @license BSD-3-Clause
* @license LGPL-2.1-or-later
*
* @copyright 2000-2013 John Lim
* @copyright 2014 Damien Regad, Mark Newnham and the ADOdb community
*/
error_reporting(E_ALL|E_STRICT);
include('../adodb.inc.php');
// -------- Internal Trace functions
function Trace($Msg){
echo "<br>\n".$Msg;
}
function DieTrace($Msg){
die("<br>\n".$Msg);
}
define('ADODB_ASSOC_CASE',0);
$ADODB_FETCH_MODE = ADODB_FETCH_ASSOC;
$db = ADONewConnection("mssqlnative"); // create a connection
$db->Connect('127.0.0.1','adodb','natsoft','northwind') or die('Fail');
//==========================
// This code tests GenId
//==========================
function TestGenID() {
global $db;
$PrevDebug=$db->debug; $db->debug=false; // Hide debug if present as Drop can cause errors
$db->Execute("drop sequence MySequence1;
drop sequence MySequence2;
drop sequence MySequence3;
drop table MySequence1Emul;
drop table MySequence2Emul;
drop table MySequence3Emul;
");
$db->debug=$PrevDebug; // Restore debug Initial State
$ID1a=$db->GenID("MySequence1");
$ID2a=$db->GenID("MySequence2");
$ID1b=$db->GenID("MySequence1");
$ID2b=$db->GenID("MySequence2");
Trace("ID1a=$ID1a,ID1b=$ID1b, ID2a=$ID2a,ID2b=$ID2b");
if(intval($ID1a)+1!==intval($ID1b)) DieTrace(sprintf("ERROR : Second value obtains by MySequence1 should be %d but is %d",$ID1a+1,$ID1b));
$db->CreateSequence("MySequence3",100);
$ID2b=$db->GenID("MySequence3");
if(intval($ID2b)!==100) DieTrace(sprintf("ERROR : Value from MySequence3 should be 100 but is %d",$ID2b));
$db->mssql_version=10; // Force to simulate Pre 2012 (without sequence) behavior
$ID1a=$db->GenID("MySequence1Emul");
$ID2a=$db->GenID("MySequence2Emul");
$ID1b=$db->GenID("MySequence1Emul");
$ID2b=$db->GenID("MySequence2Emul");
echo "ID1a=$ID1a,ID1b=$ID1b, ID2a=$ID2a,ID2b=$ID2b <br>\n";
if(intval($ID1a+1)!==intval($ID1b)) DieTrace(sprintf("ERROR : Second value obtains by MySequence1Emul should be %d but is %d",$ID1a+1,$ID1b));
$db->CreateSequence("MySequence3Emul",100);
$ID2b=$db->GenID("MySequence3Emul");
if(intval($ID2b)!==100) DieTrace(sprintf("ERROR : Value from MySequence3Emul should be 100 but is %d",$ID2b));
} //TestGenID()
//==========================
// This code tests SQLDate
//==========================
function TestSQLDate()
{
global $db;
$res = $db->GetRow("select testdate,"
. $db->SQLDate("d/m/Y", "testdate") . " FR4,"
. $db->SQLDate("d/m/y", "testdate") . " FR4b,"
. $db->SQLDate("d/m/Y", "NULL") . " nullFR4,"
. $db->SQLDate("m/d/Y", "testdate") . " US4,"
. $db->SQLDate("m/d/y", "testdate") . " US4b,"
. $db->SQLDate("m-d-Y", "testdate") . " USD4,"
. $db->SQLDate("m-d-y", "testdate") . " USD4b,"
. $db->SQLDate("Y.m.d", "testdate") . " ANSI4,"
. $db->SQLDate("d.m.Y", "testdate") . " GE4,"
. $db->SQLDate("d.m.y", "testdate") . " GE4b,"
. $db->SQLDate("d-m-Y", "testdate") . " IT4,"
. $db->SQLDate("d-m-y", "testdate") . " IT4b,"
. $db->SQLDate("Y/m/d", "testdate") . " Japan4,"
. $db->SQLDate("y/m/d", "testdate") . " Japan4b,"
. $db->SQLDate("H:i:s", "testdate") . " timeonly,"
. $db->SQLDate("d m Y", "testdate") . " Space4," // Is done by former method
. $db->SQLDate("d m Y", "NULL") . " nullSpace4,"
. $db->SQLDate("m-d-Y", "testdatesmall") . " nowUSdash4,"
. "null from (select convert(datetime,'2016-12-17 18:55:30.590' ,121) testdate,
convert(datetime,'2016-01-01 18:55:30.590' ,121) testdatesmall,null nulldate) q "
);
$TestRes=array(
"fr4"=>"17/12/2016",
"fr4b"=>"17/12/2016",
"nullfr4"=>null,
"us4"=>"12/17/2016",
"us4b"=>"12/17/2016",
"ansi4"=>"2016.12.17",
"ge4"=>"17.12.2016",
"ge4b"=>"17.12.2016",
"it4"=>"17-12-2016",
"it4b"=>"17-12-2016",
"japan4"=>"2016/12/17",
"japan4b"=>"2016/12/17",
"space4"=>"17 12 2016",
"nullspace4"=>null,
"timeonly"=>"18:55:30",
);
var_dump($res);
foreach($TestRes as $k=>$v)
if($v!==$res[$k])
DieTrace(sprintf("ERROR : Expected for '%s' is '%s', but got '%s'",$k,$v,$res[$k]));
} //TestSQLDate()
//==========================
// This code is the tests RUNNER
//==========================
$db->debug=true;
// $ToTest Contains * or the name of the test function to RUN
$ToTest="*";
//$ToTest="TestSQLDate";
// Here the generic test runner, will launch all functions of the current file beginning by "test", should not be changed use $ToTest
$functions = get_defined_functions();
$functions = $functions['user'];
foreach( $functions as $f) {
$refFunc = new ReflectionFunction($f);
if(($refFunc->getFileName()==__FILE__)&&(substr($f,0,4)=='test'))
if(($ToTest=='*')||(strtolower($ToTest)==$f))
{
Trace("<b>-------- Launch Test : $f ------------------</b>");
$f();
}
}
Trace("<b>=========== End of tests Without Error. ===================</b>");
|