1--TEST--
2Test new DateTime() function : usage variation - Passing unexpected values to first argument $time.
3--FILE--
4<?php
5/* Prototype  : DateTime::__construct  ([ string $time="now"  [, DateTimeZone $timezone=NULL  ]] )
6 * Description: Returns new DateTime object
7 * Source code: ext/date/php_date.c
8 * Alias to functions: date_create
9 */
10
11echo "*** Testing new DateTime(): usage variation -  unexpected values to first argument \$time***\n";
12
13//Set the default time zone
14date_default_timezone_set("Europe/London");
15
16//get an unset variable
17$unset_var = 10;
18unset ($unset_var);
19
20// define some classes
21class classWithToString
22{
23	public function __toString() {
24		return "Class A object";
25	}
26}
27
28class classWithoutToString
29{
30}
31
32// heredoc string
33$heredoc = <<<EOT
34hello world
35EOT;
36
37// add arrays
38$index_array = array (1, 2, 3);
39$assoc_array = array ('one' => 1, 'two' => 2);
40
41// resource
42$file_handle = fopen(__FILE__, 'r');
43
44//array of values to iterate over
45$inputs = array(
46
47      // int data
48      'int 0' => 0,
49      'int 1' => 1,
50      'int 12345' => 12345,
51      'int -12345' => -12345,
52
53      // float data
54      'float 10.5' => 10.5,
55      'float -10.5' => -10.5,
56      'float .5' => .5,
57
58      // array data
59      'empty array' => array(),
60      'int indexed array' => $index_array,
61      'associative array' => $assoc_array,
62      'nested arrays' => array('foo', $index_array, $assoc_array),
63
64      // null data
65      'uppercase NULL' => NULL,
66      'lowercase null' => null,
67
68      // boolean data
69      'lowercase true' => true,
70      'lowercase false' =>false,
71      'uppercase TRUE' =>TRUE,
72      'uppercase FALSE' =>FALSE,
73
74      // empty data
75      'empty string DQ' => "",
76      'empty string SQ' => '',
77
78      // string data
79      'string DQ' => "string",
80      'string SQ' => 'string',
81      'mixed case string' => "sTrInG",
82      'heredoc' => $heredoc,
83
84      // object data
85      'instance of classWithToString' => new classWithToString(),
86      'instance of classWithoutToString' => new classWithoutToString(),
87
88      // undefined data
89      'undefined var' => @$undefined_var,
90
91      // unset data
92      'unset var' => @$unset_var,
93
94      // resource
95      'resource' => $file_handle
96);
97
98$timezone = new DateTimeZone("Europe/London");
99
100foreach($inputs as $variation =>$time) {
101      echo "\n-- $variation --\n";
102
103      try {
104      	var_dump( new DateTime($time) );
105      } catch (Throwable $e) {
106      	  $msg = $e->getMessage();
107      	  echo "FAILED: " . $msg . "\n";
108      }
109
110      try {
111      	var_dump( new DateTime($time, $timezone) );
112      } catch (Throwable $e) {
113      	 $msg = $e->getMessage();
114      	 echo "FAILED: " . $msg . "\n";
115      }
116};
117
118// closing the resource
119fclose( $file_handle);
120
121?>
122===DONE===
123--EXPECTF--
124*** Testing new DateTime(): usage variation -  unexpected values to first argument $time***
125
126-- int 0 --
127FAILED: DateTime::__construct(): Failed to parse time string (0) at position 0 (0): Unexpected character
128FAILED: DateTime::__construct(): Failed to parse time string (0) at position 0 (0): Unexpected character
129
130-- int 1 --
131FAILED: DateTime::__construct(): Failed to parse time string (1) at position 0 (1): Unexpected character
132FAILED: DateTime::__construct(): Failed to parse time string (1) at position 0 (1): Unexpected character
133
134-- int 12345 --
135FAILED: DateTime::__construct(): Failed to parse time string (12345) at position 4 (5): Unexpected character
136FAILED: DateTime::__construct(): Failed to parse time string (12345) at position 4 (5): Unexpected character
137
138-- int -12345 --
139FAILED: DateTime::__construct(): Failed to parse time string (-12345) at position 5 (5): Unexpected character
140FAILED: DateTime::__construct(): Failed to parse time string (-12345) at position 5 (5): Unexpected character
141
142-- float 10.5 --
143object(DateTime)#%d (3) {
144  ["date"]=>
145  string(26) "%s"
146  ["timezone_type"]=>
147  int(3)
148  ["timezone"]=>
149  string(13) "Europe/London"
150}
151object(DateTime)#%d (3) {
152  ["date"]=>
153  string(26) "%s"
154  ["timezone_type"]=>
155  int(3)
156  ["timezone"]=>
157  string(13) "Europe/London"
158}
159
160-- float -10.5 --
161FAILED: DateTime::__construct(): Failed to parse time string (-10.5) at position 4 (5): Unexpected character
162FAILED: DateTime::__construct(): Failed to parse time string (-10.5) at position 4 (5): Unexpected character
163
164-- float .5 --
165object(DateTime)#%d (3) {
166  ["date"]=>
167  string(26) "%s"
168  ["timezone_type"]=>
169  int(3)
170  ["timezone"]=>
171  string(13) "Europe/London"
172}
173object(DateTime)#%d (3) {
174  ["date"]=>
175  string(26) "%s"
176  ["timezone_type"]=>
177  int(3)
178  ["timezone"]=>
179  string(13) "Europe/London"
180}
181
182-- empty array --
183FAILED: DateTime::__construct() expects parameter 1 to be string, array given
184FAILED: DateTime::__construct() expects parameter 1 to be string, array given
185
186-- int indexed array --
187FAILED: DateTime::__construct() expects parameter 1 to be string, array given
188FAILED: DateTime::__construct() expects parameter 1 to be string, array given
189
190-- associative array --
191FAILED: DateTime::__construct() expects parameter 1 to be string, array given
192FAILED: DateTime::__construct() expects parameter 1 to be string, array given
193
194-- nested arrays --
195FAILED: DateTime::__construct() expects parameter 1 to be string, array given
196FAILED: DateTime::__construct() expects parameter 1 to be string, array given
197
198-- uppercase NULL --
199object(DateTime)#%d (3) {
200  ["date"]=>
201  string(26) "%s"
202  ["timezone_type"]=>
203  int(3)
204  ["timezone"]=>
205  string(13) "Europe/London"
206}
207object(DateTime)#%d (3) {
208  ["date"]=>
209  string(26) "%s"
210  ["timezone_type"]=>
211  int(3)
212  ["timezone"]=>
213  string(13) "Europe/London"
214}
215
216-- lowercase null --
217object(DateTime)#%d (3) {
218  ["date"]=>
219  string(26) "%s"
220  ["timezone_type"]=>
221  int(3)
222  ["timezone"]=>
223  string(13) "Europe/London"
224}
225object(DateTime)#%d (3) {
226  ["date"]=>
227  string(26) "%s"
228  ["timezone_type"]=>
229  int(3)
230  ["timezone"]=>
231  string(13) "Europe/London"
232}
233
234-- lowercase true --
235FAILED: DateTime::__construct(): Failed to parse time string (1) at position 0 (1): Unexpected character
236FAILED: DateTime::__construct(): Failed to parse time string (1) at position 0 (1): Unexpected character
237
238-- lowercase false --
239object(DateTime)#%d (3) {
240  ["date"]=>
241  string(26) "%s"
242  ["timezone_type"]=>
243  int(3)
244  ["timezone"]=>
245  string(13) "Europe/London"
246}
247object(DateTime)#%d (3) {
248  ["date"]=>
249  string(26) "%s"
250  ["timezone_type"]=>
251  int(3)
252  ["timezone"]=>
253  string(13) "Europe/London"
254}
255
256-- uppercase TRUE --
257FAILED: DateTime::__construct(): Failed to parse time string (1) at position 0 (1): Unexpected character
258FAILED: DateTime::__construct(): Failed to parse time string (1) at position 0 (1): Unexpected character
259
260-- uppercase FALSE --
261object(DateTime)#%d (3) {
262  ["date"]=>
263  string(26) "%s"
264  ["timezone_type"]=>
265  int(3)
266  ["timezone"]=>
267  string(13) "Europe/London"
268}
269object(DateTime)#%d (3) {
270  ["date"]=>
271  string(26) "%s"
272  ["timezone_type"]=>
273  int(3)
274  ["timezone"]=>
275  string(13) "Europe/London"
276}
277
278-- empty string DQ --
279object(DateTime)#%d (3) {
280  ["date"]=>
281  string(26) "%s"
282  ["timezone_type"]=>
283  int(3)
284  ["timezone"]=>
285  string(13) "Europe/London"
286}
287object(DateTime)#%d (3) {
288  ["date"]=>
289  string(26) "%s"
290  ["timezone_type"]=>
291  int(3)
292  ["timezone"]=>
293  string(13) "Europe/London"
294}
295
296-- empty string SQ --
297object(DateTime)#%d (3) {
298  ["date"]=>
299  string(26) "%s"
300  ["timezone_type"]=>
301  int(3)
302  ["timezone"]=>
303  string(13) "Europe/London"
304}
305object(DateTime)#%d (3) {
306  ["date"]=>
307  string(26) "%s"
308  ["timezone_type"]=>
309  int(3)
310  ["timezone"]=>
311  string(13) "Europe/London"
312}
313
314-- string DQ --
315FAILED: DateTime::__construct(): Failed to parse time string (string) at position 0 (s): The timezone could not be found in the database
316FAILED: DateTime::__construct(): Failed to parse time string (string) at position 0 (s): The timezone could not be found in the database
317
318-- string SQ --
319FAILED: DateTime::__construct(): Failed to parse time string (string) at position 0 (s): The timezone could not be found in the database
320FAILED: DateTime::__construct(): Failed to parse time string (string) at position 0 (s): The timezone could not be found in the database
321
322-- mixed case string --
323FAILED: DateTime::__construct(): Failed to parse time string (sTrInG) at position 0 (s): The timezone could not be found in the database
324FAILED: DateTime::__construct(): Failed to parse time string (sTrInG) at position 0 (s): The timezone could not be found in the database
325
326-- heredoc --
327FAILED: DateTime::__construct(): Failed to parse time string (hello world) at position 0 (h): The timezone could not be found in the database
328FAILED: DateTime::__construct(): Failed to parse time string (hello world) at position 0 (h): The timezone could not be found in the database
329
330-- instance of classWithToString --
331FAILED: DateTime::__construct(): Failed to parse time string (Class A object) at position 0 (C): The timezone could not be found in the database
332FAILED: DateTime::__construct(): Failed to parse time string (Class A object) at position 0 (C): The timezone could not be found in the database
333
334-- instance of classWithoutToString --
335FAILED: DateTime::__construct() expects parameter 1 to be string, object given
336FAILED: DateTime::__construct() expects parameter 1 to be string, object given
337
338-- undefined var --
339object(DateTime)#%d (3) {
340  ["date"]=>
341  string(26) "%s"
342  ["timezone_type"]=>
343  int(3)
344  ["timezone"]=>
345  string(13) "Europe/London"
346}
347object(DateTime)#%d (3) {
348  ["date"]=>
349  string(26) "%s"
350  ["timezone_type"]=>
351  int(3)
352  ["timezone"]=>
353  string(13) "Europe/London"
354}
355
356-- unset var --
357object(DateTime)#%d (3) {
358  ["date"]=>
359  string(26) "%s"
360  ["timezone_type"]=>
361  int(3)
362  ["timezone"]=>
363  string(13) "Europe/London"
364}
365object(DateTime)#%d (3) {
366  ["date"]=>
367  string(26) "%s"
368  ["timezone_type"]=>
369  int(3)
370  ["timezone"]=>
371  string(13) "Europe/London"
372}
373
374-- resource --
375FAILED: DateTime::__construct() expects parameter 1 to be string, resource given
376FAILED: DateTime::__construct() expects parameter 1 to be string, resource given
377===DONE===
378