Skip to content

Commit 295a177

Browse files
authored
Zend/tests/offsets: Add tests where the offset is a reference (php#13506)
1 parent 0039446 commit 295a177

8 files changed

+219
-0
lines changed

Zend/tests/offsets/ArrayAccess_container_offset_behaviour.phpt

+31
Original file line numberDiff line numberDiff line change
@@ -123,6 +123,37 @@ foreach (['A', 'B'] as $class) {
123123
EXPECTED_OUTPUT
124124
);
125125

126+
if ($varOutput !== $expected_output) {
127+
file_put_contents(__DIR__ . DIRECTORY_SEPARATOR . "debug_ArrayAccess_container_{$failuresNb}.txt", $varOutput);
128+
++$failuresNb;
129+
$failures[] = $error;
130+
}
131+
++$testCasesTotal;
132+
}
133+
/* Using offsets as references */
134+
foreach ($offsets as $offset) {
135+
$dimension = &$offset;
136+
$container = new $class();
137+
$error = "(new $class())[&" . zend_test_var_export($dimension) . '] has different outputs' . "\n";
138+
ob_start();
139+
var_dump($dimension);
140+
$var_dump_output = ob_get_clean();
141+
142+
include $var_dim_filename;
143+
$varOutput = ob_get_contents();
144+
ob_clean();
145+
$varOutput = str_replace(
146+
[$var_dim_filename],
147+
['%s'],
148+
$varOutput
149+
);
150+
151+
$expected_output = str_replace(
152+
["VAR_DUMP_OF_OFFSET\n", "CLASS_NAME"],
153+
[$var_dump_output, $class],
154+
EXPECTED_OUTPUT
155+
);
156+
126157
if ($varOutput !== $expected_output) {
127158
file_put_contents(__DIR__ . DIRECTORY_SEPARATOR . "debug_ArrayAccess_container_{$failuresNb}.txt", $varOutput);
128159
++$failuresNb;

Zend/tests/offsets/ArrayObject_container_offset_behaviour.phpt

+31
Original file line numberDiff line numberDiff line change
@@ -332,6 +332,37 @@ foreach ($offsets as $dimension) {
332332
}
333333
++$testCasesTotal;
334334
}
335+
/* Using offsets as references */
336+
foreach ($offsets as $offset) {
337+
$dimension = &$offset;
338+
$container = new ArrayObject();
339+
$error = '(new ArrayObject())[&' . zend_test_var_export($dimension) . '] has different outputs' . "\n";
340+
ob_start();
341+
var_dump($dimension);
342+
$var_dump_output = ob_get_clean();
343+
344+
include $var_dim_filename;
345+
$varOutput = ob_get_contents();
346+
ob_clean();
347+
$varOutput = str_replace(
348+
[$var_dim_filename],
349+
['%s'],
350+
$varOutput
351+
);
352+
353+
if (
354+
!preg_match($EXPECTED_OUTPUT_VALID_OFFSETS_REGEX, $varOutput)
355+
&& !preg_match($EXPECTED_OUTPUT_INVALID_OFFSETS_REGEX, $varOutput)
356+
&& !preg_match($EXPECTED_OUTPUT_FLOAT_OFFSETS_REGEX, $varOutput)
357+
&& $varOutput !== EXPECTED_OUTPUT_NULL_OFFSET
358+
&& $varOutput !== EXPECTED_OUTPUT_RESOURCE_STDERR_OFFSETS
359+
) {
360+
file_put_contents(__DIR__ . DIRECTORY_SEPARATOR . "debug_ArrayObject_container_{$failuresNb}.txt", $varOutput);
361+
++$failuresNb;
362+
$failures[] = $error;
363+
}
364+
++$testCasesTotal;
365+
}
335366
ob_end_clean();
336367

337368
echo "Executed tests\n";

Zend/tests/offsets/array_container_offset_behaviour.phpt

+27
Original file line numberDiff line numberDiff line change
@@ -281,6 +281,33 @@ foreach ($offsets as $dimension) {
281281
}
282282
++$testCasesTotal;
283283
}
284+
/* Using offsets as references */
285+
foreach ($offsets as $offset) {
286+
$dimension = &$offset;
287+
$container = [];
288+
$error = '[][&' . zend_test_var_export($dimension) . '] has different outputs' . "\n";
289+
290+
include $var_dim_filename;
291+
$varOutput = ob_get_contents();
292+
ob_clean();
293+
$varOutput = str_replace(
294+
[$var_dim_filename],
295+
['%s'],
296+
$varOutput
297+
);
298+
299+
if (
300+
!preg_match($EXPECTED_OUTPUT_VALID_OFFSETS_REGEX, $varOutput)
301+
&& !preg_match($EXPECTED_OUTPUT_INVALID_OFFSETS_REGEX, $varOutput)
302+
&& !preg_match($EXPECTED_OUTPUT_FLOAT_OFFSETS_REGEX, $varOutput)
303+
&& $varOutput !== EXPECTED_OUTPUT_RESOURCE_STDERR_OFFSETS
304+
) {
305+
file_put_contents(__DIR__ . DIRECTORY_SEPARATOR . "debug_array_container_{$failuresNb}.txt", $varOutput);
306+
++$failuresNb;
307+
$failures[] = $error;
308+
}
309+
++$testCasesTotal;
310+
}
284311
ob_end_clean();
285312

