1--TEST--
2Test var_export() function with locale
3--INI--
4serialize_precision=17
5--SKIPIF--
6<?php
7if (!setlocale(LC_ALL, "german", "de","de_DE","de_DE.ISO8859-1","de_DE.ISO_8859-1","de_DE.UTF-8")) {
8        die("skip locale needed for this test is not supported on this platform");
9}
10?>
11--FILE--
12<?php
13setlocale(LC_ALL, "german", "de","de_DE","de_DE.ISO8859-1","de_DE.ISO_8859-1","de_DE.UTF-8");
14/* Prototype: mixed var_export( mixed expression [, bool return]);
15 * Description: Returns the variable representation when the return parameter is used and evaluates to TRUE. Otherwise, this function will return NULL.
16
17*/
18
19echo "*** Testing var_export() with integer values ***\n";
20// different integer vlaues
21$valid_ints = array(
22                '0',
23                '1',
24                '-1',
25                '-2147483648', // max negative integer value
26                '-2147483647',
27                2147483647,  // max positive integer value
28                2147483640,
29                0x123B,      // integer as hexadecimal
30                '0x12ab',
31                '0Xfff',
32                '0XFA',
33                -0x80000000, // max negative integer as hexadecimal
34                '0x7fffffff',  // max postive integer as hexadecimal
35                0x7FFFFFFF,  // max postive integer as hexadecimal
36                '0123',        // integer as octal
37                01912,       // should be quivalent to octal 1
38                -020000000000, // max negative integer as octal
39                017777777777,  // max positive integer as octal
40               );
41$counter = 1;
42/* Loop to check for above integer values with var_export() */
43echo "\n*** Output for integer values ***\n";
44foreach($valid_ints as $int_value) {
45echo "\nIteration ".$counter."\n";
46var_export( $int_value );
47echo "\n";
48var_export( $int_value, FALSE);
49echo "\n";
50var_dump( var_export( $int_value, TRUE) );
51echo "\n";
52$counter++;
53}
54
55echo "*** Testing var_export() with valid boolean values ***\n";
56// different valid  boolean vlaues
57$valid_bool = array(
58		    1,
59		    TRUE,
60                true,
61                0,
62		    FALSE,
63		    false
64               );
65$counter = 1;
66/* Loop to check for above boolean values with var_export() */
67echo "\n*** Output for boolean values ***\n";
68foreach($valid_bool as $bool_value) {
69echo "\nIteration ".$counter."\n";
70var_export( $bool_value );
71echo "\n";
72var_export( $bool_value, FALSE);
73echo "\n";
74var_dump( var_export( $bool_value, TRUE) );
75echo "\n";
76$counter++;
77}
78
79echo "*** Testing var_export() with valid float values ***\n";
80// different valid  float vlaues
81$valid_floats = array(
82  -2147483649, // float value
83  2147483648,  // float value
84  -0x80000001, // float value, beyond max negative int
85  0x800000001, // float value, beyond max positive int
86  020000000001, // float value, beyond max positive int
87  -020000000001, // float value, beyond max negative int
88  0.0,
89  -0.1,
90  10.0000000000000000005,
91  10.5e+5,
92  1e5,
93  1e-5,
94  1e+5,
95  1E5,
96  1E+5,
97  1E-5,
98  .5e+7,
99  .6e-19,
100  .05E+44,
101  .0034E-30
102);
103$counter = 1;
104/* Loop to check for above float values with var_export() */
105echo "\n*** Output for float values ***\n";
106foreach($valid_bool as $float_value) {
107echo "\nIteration ".$counter."\n";
108var_export( $float_value );
109echo "\n";
110var_export( $float_value, FALSE);
111echo "\n";
112var_dump( var_export( $float_value, TRUE) );
113echo "\n";
114$counter++;
115}
116
117echo "*** Testing var_export() with valid strings ***\n";
118// different valid  string
119$valid_strings = array(
120            "",
121            " ",
122            '',
123            ' ',
124            "string",
125            'string',
126            "NULL",
127            'null',
128            "FALSE",
129            'false',
130            "\x0b",
131            "\0",
132            '\0',
133            '\060',
134            "\070"
135          );
136$counter = 1;
137/* Loop to check for above strings with var_export() */
138echo "\n*** Output for strings ***\n";
139foreach($valid_strings as $str) {
140echo "\nIteration ".$counter."\n";
141var_export( $str );
142echo "\n";
143var_export( $str, FALSE);
144echo "\n";
145var_dump( var_export( $str, TRUE) );
146echo "\n";
147$counter++;
148}
149
150echo "*** Testing var_export() with valid arrays ***\n";
151// different valid  arrays
152$valid_arrays = array(
153           array(),
154           array(NULL),
155           array(null),
156           array(true),
157           array(""),
158           array(''),
159           array(array(), array()),
160           array(array(1, 2), array('a', 'b')),
161           array(1 => 'One'),
162           array("test" => "is_array"),
163           array(0),
164           array(-1),
165           array(10.5, 5.6),
166           array("string", "test"),
167           array('string', 'test')
168          );
169$counter = 1;
170/* Loop to check for above arrays with var_export() */
171echo "\n*** Output for arrays ***\n";
172foreach($valid_arrays as $arr) {
173echo "\nIteration ".$counter."\n";
174var_export( $arr );
175echo "\n";
176var_export( $arr, FALSE);
177echo "\n";
178var_dump( var_export( $arr, TRUE) );
179echo "\n";
180$counter++;
181}
182
183echo "*** Testing var_export() with valid objects ***\n";
184
185// class with no members
186class foo
187{
188// no members
189}
190
191// abstract class
192abstract class abstractClass
193{
194  abstract protected function getClassName();
195  public function printClassName () {
196    echo $this->getClassName() . "\n";
197  }
198}
199// implement abstract class
200class concreteClass extends abstractClass
201{
202  protected function getClassName() {
203    return "concreteClass";
204  }
205}
206
207// interface class
208interface iValue
209{
210   public function setVal ($name, $val);
211   public function dumpVal ();
212}
213// implement the interface
214class Value implements iValue
215{
216  private $vars = array ();
217
218  public function setVal ( $name, $val ) {
219    $this->vars[$name] = $val;
220  }
221
222  public function dumpVal () {
223    var_export ( $vars );
224  }
225}
226
227// a gereral class
228class myClass
229{
230  var $foo_object;
231  public $public_var;
232  public $public_var1;
233  private $private_var;
234  protected $protected_var;
235
236  function myClass ( ) {
237    $this->foo_object = new foo();
238    $this->public_var = 10;
239    $this->public_var1 = new foo();
240    $this->private_var = new foo();
241    $this->proected_var = new foo();
242  }
243}
244
245// create a object of each class defined above
246$myClass_object = new myClass();
247$foo_object = new foo();
248$Value_object = new Value();
249$concreteClass_object = new concreteClass();
250
251$valid_objects = array(
252                  new stdclass,
253                  new foo,
254                  new concreteClass,
255                  new Value,
256                  new myClass,
257                  $myClass_object,
258                  $myClass_object->foo_object,
259                  $myClass_object->public_var1,
260                  $foo_object,
261                  $Value_object,
262                  $concreteClass_object
263                 );
264 $counter = 1;
265/* Loop to check for above objects with var_export() */
266echo "\n*** Output for objects ***\n";
267foreach($valid_objects as $obj) {
268echo "\nIteration ".$counter."\n";
269var_export( $obj );
270echo "\n";
271var_export( $obj, FALSE);
272echo "\n";
273var_dump( var_export( $obj, TRUE) );
274echo "\n";
275$counter++;
276}
277
278echo "*** Testing var_export() with valid null values ***\n";
279// different valid  null vlaues
280$unset_var = array();
281unset ($unset_var); // now a null
282$null_var = NULL;
283
284$valid_nulls = array(
285                NULL,
286                null,
287                $null_var,
288               );
289 $counter = 1;
290/* Loop to check for above null values with var_export() */
291echo "\n*** Output for null values ***\n";
292foreach($valid_nulls as $null_value) {
293echo "\nIteration ".$counter."\n";
294var_export( $null_value );
295echo "\n";
296var_export( $null_value, FALSE);
297echo "\n";
298var_dump( var_export( $null_value, true) );
299echo "\n";
300$counter++;
301}
302
303echo "\n*** Testing error conditions ***\n";
304//Zero argument
305var_export( var_export() );
306
307//arguments more than expected
308var_export( var_export(TRUE, FALSE, TRUE) );
309
310echo "\n\nDone";
311
312
313?>
314--EXPECTF--
315*** Testing var_export() with integer values ***
316
317*** Output for integer values ***
318
319Iteration 1
320'0'
321'0'
322string(3) "'0'"
323
324
325Iteration 2
326'1'
327'1'
328string(3) "'1'"
329
330
331Iteration 3
332'-1'
333'-1'
334string(4) "'-1'"
335
336
337Iteration 4
338'-2147483648'
339'-2147483648'
340string(13) "'-2147483648'"
341
342
343Iteration 5
344'-2147483647'
345'-2147483647'
346string(13) "'-2147483647'"
347
348
349Iteration 6
3502147483647
3512147483647
352string(10) "2147483647"
353
354
355Iteration 7
3562147483640
3572147483640
358string(10) "2147483640"
359
360
361Iteration 8
3624667
3634667
364string(4) "4667"
365
366
367Iteration 9
368'0x12ab'
369'0x12ab'
370string(8) "'0x12ab'"
371
372
373Iteration 10
374'0Xfff'
375'0Xfff'
376string(7) "'0Xfff'"
377
378
379Iteration 11
380'0XFA'
381'0XFA'
382string(6) "'0XFA'"
383
384
385Iteration 12
386-2147483648
387-2147483648
388string(11) "-2147483648"
389
390
391Iteration 13
392'0x7fffffff'
393'0x7fffffff'
394string(12) "'0x7fffffff'"
395
396
397Iteration 14
3982147483647
3992147483647
400string(10) "2147483647"
401
402
403Iteration 15
404'0123'
405'0123'
406string(6) "'0123'"
407
408
409Iteration 16
4101
4111
412string(1) "1"
413
414
415Iteration 17
416-2147483648
417-2147483648
418string(11) "-2147483648"
419
420
421Iteration 18
4222147483647
4232147483647
424string(10) "2147483647"
425
426*** Testing var_export() with valid boolean values ***
427
428*** Output for boolean values ***
429
430Iteration 1
4311
4321
433string(1) "1"
434
435
436Iteration 2
437true
438true
439string(4) "true"
440
441
442Iteration 3
443true
444true
445string(4) "true"
446
447
448Iteration 4
4490
4500
451string(1) "0"
452
453
454Iteration 5
455false
456false
457string(5) "false"
458
459
460Iteration 6
461false
462false
463string(5) "false"
464
465*** Testing var_export() with valid float values ***
466
467*** Output for float values ***
468
469Iteration 1
4701
4711
472string(1) "1"
473
474
475Iteration 2
476true
477true
478string(4) "true"
479
480
481Iteration 3
482true
483true
484string(4) "true"
485
486
487Iteration 4
4880
4890
490string(1) "0"
491
492
493Iteration 5
494false
495false
496string(5) "false"
497
498
499Iteration 6
500false
501false
502string(5) "false"
503
504*** Testing var_export() with valid strings ***
505
506*** Output for strings ***
507
508Iteration 1
509''
510''
511string(2) "''"
512
513
514Iteration 2
515' '
516' '
517string(3) "' '"
518
519
520Iteration 3
521''
522''
523string(2) "''"
524
525
526Iteration 4
527' '
528' '
529string(3) "' '"
530
531
532Iteration 5
533'string'
534'string'
535string(8) "'string'"
536
537
538Iteration 6
539'string'
540'string'
541string(8) "'string'"
542
543
544Iteration 7
545'NULL'
546'NULL'
547string(6) "'NULL'"
548
549
550Iteration 8
551'null'
552'null'
553string(6) "'null'"
554
555
556Iteration 9
557'FALSE'
558'FALSE'
559string(7) "'FALSE'"
560
561
562Iteration 10
563'false'
564'false'
565string(7) "'false'"
566
567
568Iteration 11
569''
570''
571string(3) "''"
572
573
574Iteration 12
575'' . "\0" . ''
576'' . "\0" . ''
577string(14) "'' . "\0" . ''"
578
579
580Iteration 13
581'\\0'
582'\\0'
583string(5) "'\\0'"
584
585
586Iteration 14
587'\\060'
588'\\060'
589string(7) "'\\060'"
590
591
592Iteration 15
593'8'
594'8'
595string(3) "'8'"
596
597*** Testing var_export() with valid arrays ***
598
599*** Output for arrays ***
600
601Iteration 1
602array (
603)
604array (
605)
606string(9) "array (
607)"
608
609
610Iteration 2
611array (
612  0 => NULL,
613)
614array (
615  0 => NULL,
616)
617string(22) "array (
618  0 => NULL,
619)"
620
621
622Iteration 3
623array (
624  0 => NULL,
625)
626array (
627  0 => NULL,
628)
629string(22) "array (
630  0 => NULL,
631)"
632
633
634Iteration 4
635array (
636  0 => true,
637)
638array (
639  0 => true,
640)
641string(22) "array (
642  0 => true,
643)"
644
645
646Iteration 5
647array (
648  0 => '',
649)
650array (
651  0 => '',
652)
653string(20) "array (
654  0 => '',
655)"
656
657
658Iteration 6
659array (
660  0 => '',
661)
662array (
663  0 => '',
664)
665string(20) "array (
666  0 => '',
667)"
668
669
670Iteration 7
671array (
672  0 =>
673  array (
674  ),
675  1 =>
676  array (
677  ),
678)
679array (
680  0 =>
681  array (
682  ),
683  1 =>
684  array (
685  ),
686)
687string(55) "array (
688  0 =>
689  array (
690  ),
691  1 =>
692  array (
693  ),
694)"
695
696
697Iteration 8
698array (
699  0 =>
700  array (
701    0 => 1,
702    1 => 2,
703  ),
704  1 =>
705  array (
706    0 => 'a',
707    1 => 'b',
708  ),
709)
710array (
711  0 =>
712  array (
713    0 => 1,
714    1 => 2,
715  ),
716  1 =>
717  array (
718    0 => 'a',
719    1 => 'b',
720  ),
721)
722string(107) "array (
723  0 =>
724  array (
725    0 => 1,
726    1 => 2,
727  ),
728  1 =>
729  array (
730    0 => 'a',
731    1 => 'b',
732  ),
733)"
734
735
736Iteration 9
737array (
738  1 => 'One',
739)
740array (
741  1 => 'One',
742)
743string(23) "array (
744  1 => 'One',
745)"
746
747
748Iteration 10
749array (
750  'test' => 'is_array',
751)
752array (
753  'test' => 'is_array',
754)
755string(33) "array (
756  'test' => 'is_array',
757)"
758
759
760Iteration 11
761array (
762  0 => 0,
763)
764array (
765  0 => 0,
766)
767string(19) "array (
768  0 => 0,
769)"
770
771
772Iteration 12
773array (
774  0 => -1,
775)
776array (
777  0 => -1,
778)
779string(20) "array (
780  0 => -1,
781)"
782
783
784Iteration 13
785array (
786  0 => 10.5,
787  1 => 5.5999999999999996,
788)
789array (
790  0 => 10.5,
791  1 => 5.5999999999999996,
792)
793string(49) "array (
794  0 => 10.5,
795  1 => 5.5999999999999996,
796)"
797
798
799Iteration 14
800array (
801  0 => 'string',
802  1 => 'test',
803)
804array (
805  0 => 'string',
806  1 => 'test',
807)
808string(41) "array (
809  0 => 'string',
810  1 => 'test',
811)"
812
813
814Iteration 15
815array (
816  0 => 'string',
817  1 => 'test',
818)
819array (
820  0 => 'string',
821  1 => 'test',
822)
823string(41) "array (
824  0 => 'string',
825  1 => 'test',
826)"
827
828*** Testing var_export() with valid objects ***
829
830*** Output for objects ***
831
832Iteration 1
833stdClass::__set_state(array(
834))
835stdClass::__set_state(array(
836))
837string(31) "stdClass::__set_state(array(
838))"
839
840
841Iteration 2
842foo::__set_state(array(
843))
844foo::__set_state(array(
845))
846string(26) "foo::__set_state(array(
847))"
848
849
850Iteration 3
851concreteClass::__set_state(array(
852))
853concreteClass::__set_state(array(
854))
855string(36) "concreteClass::__set_state(array(
856))"
857
858
859Iteration 4
860Value::__set_state(array(
861   'vars' =>
862  array (
863  ),
864))
865Value::__set_state(array(
866   'vars' =>
867  array (
868  ),
869))
870string(57) "Value::__set_state(array(
871   'vars' =>
872  array (
873  ),
874))"
875
876
877Iteration 5
878myClass::__set_state(array(
879   'foo_object' =>
880  foo::__set_state(array(
881  )),
882   'public_var' => 10,
883   'public_var1' =>
884  foo::__set_state(array(
885  )),
886   'private_var' =>
887  foo::__set_state(array(
888  )),
889   'protected_var' => NULL,
890   'proected_var' =>
891  foo::__set_state(array(
892  )),
893))
894myClass::__set_state(array(
895   'foo_object' =>
896  foo::__set_state(array(
897  )),
898   'public_var' => 10,
899   'public_var1' =>
900  foo::__set_state(array(
901  )),
902   'private_var' =>
903  foo::__set_state(array(
904  )),
905   'protected_var' => NULL,
906   'proected_var' =>
907  foo::__set_state(array(
908  )),
909))
910string(293) "myClass::__set_state(array(
911   'foo_object' =>
912  foo::__set_state(array(
913  )),
914   'public_var' => 10,
915   'public_var1' =>
916  foo::__set_state(array(
917  )),
918   'private_var' =>
919  foo::__set_state(array(
920  )),
921   'protected_var' => NULL,
922   'proected_var' =>
923  foo::__set_state(array(
924  )),
925))"
926
927
928Iteration 6
929myClass::__set_state(array(
930   'foo_object' =>
931  foo::__set_state(array(
932  )),
933   'public_var' => 10,
934   'public_var1' =>
935  foo::__set_state(array(
936  )),
937   'private_var' =>
938  foo::__set_state(array(
939  )),
940   'protected_var' => NULL,
941   'proected_var' =>
942  foo::__set_state(array(
943  )),
944))
945myClass::__set_state(array(
946   'foo_object' =>
947  foo::__set_state(array(
948  )),
949   'public_var' => 10,
950   'public_var1' =>
951  foo::__set_state(array(
952  )),
953   'private_var' =>
954  foo::__set_state(array(
955  )),
956   'protected_var' => NULL,
957   'proected_var' =>
958  foo::__set_state(array(
959  )),
960))
961string(293) "myClass::__set_state(array(
962   'foo_object' =>
963  foo::__set_state(array(
964  )),
965   'public_var' => 10,
966   'public_var1' =>
967  foo::__set_state(array(
968  )),
969   'private_var' =>
970  foo::__set_state(array(
971  )),
972   'protected_var' => NULL,
973   'proected_var' =>
974  foo::__set_state(array(
975  )),
976))"
977
978
979Iteration 7
980foo::__set_state(array(
981))
982foo::__set_state(array(
983))
984string(26) "foo::__set_state(array(
985))"
986
987
988Iteration 8
989foo::__set_state(array(
990))
991foo::__set_state(array(
992))
993string(26) "foo::__set_state(array(
994))"
995
996
997Iteration 9
998foo::__set_state(array(
999))
1000foo::__set_state(array(
1001))
1002string(26) "foo::__set_state(array(
1003))"
1004
1005
1006Iteration 10
1007Value::__set_state(array(
1008   'vars' =>
1009  array (
1010  ),
1011))
1012Value::__set_state(array(
1013   'vars' =>
1014  array (
1015  ),
1016))
1017string(57) "Value::__set_state(array(
1018   'vars' =>
1019  array (
1020  ),
1021))"
1022
1023
1024Iteration 11
1025concreteClass::__set_state(array(
1026))
1027concreteClass::__set_state(array(
1028))
1029string(36) "concreteClass::__set_state(array(
1030))"
1031
1032*** Testing var_export() with valid null values ***
1033
1034*** Output for null values ***
1035
1036Iteration 1
1037NULL
1038NULL
1039string(4) "NULL"
1040
1041
1042Iteration 2
1043NULL
1044NULL
1045string(4) "NULL"
1046
1047
1048Iteration 3
1049NULL
1050NULL
1051string(4) "NULL"
1052
1053
1054*** Testing error conditions ***
1055
1056Warning: var_export() expects at least 1 parameter, 0 given in %s on line %d
1057NULL
1058Warning: var_export() expects at most 2 parameters, 3 given in %s on line %d
1059NULL
1060
1061Done
1062