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