286313
echo "Executed tests\n";

Zend/tests/offsets/false_container_offset_behaviour.phpt

+27
Original file line numberDiff line numberDiff line change
@@ -288,6 +288,33 @@ foreach ($offsets as $dimension) {
288288
}
289289
++$testCasesTotal;
290290
}
291+
/* Using offsets as references */
292+
foreach ($offsets as $offset) {
293+
$dimension = &$offset;
294+
$container = false;
295+
$error = 'false[&' . zend_test_var_export($dimension) . '] has different outputs' . "\n";
296+
297+
include $var_dim_filename;
298+
$varOutput = ob_get_contents();
299+
ob_clean();
300+
$varOutput = str_replace(
301+
[$var_dim_filename],
302+
['%s'],
303+
$varOutput
304+
);
305+
306+
if (
307+
!preg_match($EXPECTED_OUTPUT_VALID_OFFSETS_REGEX, $varOutput)
308+
&& !preg_match($EXPECTED_OUTPUT_INVALID_OFFSETS_REGEX, $varOutput)
309+
&& !preg_match($EXPECTED_OUTPUT_FLOAT_OFFSETS_REGEX, $varOutput)
310+
&& $varOutput !== EXPECTED_OUTPUT_RESOURCE_STDERR_OFFSETS
311+
) {
312+
file_put_contents(__DIR__ . DIRECTORY_SEPARATOR . "debug_false_container_{$failuresNb}.txt", $varOutput);
313+
++$failuresNb;
314+
$failures[] = $error;
315+
}
316+
++$testCasesTotal;
317+
}
291318
ob_end_clean();
292319

293320
echo "Executed tests\n";

Zend/tests/offsets/invalid_container_offset_behaviour.phpt

+20
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,27 @@ OUTPUT;
8080
}
8181
++$testCasesTotal;
8282
}
83+
/* Using offsets as references */
84+
foreach ($offsets as $offset) {
85+
$dimension = &$offset;
86+
$error = $containerStr . '[&' . zend_test_var_export($dimension) . '] has different outputs' . "\n";
8387

88+
include $var_dim_filename;
89+
$varOutput = ob_get_contents();
90+
ob_clean();
91+
$varOutput = str_replace(
92+
[$var_dim_filename],
93+
['%s'],
94+
$varOutput
95+
);
96+
97+
if ($EXPECTED_OUTPUT !== $varOutput) {
98+
file_put_contents(__DIR__ . DIRECTORY_SEPARATOR . "debug_invalid_container_{$failuresNb}.txt", $varOutput);
99+
++$failuresNb;
100+
$failures[] = $error;
101+
}
102+
++$testCasesTotal;
103+
}
84104
}
85105
ob_end_clean();
86106

Zend/tests/offsets/null_container_offset_behaviour.phpt

+27
Original file line numberDiff line numberDiff line change
@@ -280,6 +280,33 @@ foreach ($offsets as $dimension) {
280280
}
281281
++$testCasesTotal;
282282
}
283+
/* Using offsets as references */
284+
foreach ($offsets as $offset) {
285+
$dimension = &$offset;
286+
$container = null;
287+
$error = 'null[&' . zend_test_var_export($offset) . '] has different outputs' . "\n";
288+
289+
include $var_dim_filename;
290+
$varOutput = ob_get_contents();
291+
ob_clean();
292+
$varOutput = str_replace(
293+
[$var_dim_filename],
294+
['%s'],
295+
$varOutput
296+
);
297+
298+
if (
299+
!preg_match($EXPECTED_OUTPUT_VALID_OFFSETS_REGEX, $varOutput)
300+
&& !preg_match($EXPECTED_OUTPUT_INVALID_OFFSETS_REGEX, $varOutput)
301+
&& !preg_match($EXPECTED_OUTPUT_FLOAT_OFFSETS_REGEX, $varOutput)
302+
&& $varOutput !== EXPECTED_OUTPUT_RESOURCE_STDERR_OFFSETS
303+
) {
304+
file_put_contents(__DIR__ . DIRECTORY_SEPARATOR . "debug_null_container_{$failuresNb}.txt", $varOutput);
305+
++$failuresNb;
306+
$failures[] = $error;
307+
}
308+
++$testCasesTotal;
309+
}
283310
ob_end_clean();
284311

