1--TEST-- 2ArrayAccess containers behaviour with offsets 3--FILE-- 4<?php 5 6require_once __DIR__ . DIRECTORY_SEPARATOR . 'test_offset_helpers.inc'; 7 8const EXPECTED_OUTPUT = <<<OUTPUT 9Read before write: 10string(12) "CLASS_NAME::offsetGet" 11VAR_DUMP_OF_OFFSET 12int(5) 13Write: 14string(12) "CLASS_NAME::offsetSet" 15VAR_DUMP_OF_OFFSET 16int(5) 17Read: 18string(12) "CLASS_NAME::offsetGet" 19VAR_DUMP_OF_OFFSET 20int(5) 21Read-Write: 22string(12) "CLASS_NAME::offsetGet" 23VAR_DUMP_OF_OFFSET 24string(12) "CLASS_NAME::offsetSet" 25VAR_DUMP_OF_OFFSET 26int(25) 27isset(): 28string(15) "CLASS_NAME::offsetExists" 29VAR_DUMP_OF_OFFSET 30bool(true) 31empty(): 32string(15) "CLASS_NAME::offsetExists" 33VAR_DUMP_OF_OFFSET 34string(12) "CLASS_NAME::offsetGet" 35VAR_DUMP_OF_OFFSET 36bool(false) 37null coalesce: 38string(15) "CLASS_NAME::offsetExists" 39VAR_DUMP_OF_OFFSET 40string(12) "CLASS_NAME::offsetGet" 41VAR_DUMP_OF_OFFSET 42int(5) 43unset(): 44string(14) "CLASS_NAME::offsetUnset" 45VAR_DUMP_OF_OFFSET 46Nested read: 47string(12) "CLASS_NAME::offsetGet" 48VAR_DUMP_OF_OFFSET 49 50Warning: Trying to access array offset on int in %s on line 62 51NULL 52Nested write: 53string(12) "CLASS_NAME::offsetGet" 54VAR_DUMP_OF_OFFSET 55 56Notice: Indirect modification of overloaded element of CLASS_NAME has no effect in %s on line 69 57Cannot use a scalar value as an array 58Nested Read-Write: 59string(12) "CLASS_NAME::offsetGet" 60VAR_DUMP_OF_OFFSET 61 62Notice: Indirect modification of overloaded element of CLASS_NAME has no effect in %s on line 76 63Cannot use a scalar value as an array 64Nested isset(): 65string(15) "CLASS_NAME::offsetExists" 66VAR_DUMP_OF_OFFSET 67string(12) "CLASS_NAME::offsetGet" 68VAR_DUMP_OF_OFFSET 69bool(false) 70Nested empty(): 71string(15) "CLASS_NAME::offsetExists" 72VAR_DUMP_OF_OFFSET 73string(12) "CLASS_NAME::offsetGet" 74VAR_DUMP_OF_OFFSET 75bool(true) 76Nested null coalesce: 77string(15) "CLASS_NAME::offsetExists" 78VAR_DUMP_OF_OFFSET 79string(12) "CLASS_NAME::offsetGet" 80VAR_DUMP_OF_OFFSET 81string(7) "default" 82Nested unset(): 83string(12) "CLASS_NAME::offsetGet" 84VAR_DUMP_OF_OFFSET 85 86Notice: Indirect modification of overloaded element of CLASS_NAME has no effect in %s on line 102 87Cannot unset offset in a non-array variable 88 89OUTPUT; 90 91ob_start(); 92foreach (['A', 'B'] as $class) { 93 foreach ($offsets as $dimension) { 94 $container = new $class(); 95 $error = "(new $class())[" . zend_test_var_export($dimension) . '] has different outputs' . "\n"; 96 ob_start(); 97 var_dump($dimension); 98 $var_dump_output = ob_get_clean(); 99 100 include $var_dim_filename; 101 $varOutput = ob_get_contents(); 102 ob_clean(); 103 $varOutput = str_replace( 104 [$var_dim_filename], 105 ['%s'], 106 $varOutput 107 ); 108 109 $expected_output = str_replace( 110 ["VAR_DUMP_OF_OFFSET\n", "CLASS_NAME"], 111 [$var_dump_output, $class], 112 EXPECTED_OUTPUT 113 ); 114 115 if ($varOutput !== $expected_output) { 116 file_put_contents(__DIR__ . DIRECTORY_SEPARATOR . "debug_ArrayAccess_container_{$failuresNb}.txt", $varOutput); 117 ++$failuresNb; 118 $failures[] = $error; 119 } 120 ++$testCasesTotal; 121 } 122} 123ob_end_clean(); 124 125echo "Executed tests\n"; 126if ($failures !== []) { 127 echo "Failures:\n" . implode($failures); 128} 129 130?> 131--EXPECT-- 132Executed tests 133