Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
29.49% covered (danger)
29.49%
46 / 156
71.43% covered (warning)
71.43%
5 / 7
CRAP
0.00% covered (danger)
0.00%
0 / 1
phpbb_request_var_test
29.49% covered (danger)
29.49%
46 / 156
71.43% covered (warning)
71.43%
5 / 7
45.06
0.00% covered (danger)
0.00%
0 / 1
 test_post
100.00% covered (success)
100.00%
8 / 8
100.00% covered (success)
100.00%
1 / 1
2
 test_get
100.00% covered (success)
100.00%
8 / 8
100.00% covered (success)
100.00%
1 / 1
2
 test_cookie
100.00% covered (success)
100.00%
10 / 10
100.00% covered (success)
100.00%
1 / 1
2
 unset_variables
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 test_deep_multi_dim_array_access
100.00% covered (success)
100.00%
19 / 19
100.00% covered (success)
100.00%
1 / 1
1
 deep_access
0.00% covered (danger)
0.00%
0 / 6
0.00% covered (danger)
0.00%
0 / 1
2
 request_variables
0.00% covered (danger)
0.00%
0 / 104
0.00% covered (danger)
0.00%
0 / 1
2
1<?php
2/**
3*
4* This file is part of the phpBB Forum Software package.
5*
6* @copyright (c) phpBB Limited <https://www.phpbb.com>
7* @license GNU General Public License, version 2 (GPL-2.0)
8*
9* For full copyright and license information, please see
10* the docs/CREDITS.txt file.
11*
12*/
13
14class phpbb_request_var_test extends phpbb_test_case
15{
16    /**
17    * @dataProvider request_variables
18    */
19    public function test_post($variable_value, $default, $multibyte, $expected)
20    {
21        $variable_name = 'name';
22        $this->unset_variables($variable_name);
23
24        $_POST[$variable_name] = $variable_value;
25        $_REQUEST[$variable_name] = $variable_value;
26
27        $request = new \phpbb\request\request(new \phpbb\request\type_cast_helper(), false);
28        $result = $request->variable($variable_name, $default, $multibyte);
29
30        $label = 'Requesting POST variable, converting from ' . gettype($variable_value) . ' to ' . gettype($default) . (($multibyte) ? ' multibyte' : '');
31        $this->assertEquals($expected, $result, $label);
32    }
33
34    /**
35    * @dataProvider request_variables
36    */
37    public function test_get($variable_value, $default, $multibyte, $expected)
38    {
39        $variable_name = 'name';
40        $this->unset_variables($variable_name);
41
42        $_GET[$variable_name] = $variable_value;
43        $_REQUEST[$variable_name] = $variable_value;
44
45        $request = new \phpbb\request\request(new \phpbb\request\type_cast_helper(), false);
46        $result = $request->variable($variable_name, $default, $multibyte);
47
48        $label = 'Requesting GET variable, converting from ' . gettype($variable_value) . ' to ' . gettype($default) . (($multibyte) ? ' multibyte' : '');
49        $this->assertEquals($expected, $result, $label);
50    }
51
52    /**
53    * @dataProvider request_variables
54    */
55    public function test_cookie($variable_value, $default, $multibyte, $expected)
56    {
57        $variable_name = 'name';
58        $this->unset_variables($variable_name);
59
60        $_GET[$variable_name] = false;
61        $_POST[$variable_name] = false;
62        $_REQUEST[$variable_name] = false;
63        $_COOKIE[$variable_name] = $variable_value;
64
65        $request = new \phpbb\request\request(new \phpbb\request\type_cast_helper(), false);
66        $result = $request->variable($variable_name, $default, $multibyte, \phpbb\request\request_interface::COOKIE);
67
68        $label = 'Requesting COOKIE variable, converting from ' . gettype($variable_value) . ' to ' . gettype($default) . (($multibyte) ? ' multibyte' : '');
69        $this->assertEquals($expected, $result, $label);
70    }
71
72    /**
73    * Helper for unsetting globals
74    */
75    private function unset_variables($var)
76    {
77        unset($_GET[$var], $_POST[$var], $_REQUEST[$var], $_COOKIE[$var]);
78    }
79
80    /**
81    * @dataProvider deep_access
82    * Only possible with 3.1.x (later)
83    */
84    public function test_deep_multi_dim_array_access($path, $default, $expected)
85    {
86        $this->unset_variables('var');
87
88        // cannot set $_REQUEST directly because in \phpbb\request\request implementation
89        // $_REQUEST = $_POST + $_GET
90        $_POST['var'] = array(
91            0 => array(
92                'b' => array(
93                    true => array(
94                        5 => 'c',
95                        6 => 'd',
96                    ),
97                ),
98            ),
99            2 => array(
100                3 => array(
101                    false => 5,
102                ),
103            ),
104        );
105
106        $request = new \phpbb\request\request(new \phpbb\request\type_cast_helper(), false);
107        $result = $request->variable($path, $default);
108        $this->assertEquals($expected, $result);
109    }
110
111    public static function deep_access()
112    {
113        return array(
114            // array(path, default, expected result)
115            array(array('var', 0, 'b', true, 5), '', 'c'),
116            array(array('var', 0, 'b', true, 6), '', 'd'),
117            array(array('var', 2, 3, false), 0, 5),
118            array(array('var', 0, 'b', true), array(0 => ''), array(5 => 'c', 6 => 'd')),
119        );
120    }
121
122    public static function request_variables()
123    {
124        return array(
125            // strings
126            array('abc', '', false, 'abc'),
127            array('  some  spaces  ', '', true, 'some  spaces'),
128            array("\r\rsome\rcarriage\r\rreturns\r", '', true, "some\ncarriage\n\nreturns"),
129            array("\n\nsome\ncarriage\n\nreturns\n", '', true, "some\ncarriage\n\nreturns"),
130            array("\r\n\r\nsome\r\ncarriage\r\n\r\nreturns\r\n", '', true, "some\ncarriage\n\nreturns"),
131            array("we\xC2\xA1rd\xE1\x9A\x80ch\xCE\xB1r\xC2\xADacters", '', true, "we\xC2\xA1rd\xE1\x9A\x80ch\xCE\xB1r\xC2\xADacters"),
132            array("we\xC2\xA1rd\xE1\x9A\x80ch\xCE\xB1r\xC2\xADacters", '', false, "we??rd???ch??r??acters"),
133            array("Some <html> \"entities\" like &", '', true, "Some &lt;html&gt; &quot;entities&quot; like &amp;"),
134
135            // integers
136            array('1234', 0, false, 1234),
137            array('abc', 12, false, 0),
138            array('324abc', 0, false, 324),
139
140            // string to array
141            array('123', array(0), false, array()),
142            array('123', array(''), false, array()),
143
144            // 1 dimensional arrays
145            array(
146                // input:
147                array('123', 'abc'),
148                // default:
149                array(''),
150                false,
151                // expected:
152                array('123', 'abc')
153            ),
154            array(
155                // input:
156                array('123', 'abc'),
157                // default:
158                array(999),
159                false,
160                // expected:
161                array(123, 0)
162            ),
163            array(
164                // input:
165                array('xyz' => '123', 'abc' => 'abc'),
166                // default:
167                array('' => ''),
168                false,
169                // expected:
170                array('xyz' => '123', 'abc' => 'abc')
171            ),
172            array(
173                // input:
174                array('xyz' => '123', 'abc' => 'abc'),
175                // default:
176                array('' => 0),
177                false,
178                // expected:
179                array('xyz' => 123, 'abc' => 0)
180            ),
181
182            // 2 dimensional arrays
183            array(
184                // input:
185                '',
186                // default:
187                array(array(0)),
188                false,
189                // expected:
190                array()
191            ),
192            array(
193                // input:
194                array(
195                    'xyz' => array('123', 'def'),
196                    'abc' => 'abc'
197                ),
198                // default:
199                array('' => array('')),
200                false,
201                // expected:
202                array(
203                    'xyz' => array('123', 'def'),
204                    'abc' => array()
205                )
206            ),
207            array(
208                // input:
209                array(
210                    'xyz' => array('123', 'def'),
211                    'abc' => 'abc'
212                ),
213                // default:
214                array('' => array(0)),
215                false,
216                // expected:
217                array(
218                    'xyz' => array(123, 0),
219                    'abc' => array()
220                )
221            ),
222            array(
223                // input:
224                array(
225                    0 => array(0 => array(3, '4', 'ab'), 1 => array()),
226                    1 => array(array(3, 4)),
227                ),
228                // default:
229                array(0 => array(0 => array(0))),
230                false,
231                // expected:
232                array(
233                    0 => array(0 => array(3, 4, 0), 1 => array()),
234                    1 => array(array(3, 4))
235                )
236            ),
237            array(
238                // input:
239                array(
240                    'ü' => array(array('c' => 'd')),
241                    'ä' => array(4 => array('a' => 2, 'ö' => 3)),
242                ),
243                // default:
244                array('' => array(0 => array('' => 0))),
245                false,
246                // expected:
247                array(
248                    '??' => array(4 => array('a' => 2, '??' => 3)),
249                )
250            ),
251            array(
252                // input:
253                array(
254                    'ü' => array(array('c' => 'd')),
255                    'ä' => array(4 => array('a' => 2, 'ö' => 3)),
256                ),
257                // default:
258                array('' => array(0 => array('' => 0))),
259                true,
260                // expected:
261                array(
262                    'ü' => array(array('c' => 0)),
263                    'ä' => array(4 => array('a' => 2, 'ö' => 3)),
264                )
265            ),
266        );
267    }
268
269}
270