1--TEST--
2Test session_decode() function : basic functionality
3--SKIPIF--
4<?php include('skipif.inc'); ?>
5--FILE--
6<?php
7
8ob_start();
9
10echo "*** Testing session_decode() : basic functionality ***\n";
11
12// Get an unset variable
13$unset_var = 10;
14unset($unset_var);
15
16class classA
17{
18    public function __toString() {
19        return "Hello World!";
20    }
21}
22
23$heredoc = <<<EOT
24Hello World!
25EOT;
26
27$fp = fopen(__FILE__, "r");
28
29// Unexpected values to be passed as arguments
30$inputs = array(
31
32       // Integer data
33/*1*/  0,
34       1,
35       12345,
36       -2345,
37
38       // Float data
39/*5*/  10.5,
40       -10.5,
41       12.3456789000e10,
42       12.3456789000E-10,
43       .5,
44
45       // Null data
46/*10*/ NULL,
47       null,
48
49       // Boolean data
50/*12*/ true,
51       false,
52       TRUE,
53       FALSE,
54
55       // Empty strings
56/*16*/ "",
57       '',
58
59       // Invalid string data
60/*18*/ "Nothing",
61       'Nothing',
62       $heredoc,
63
64       // Object data
65/*21*/ new classA(),
66
67       // Undefined data
68/*22*/ @$undefined_var,
69
70       // Unset data
71/*23*/ @$unset_var,
72
73       // Resource variable
74/*24*/ $fp
75);
76
77var_dump(session_start());
78$iterator = 1;
79foreach($inputs as $input) {
80    echo "\n-- Iteration $iterator --\n";
81    $_SESSION["data"] = $input;
82    $encoded = session_encode();
83    var_dump(session_decode($encoded));
84    var_dump($_SESSION);
85    $iterator++;
86};
87
88var_dump(session_destroy());
89fclose($fp);
90echo "Done";
91ob_end_flush();
92?>
93--EXPECT--
94*** Testing session_decode() : basic functionality ***
95bool(true)
96
97-- Iteration 1 --
98bool(true)
99array(1) {
100  ["data"]=>
101  int(0)
102}
103
104-- Iteration 2 --
105bool(true)
106array(1) {
107  ["data"]=>
108  int(1)
109}
110
111-- Iteration 3 --
112bool(true)
113array(1) {
114  ["data"]=>
115  int(12345)
116}
117
118-- Iteration 4 --
119bool(true)
120array(1) {
121  ["data"]=>
122  int(-2345)
123}
124
125-- Iteration 5 --
126bool(true)
127array(1) {
128  ["data"]=>
129  float(10.5)
130}
131
132-- Iteration 6 --
133bool(true)
134array(1) {
135  ["data"]=>
136  float(-10.5)
137}
138
139-- Iteration 7 --
140bool(true)
141array(1) {
142  ["data"]=>
143  float(123456789000)
144}
145
146-- Iteration 8 --
147bool(true)
148array(1) {
149  ["data"]=>
150  float(1.23456789E-9)
151}
152
153-- Iteration 9 --
154bool(true)
155array(1) {
156  ["data"]=>
157  float(0.5)
158}
159
160-- Iteration 10 --
161bool(true)
162array(1) {
163  ["data"]=>
164  NULL
165}
166
167-- Iteration 11 --
168bool(true)
169array(1) {
170  ["data"]=>
171  NULL
172}
173
174-- Iteration 12 --
175bool(true)
176array(1) {
177  ["data"]=>
178  bool(true)
179}
180
181-- Iteration 13 --
182bool(true)
183array(1) {
184  ["data"]=>
185  bool(false)
186}
187
188-- Iteration 14 --
189bool(true)
190array(1) {
191  ["data"]=>
192  bool(true)
193}
194
195-- Iteration 15 --
196bool(true)
197array(1) {
198  ["data"]=>
199  bool(false)
200}
201
202-- Iteration 16 --
203bool(true)
204array(1) {
205  ["data"]=>
206  string(0) ""
207}
208
209-- Iteration 17 --
210bool(true)
211array(1) {
212  ["data"]=>
213  string(0) ""
214}
215
216-- Iteration 18 --
217bool(true)
218array(1) {
219  ["data"]=>
220  string(7) "Nothing"
221}
222
223-- Iteration 19 --
224bool(true)
225array(1) {
226  ["data"]=>
227  string(7) "Nothing"
228}
229
230-- Iteration 20 --
231bool(true)
232array(1) {
233  ["data"]=>
234  string(12) "Hello World!"
235}
236
237-- Iteration 21 --
238bool(true)
239array(1) {
240  ["data"]=>
241  object(classA)#2 (0) {
242  }
243}
244
245-- Iteration 22 --
246bool(true)
247array(1) {
248  ["data"]=>
249  NULL
250}
251
252-- Iteration 23 --
253bool(true)
254array(1) {
255  ["data"]=>
256  NULL
257}
258
259-- Iteration 24 --
260bool(true)
261array(1) {
262  ["data"]=>
263  int(0)
264}
265bool(true)
266Done
267