Skip to content

Commit 0ebbd7d

Browse files
committed
Add container test for ArrayAccess
1 parent ff2a92a commit 0ebbd7d

4 files changed

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

Zend/tests/offsets/appending_containers_in_fetch.phpt

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -72,10 +72,7 @@ string(12) "A::offsetGet"
7272
NULL
7373

7474
Notice: Indirect modification of overloaded element of A has no effect in %s on line %d
75-
76-
Warning: Only the first byte will be assigned to the string offset in %s on line %d
77-
object(A)#3 (0) {
78-
}
75+
Error: Cannot use a scalar value as an array
7976
new B() container:
8077

8178
Notice: Indirect modification of overloaded element of B has no effect in %s on line %d

Zend/tests/offsets/object_container_offset_behaviour.phpt

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -54,8 +54,7 @@ foreach ($offsets as $dimension) {
5454
);
5555

5656
if ($varOutput !== EXPECTED_OUTPUT) {
57-
file_put_contents(__DIR__ . DIRECTORY_SEPARATOR . "debug_object_container.txt", $varOutput);
58-
//file_put_contents(__DIR__ . DIRECTORY_SEPARATOR . "debug_object_container_{$failuresNb}.txt", $varOutput);
57+
file_put_contents(__DIR__ . DIRECTORY_SEPARATOR . "debug_object_container_{$failuresNb}.txt", $varOutput);
5958
++$failuresNb;
6059
$failures[] = $error;
6160
}

Zend/tests/offsets/test_offset_helpers.inc

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,7 @@ class A implements ArrayAccess {
100100
public function offsetGet($offset): mixed {
101101
var_dump(__METHOD__);
102102
var_dump($offset);
103-
return "dummy";
103+
return 5;
104104
}
105105
public function offsetUnset($offset): void {
106106
var_dump(__METHOD__);
@@ -109,7 +109,7 @@ class A implements ArrayAccess {
109109
public function offsetExists($offset): bool {
110110
var_dump(__METHOD__);
111111
var_dump($offset);
112-
return false;
112+
return true;
113113
}
114114
}
115115

@@ -122,7 +122,7 @@ class B extends ArrayObject {
122122
public function offsetGet($offset): mixed {
123123
var_dump(__METHOD__);
124124
var_dump($offset);
125-
return "dummy";
125+
return 5;
126126
}
127127
public function offsetUnset($offset): void {
128128
var_dump(__METHOD__);
@@ -131,7 +131,7 @@ class B extends ArrayObject {
131131
public function offsetExists($offset): bool {
132132
var_dump(__METHOD__);
133133
var_dump($offset);
134-
return false;
134+
return true;
135135
}
136136
public function append(mixed $value) : void{
137137
var_dump(__METHOD__);

0 commit comments

Comments
 (0)