285312
echo "Executed tests\n";

Zend/tests/offsets/object_container_offset_behaviour.phpt

+22
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,28 @@ foreach ($offsets as $dimension) {
6262
}
6363
++$testCasesTotal;
6464
}
65+
/* Using offsets as references */
66+
foreach ($offsets as $offset) {
67+
$dimension = &$offset;
68+
$container = new stdClass();
69+
$error = '(new stdClass())[&' . zend_test_var_export($offset) . '] has different outputs' . "\n";
70+
71+
include $var_dim_filename;
72+
$varOutput = ob_get_contents();
73+
ob_clean();
74+
$varOutput = str_replace(
75+
[$var_dim_filename],
76+
['%s'],
77+
$varOutput
78+
);
79+
80+
if ($varOutput !== EXPECTED_OUTPUT) {
81+
file_put_contents(__DIR__ . DIRECTORY_SEPARATOR . "debug_object_container_{$failuresNb}.txt", $varOutput);
82+
++$failuresNb;
83+
$failures[] = $error;
84+
}
85+
++$testCasesTotal;
86+
}
6587
ob_end_clean();
6688

6789
echo "Executed tests\n";

Zend/tests/offsets/string_container_offset_behaviour.phpt

+34
Original file line numberDiff line numberDiff line change
@@ -661,6 +661,40 @@ foreach ($offsets as $dimension) {
661661
}
662662
++$testCasesTotal;
663663
}
664+
/* Using offsets as references */
665+
foreach ($offsets as $offset) {
666+
$dimension = &$offset;
667+
$container = '';
668+
$error = '""[&' . zend_test_var_export($offset) . '] has different outputs' . "\n";
669+
670+
include $var_dim_filename;
671+
$varOutput = ob_get_contents();
672+
ob_clean();
673+
$varOutput = str_replace(
674+
[$var_dim_filename],
675+
['%s'],
676+
$varOutput
677+
);
678+
679+
if (
680+
!preg_match($EXPECTED_OUTPUT_VALID_OFFSETS_REGEX, $varOutput)
681+
&& !preg_match($EXPECTED_OUTPUT_VALID_OFFSETS_OUT_OF_RANGE_REGEX, $varOutput)
682+
&& !preg_match($EXPECTED_OUTPUT_STRING_CAST_OFFSETS_REGEX, $varOutput)
683+
&& !preg_match($EXPECTED_OUTPUT_STRING_CAST_OFFSETS_TO_0_REGEX, $varOutput)
684+
&& !preg_match($EXPECTED_OUTPUT_STRING_CAST_OFFSETS_OUT_OF_RANGE_REGEX, $varOutput)
685+
&& !preg_match($EXPECTF_OUTPUT_FLOAT_OFFSETS_OUT_OF_RANGE_REGEX, $varOutput)
686+
&& !preg_match($EXPECTED_OUTPUT_FLOAT_INF_NAN_OFFSETS_REGEX, $varOutput)
687+
&& !preg_match($EXPECTED_OUTPUT_INVALID_OFFSETS_REGEX, $varOutput)
688+
&& $varOutput !== EXPECTED_OUTPUT_INVALID_OFFSETS_AS_STRINGS
689+
&& !preg_match($EXPECTED_OUTPUT_INVALID_OFFSETS_AS_LEADING_NUMERIC_STRINGS_REGEX, $varOutput)
690+
&& !preg_match($EXPECTED_OUTPUT_INVALID_OFFSETS_AS_LEADING_NUMERIC_STRINGS_TO_0_REGEX, $varOutput)
691+
) {
692+
file_put_contents(__DIR__ . DIRECTORY_SEPARATOR . "debug_string_container_{$failuresNb}.txt", $varOutput);
693+
++$failuresNb;
694+
$failures[] = $error;
695+
}
696+
++$testCasesTotal;
697+
}
664698
ob_end_clean();
665699

666700
echo "Executed tests\n";

0 commit comments

Comments
 (0)