From 295a1777607bfb227a538353e1b04e7f9eb482fe Mon Sep 17 00:00:00 2001 From: Gina Peter Banyard Date: Mon, 26 Feb 2024 03:36:35 +0000 Subject: [PATCH] Zend/tests/offsets: Add tests where the offset is a reference (#13506) --- ...rrayAccess_container_offset_behaviour.phpt | 31 +++++++++++++++++ ...rrayObject_container_offset_behaviour.phpt | 31 +++++++++++++++++ .../array_container_offset_behaviour.phpt | 27 +++++++++++++++ .../false_container_offset_behaviour.phpt | 27 +++++++++++++++ .../invalid_container_offset_behaviour.phpt | 20 +++++++++++ .../null_container_offset_behaviour.phpt | 27 +++++++++++++++ .../object_container_offset_behaviour.phpt | 22 ++++++++++++ .../string_container_offset_behaviour.phpt | 34 +++++++++++++++++++ 8 files changed, 219 insertions(+) diff --git a/Zend/tests/offsets/ArrayAccess_container_offset_behaviour.phpt b/Zend/tests/offsets/ArrayAccess_container_offset_behaviour.phpt index 5a5fab352be..b45b373c7b6 100644 --- a/Zend/tests/offsets/ArrayAccess_container_offset_behaviour.phpt +++ b/Zend/tests/offsets/ArrayAccess_container_offset_behaviour.phpt @@ -123,6 +123,37 @@ foreach (['A', 'B'] as $class) { EXPECTED_OUTPUT ); + if ($varOutput !== $expected_output) { + file_put_contents(__DIR__ . DIRECTORY_SEPARATOR . "debug_ArrayAccess_container_{$failuresNb}.txt", $varOutput); + ++$failuresNb; + $failures[] = $error; + } + ++$testCasesTotal; + } + /* Using offsets as references */ + foreach ($offsets as $offset) { + $dimension = &$offset; + $container = new $class(); + $error = "(new $class())[&" . zend_test_var_export($dimension) . '] has different outputs' . "\n"; + ob_start(); + var_dump($dimension); + $var_dump_output = ob_get_clean(); + + include $var_dim_filename; + $varOutput = ob_get_contents(); + ob_clean(); + $varOutput = str_replace( + [$var_dim_filename], + ['%s'], + $varOutput + ); + + $expected_output = str_replace( + ["VAR_DUMP_OF_OFFSET\n", "CLASS_NAME"], + [$var_dump_output, $class], + EXPECTED_OUTPUT + ); + if ($varOutput !== $expected_output) { file_put_contents(__DIR__ . DIRECTORY_SEPARATOR . "debug_ArrayAccess_container_{$failuresNb}.txt", $varOutput); ++$failuresNb; diff --git a/Zend/tests/offsets/ArrayObject_container_offset_behaviour.phpt b/Zend/tests/offsets/ArrayObject_container_offset_behaviour.phpt index ae4685f093e..7b3efbbb02d 100644 --- a/Zend/tests/offsets/ArrayObject_container_offset_behaviour.phpt +++ b/Zend/tests/offsets/ArrayObject_container_offset_behaviour.phpt @@ -332,6 +332,37 @@ foreach ($offsets as $dimension) { } ++$testCasesTotal; } +/* Using offsets as references */ +foreach ($offsets as $offset) { + $dimension = &$offset; + $container = new ArrayObject(); + $error = '(new ArrayObject())[&' . zend_test_var_export($dimension) . '] has different outputs' . "\n"; + ob_start(); + var_dump($dimension); + $var_dump_output = ob_get_clean(); + + include $var_dim_filename; + $varOutput = ob_get_contents(); + ob_clean(); + $varOutput = str_replace( + [$var_dim_filename], + ['%s'], + $varOutput + ); + + if ( + !preg_match($EXPECTED_OUTPUT_VALID_OFFSETS_REGEX, $varOutput) + && !preg_match($EXPECTED_OUTPUT_INVALID_OFFSETS_REGEX, $varOutput) + && !preg_match($EXPECTED_OUTPUT_FLOAT_OFFSETS_REGEX, $varOutput) + && $varOutput !== EXPECTED_OUTPUT_NULL_OFFSET + && $varOutput !== EXPECTED_OUTPUT_RESOURCE_STDERR_OFFSETS + ) { + file_put_contents(__DIR__ . DIRECTORY_SEPARATOR . "debug_ArrayObject_container_{$failuresNb}.txt", $varOutput); + ++$failuresNb; + $failures[] = $error; + } + ++$testCasesTotal; +} ob_end_clean(); echo "Executed tests\n"; diff --git a/Zend/tests/offsets/array_container_offset_behaviour.phpt b/Zend/tests/offsets/array_container_offset_behaviour.phpt index 2755e945259..793108a4ee5 100644 --- a/Zend/tests/offsets/array_container_offset_behaviour.phpt +++ b/Zend/tests/offsets/array_container_offset_behaviour.phpt @@ -281,6 +281,33 @@ foreach ($offsets as $dimension) { } ++$testCasesTotal; } +/* Using offsets as references */ +foreach ($offsets as $offset) { + $dimension = &$offset; + $container = []; + $error = '[][&' . zend_test_var_export($dimension) . '] has different outputs' . "\n"; + + include $var_dim_filename; + $varOutput = ob_get_contents(); + ob_clean(); + $varOutput = str_replace( + [$var_dim_filename], + ['%s'], + $varOutput + ); + + if ( + !preg_match($EXPECTED_OUTPUT_VALID_OFFSETS_REGEX, $varOutput) + && !preg_match($EXPECTED_OUTPUT_INVALID_OFFSETS_REGEX, $varOutput) + && !preg_match($EXPECTED_OUTPUT_FLOAT_OFFSETS_REGEX, $varOutput) + && $varOutput !== EXPECTED_OUTPUT_RESOURCE_STDERR_OFFSETS + ) { + file_put_contents(__DIR__ . DIRECTORY_SEPARATOR . "debug_array_container_{$failuresNb}.txt", $varOutput); + ++$failuresNb; + $failures[] = $error; + } + ++$testCasesTotal; +} ob_end_clean(); echo "Executed tests\n"; diff --git a/Zend/tests/offsets/false_container_offset_behaviour.phpt b/Zend/tests/offsets/false_container_offset_behaviour.phpt index e90577d634b..8a6cd93b726 100644 --- a/Zend/tests/offsets/false_container_offset_behaviour.phpt +++ b/Zend/tests/offsets/false_container_offset_behaviour.phpt @@ -288,6 +288,33 @@ foreach ($offsets as $dimension) { } ++$testCasesTotal; } +/* Using offsets as references */ +foreach ($offsets as $offset) { + $dimension = &$offset; + $container = false; + $error = 'false[&' . zend_test_var_export($dimension) . '] has different outputs' . "\n"; + + include $var_dim_filename; + $varOutput = ob_get_contents(); + ob_clean(); + $varOutput = str_replace( + [$var_dim_filename], + ['%s'], + $varOutput + ); + + if ( + !preg_match($EXPECTED_OUTPUT_VALID_OFFSETS_REGEX, $varOutput) + && !preg_match($EXPECTED_OUTPUT_INVALID_OFFSETS_REGEX, $varOutput) + && !preg_match($EXPECTED_OUTPUT_FLOAT_OFFSETS_REGEX, $varOutput) + && $varOutput !== EXPECTED_OUTPUT_RESOURCE_STDERR_OFFSETS + ) { + file_put_contents(__DIR__ . DIRECTORY_SEPARATOR . "debug_false_container_{$failuresNb}.txt", $varOutput); + ++$failuresNb; + $failures[] = $error; + } + ++$testCasesTotal; +} ob_end_clean(); echo "Executed tests\n"; diff --git a/Zend/tests/offsets/invalid_container_offset_behaviour.phpt b/Zend/tests/offsets/invalid_container_offset_behaviour.phpt index 2a403d339f8..f904481c7d9 100644 --- a/Zend/tests/offsets/invalid_container_offset_behaviour.phpt +++ b/Zend/tests/offsets/invalid_container_offset_behaviour.phpt @@ -80,7 +80,27 @@ OUTPUT; } ++$testCasesTotal; } + /* Using offsets as references */ + foreach ($offsets as $offset) { + $dimension = &$offset; + $error = $containerStr . '[&' . zend_test_var_export($dimension) . '] has different outputs' . "\n"; + include $var_dim_filename; + $varOutput = ob_get_contents(); + ob_clean(); + $varOutput = str_replace( + [$var_dim_filename], + ['%s'], + $varOutput + ); + + if ($EXPECTED_OUTPUT !== $varOutput) { + file_put_contents(__DIR__ . DIRECTORY_SEPARATOR . "debug_invalid_container_{$failuresNb}.txt", $varOutput); + ++$failuresNb; + $failures[] = $error; + } + ++$testCasesTotal; + } } ob_end_clean(); diff --git a/Zend/tests/offsets/null_container_offset_behaviour.phpt b/Zend/tests/offsets/null_container_offset_behaviour.phpt index e80ff059469..0fe02556d3e 100644 --- a/Zend/tests/offsets/null_container_offset_behaviour.phpt +++ b/Zend/tests/offsets/null_container_offset_behaviour.phpt @@ -280,6 +280,33 @@ foreach ($offsets as $dimension) { } ++$testCasesTotal; } +/* Using offsets as references */ +foreach ($offsets as $offset) { + $dimension = &$offset; + $container = null; + $error = 'null[&' . zend_test_var_export($offset) . '] has different outputs' . "\n"; + + include $var_dim_filename; + $varOutput = ob_get_contents(); + ob_clean(); + $varOutput = str_replace( + [$var_dim_filename], + ['%s'], + $varOutput + ); + + if ( + !preg_match($EXPECTED_OUTPUT_VALID_OFFSETS_REGEX, $varOutput) + && !preg_match($EXPECTED_OUTPUT_INVALID_OFFSETS_REGEX, $varOutput) + && !preg_match($EXPECTED_OUTPUT_FLOAT_OFFSETS_REGEX, $varOutput) + && $varOutput !== EXPECTED_OUTPUT_RESOURCE_STDERR_OFFSETS + ) { + file_put_contents(__DIR__ . DIRECTORY_SEPARATOR . "debug_null_container_{$failuresNb}.txt", $varOutput); + ++$failuresNb; + $failures[] = $error; + } + ++$testCasesTotal; +} ob_end_clean(); echo "Executed tests\n"; diff --git a/Zend/tests/offsets/object_container_offset_behaviour.phpt b/Zend/tests/offsets/object_container_offset_behaviour.phpt index afe9f51f3d4..5770b1e8812 100644 --- a/Zend/tests/offsets/object_container_offset_behaviour.phpt +++ b/Zend/tests/offsets/object_container_offset_behaviour.phpt @@ -62,6 +62,28 @@ foreach ($offsets as $dimension) { } ++$testCasesTotal; } +/* Using offsets as references */ +foreach ($offsets as $offset) { + $dimension = &$offset; + $container = new stdClass(); + $error = '(new stdClass())[&' . zend_test_var_export($offset) . '] has different outputs' . "\n"; + + include $var_dim_filename; + $varOutput = ob_get_contents(); + ob_clean(); + $varOutput = str_replace( + [$var_dim_filename], + ['%s'], + $varOutput + ); + + if ($varOutput !== EXPECTED_OUTPUT) { + file_put_contents(__DIR__ . DIRECTORY_SEPARATOR . "debug_object_container_{$failuresNb}.txt", $varOutput); + ++$failuresNb; + $failures[] = $error; + } + ++$testCasesTotal; +} ob_end_clean(); echo "Executed tests\n"; diff --git a/Zend/tests/offsets/string_container_offset_behaviour.phpt b/Zend/tests/offsets/string_container_offset_behaviour.phpt index 55427957f7a..dc4c95e5d9e 100644 --- a/Zend/tests/offsets/string_container_offset_behaviour.phpt +++ b/Zend/tests/offsets/string_container_offset_behaviour.phpt @@ -661,6 +661,40 @@ foreach ($offsets as $dimension) { } ++$testCasesTotal; } +/* Using offsets as references */ +foreach ($offsets as $offset) { + $dimension = &$offset; + $container = ''; + $error = '""[&' . zend_test_var_export($offset) . '] has different outputs' . "\n"; + + include $var_dim_filename; + $varOutput = ob_get_contents(); + ob_clean(); + $varOutput = str_replace( + [$var_dim_filename], + ['%s'], + $varOutput + ); + + if ( + !preg_match($EXPECTED_OUTPUT_VALID_OFFSETS_REGEX, $varOutput) + && !preg_match($EXPECTED_OUTPUT_VALID_OFFSETS_OUT_OF_RANGE_REGEX, $varOutput) + && !preg_match($EXPECTED_OUTPUT_STRING_CAST_OFFSETS_REGEX, $varOutput) + && !preg_match($EXPECTED_OUTPUT_STRING_CAST_OFFSETS_TO_0_REGEX, $varOutput) + && !preg_match($EXPECTED_OUTPUT_STRING_CAST_OFFSETS_OUT_OF_RANGE_REGEX, $varOutput) + && !preg_match($EXPECTF_OUTPUT_FLOAT_OFFSETS_OUT_OF_RANGE_REGEX, $varOutput) + && !preg_match($EXPECTED_OUTPUT_FLOAT_INF_NAN_OFFSETS_REGEX, $varOutput) + && !preg_match($EXPECTED_OUTPUT_INVALID_OFFSETS_REGEX, $varOutput) + && $varOutput !== EXPECTED_OUTPUT_INVALID_OFFSETS_AS_STRINGS + && !preg_match($EXPECTED_OUTPUT_INVALID_OFFSETS_AS_LEADING_NUMERIC_STRINGS_REGEX, $varOutput) + && !preg_match($EXPECTED_OUTPUT_INVALID_OFFSETS_AS_LEADING_NUMERIC_STRINGS_TO_0_REGEX, $varOutput) + ) { + file_put_contents(__DIR__ . DIRECTORY_SEPARATOR . "debug_string_container_{$failuresNb}.txt", $varOutput); + ++$failuresNb; + $failures[] = $error; + } + ++$testCasesTotal; +} ob_end_clean(); echo "Executed tests\n";