Skip to content

Commit 05e9477

Browse files
committed
Improve test for internal handlers
1 parent b1c9535 commit 05e9477

File tree

3 files changed

+105
-25
lines changed

3 files changed

+105
-25
lines changed

Zend/tests/offsets/internal_handlers.phpt

Lines changed: 91 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,11 @@ $o = new DimensionHandlersNoArrayAccess();
1717
$o['foo'] = true;
1818
exportObject($o);
1919

20+
echo 'read-write op', PHP_EOL;
21+
$o = new DimensionHandlersNoArrayAccess();
22+
$o['foo'] += 10;
23+
exportObject($o);
24+
2025
echo 'isset op', PHP_EOL;
2126
$o = new DimensionHandlersNoArrayAccess();
2227
$r = isset($o['foo']);
@@ -37,6 +42,11 @@ $o = new DimensionHandlersNoArrayAccess();
3742
$o[] = true;
3843
exportObject($o);
3944

45+
echo 'unset op', PHP_EOL;
46+
$o = new DimensionHandlersNoArrayAccess();
47+
unset($o['foo']);
48+
exportObject($o);
49+
4050
echo 'nested read', PHP_EOL;
4151
$o = new DimensionHandlersNoArrayAccess();
4252
$r = $o['foo']['bar'];
@@ -45,30 +55,51 @@ exportObject($o);
4555
// Illegal
4656
//echo 'nested read: appending then read', PHP_EOL;
4757
//$o = new DimensionHandlersNoArrayAccess();
48-
//$r = $o[]['bar'];
49-
//var_dump($o);
58+
//try {
59+
// $r = $o[]['bar'];
60+
//} catch (\Throwable $e) {
61+
// echo $e::class, ': ', $e->getMessage(), PHP_EOL;
62+
//}
5063

5164
echo 'nested write', PHP_EOL;
65+
$o = new DimensionHandlersNoArrayAccess();
5266
try {
53-
$o = new DimensionHandlersNoArrayAccess();
5467
$o['foo']['bar'] = true;
5568
} catch (\Throwable $e) {
5669
echo $e::class, ': ', $e->getMessage(), PHP_EOL;
5770
}
5871
exportObject($o);
5972

6073
echo 'nested write: appending then write', PHP_EOL;
74+
$o = new DimensionHandlersNoArrayAccess();
6175
try {
62-
$o = new DimensionHandlersNoArrayAccess();
6376
$o[]['bar'] = true;
6477
} catch (\Throwable $e) {
6578
echo $e::class, ': ', $e->getMessage(), PHP_EOL;
6679
}
6780
exportObject($o);
6881

82+
echo 'nested read-write', PHP_EOL;
83+
$o = new DimensionHandlersNoArrayAccess();
84+
try {
85+
$o['foo']['bar'] += 10;
86+
} catch (\Throwable $e) {
87+
echo $e::class, ': ', $e->getMessage(), PHP_EOL;
88+
}
89+
exportObject($o);
90+
91+
echo 'nested read-write: appending then write', PHP_EOL;
92+
$o = new DimensionHandlersNoArrayAccess();
93+
try {
94+
$o[]['bar'] += 10;
95+
} catch (\Throwable $e) {
96+
echo $e::class, ': ', $e->getMessage(), PHP_EOL;
97+
}
98+
exportObject($o);
99+
69100
echo 'nested isset', PHP_EOL;
101+
$o = new DimensionHandlersNoArrayAccess();
70102
try {
71-
$o = new DimensionHandlersNoArrayAccess();
72103
$r = isset($o['foo']['bar']);
73104
} catch (\Throwable $e) {
74105
echo $e::class, ': ', $e->getMessage(), PHP_EOL;
@@ -80,14 +111,14 @@ exportObject($o);
80111
//try {
81112
// $o = new DimensionHandlersNoArrayAccess();
82113
// $r = isset($o[]['bar']);
83-
// var_dump($o);
84114
//} catch (\Throwable $e) {
85115
// echo $e::class, ': ', $e->getMessage(), PHP_EOL;
86116
//}
117+
//exportObject($o);
87118

88119
echo 'nested empty', PHP_EOL;
120+
$o = new DimensionHandlersNoArrayAccess();
89121
try {
90-
$o = new DimensionHandlersNoArrayAccess();
91122
$r = empty($o['foo']['bar']);
92123
} catch (\Throwable $e) {
93124
echo $e::class, ': ', $e->getMessage(), PHP_EOL;
@@ -99,14 +130,14 @@ exportObject($o);
99130
//try {
100131
// $o = new DimensionHandlersNoArrayAccess();
101132
// $r = empty($o[]['bar']);
102-
// var_dump($o);
103133
//} catch (\Throwable $e) {
104134
// echo $e::class, ': ', $e->getMessage(), PHP_EOL;
105135
//}
136+
//exportObject($o);
106137

107138
echo 'nested null coalescing', PHP_EOL;
139+
$o = new DimensionHandlersNoArrayAccess();
108140
try {
109-
$o = new DimensionHandlersNoArrayAccess();
110141
$r = $o['foo']['bar'] ?? 'default';
111142
} catch (\Throwable $e) {
112143
echo $e::class, ': ', $e->getMessage(), PHP_EOL;
@@ -118,70 +149,108 @@ exportObject($o);
118149
//try {
119150
// $o = new DimensionHandlersNoArrayAccess();
120151
// $r = $o[]['bar'] ?? 'default';
121-
// var_dump($o);
122152
//} catch (\Throwable $e) {
123153
// echo $e::class, ': ', $e->getMessage(), PHP_EOL;
124154
//}
155+
//exportObject($o);
125156

126157
echo 'nested appending', PHP_EOL;
158+
$o = new DimensionHandlersNoArrayAccess();
127159
try {
128-
$o = new DimensionHandlersNoArrayAccess();
129160
$o['foo'][] = true;
130161
} catch (\Throwable $e) {
131162
echo $e::class, ': ', $e->getMessage(), PHP_EOL;
132163
}
133164
exportObject($o);
134165

135166
echo 'nested appending: appending then append', PHP_EOL;
167+
$o = new DimensionHandlersNoArrayAccess();
136168
try {
137-
$o = new DimensionHandlersNoArrayAccess();
138169
$o[][] = true;
139170
} catch (\Throwable $e) {
140171
echo $e::class, ': ', $e->getMessage(), PHP_EOL;
141172
}
142173
exportObject($o);
143174

175+
echo 'nested unset', PHP_EOL;
176+
$o = new DimensionHandlersNoArrayAccess();
177+
try {
178+
unset($o['foo']['bar']);
179+
} catch (\Throwable $e) {
180+
echo $e::class, ': ', $e->getMessage(), PHP_EOL;
181+
}
182+
exportObject($o);
183+
184+
// Illegal
185+
//echo 'nested unset: appending then read', PHP_EOL;
186+
//try {
187+
// $o = new DimensionHandlersNoArrayAccess();
188+
// unset($o[]['bar']);
189+
//} catch (\Throwable $e) {
190+
// echo $e::class, ': ', $e->getMessage(), PHP_EOL;
191+
//}
192+
//exportObject($o);
193+
144194
?>
145195
--EXPECTF--
146196
read op
147-
DimensionHandlersNoArrayAccess, read: true, write: false, has: false, unset: false, readType: 0, hasOffset: true, checkEmpty: uninitialized, offset: 'foo'
197+
DimensionHandlersNoArrayAccess, read: true, write: false, has: false, unset: false, readType: BP_VAR_R, hasOffset: true, checkEmpty: uninitialized, offset: 'foo'
148198
write op
149199
DimensionHandlersNoArrayAccess, read: false, write: true, has: false, unset: false, readType: uninitialized, hasOffset: true, checkEmpty: uninitialized, offset: 'foo'
200+
read-write op
201+
DimensionHandlersNoArrayAccess, read: true, write: true, has: false, unset: false, readType: BP_VAR_R, hasOffset: true, checkEmpty: uninitialized, offset: 'foo'
150202
isset op
151203
DimensionHandlersNoArrayAccess, read: false, write: false, has: true, unset: false, readType: uninitialized, hasOffset: true, checkEmpty: 0, offset: 'foo'
152204
empty op
153205
DimensionHandlersNoArrayAccess, read: false, write: false, has: true, unset: false, readType: uninitialized, hasOffset: true, checkEmpty: 1, offset: 'foo'
154206
null coalescing op
155-
DimensionHandlersNoArrayAccess, read: true, write: false, has: false, unset: false, readType: 3, hasOffset: true, checkEmpty: uninitialized, offset: 'foo'
207+
DimensionHandlersNoArrayAccess, read: true, write: false, has: false, unset: false, readType: BP_VAR_IS, hasOffset: true, checkEmpty: uninitialized, offset: 'foo'
156208
appending op
157209
DimensionHandlersNoArrayAccess, read: false, write: true, has: false, unset: false, readType: uninitialized, hasOffset: false, checkEmpty: uninitialized, offset: uninitialized
210+
unset op
211+
DimensionHandlersNoArrayAccess, read: false, write: false, has: false, unset: true, readType: uninitialized, hasOffset: true, checkEmpty: uninitialized, offset: 'foo'
158212
nested read
159213

160214
Warning: Trying to access array offset on true in %s on line %d
161-
DimensionHandlersNoArrayAccess, read: true, write: false, has: false, unset: false, readType: 0, hasOffset: true, checkEmpty: uninitialized, offset: 'foo'
215+
DimensionHandlersNoArrayAccess, read: true, write: false, has: false, unset: false, readType: BP_VAR_R, hasOffset: true, checkEmpty: uninitialized, offset: 'foo'
162216
nested write
163217

164218
Notice: Indirect modification of overloaded element of DimensionHandlersNoArrayAccess has no effect in %s on line %d
165219
Error: Cannot use a scalar value as an array
166-
DimensionHandlersNoArrayAccess, read: true, write: false, has: false, unset: false, readType: 1, hasOffset: true, checkEmpty: uninitialized, offset: 'foo'
220+
DimensionHandlersNoArrayAccess, read: true, write: false, has: false, unset: false, readType: BP_VAR_W, hasOffset: true, checkEmpty: uninitialized, offset: 'foo'
167221
nested write: appending then write
168222

169223
Notice: Indirect modification of overloaded element of DimensionHandlersNoArrayAccess has no effect in %s on line %d
170224
Error: Cannot use a scalar value as an array
171-
DimensionHandlersNoArrayAccess, read: true, write: false, has: false, unset: false, readType: 1, hasOffset: false, checkEmpty: uninitialized, offset: uninitialized
225+
DimensionHandlersNoArrayAccess, read: true, write: false, has: false, unset: false, readType: BP_VAR_W, hasOffset: false, checkEmpty: uninitialized, offset: uninitialized
226+
nested read-write
227+
228+
Notice: Indirect modification of overloaded element of DimensionHandlersNoArrayAccess has no effect in %s on line %d
229+
Error: Cannot use a scalar value as an array
230+
DimensionHandlersNoArrayAccess, read: true, write: false, has: false, unset: false, readType: BP_VAR_RW, hasOffset: true, checkEmpty: uninitialized, offset: 'foo'
231+
nested read-write: appending then write
232+
233+
Notice: Indirect modification of overloaded element of DimensionHandlersNoArrayAccess has no effect in %s on line %d
234+
Error: Cannot use a scalar value as an array
235+
DimensionHandlersNoArrayAccess, read: true, write: false, has: false, unset: false, readType: BP_VAR_RW, hasOffset: false, checkEmpty: uninitialized, offset: uninitialized
172236
nested isset
173-
DimensionHandlersNoArrayAccess, read: true, write: false, has: false, unset: false, readType: 3, hasOffset: true, checkEmpty: uninitialized, offset: 'foo'
237+
DimensionHandlersNoArrayAccess, read: true, write: false, has: false, unset: false, readType: BP_VAR_IS, hasOffset: true, checkEmpty: uninitialized, offset: 'foo'
174238
nested empty
175-
DimensionHandlersNoArrayAccess, read: true, write: false, has: false, unset: false, readType: 3, hasOffset: true, checkEmpty: uninitialized, offset: 'foo'
239+
DimensionHandlersNoArrayAccess, read: true, write: false, has: false, unset: false, readType: BP_VAR_IS, hasOffset: true, checkEmpty: uninitialized, offset: 'foo'
176240
nested null coalescing
177-
DimensionHandlersNoArrayAccess, read: true, write: false, has: false, unset: false, readType: 3, hasOffset: true, checkEmpty: uninitialized, offset: 'foo'
241+
DimensionHandlersNoArrayAccess, read: true, write: false, has: false, unset: false, readType: BP_VAR_IS, hasOffset: true, checkEmpty: uninitialized, offset: 'foo'
178242
nested appending
179243

180244
Notice: Indirect modification of overloaded element of DimensionHandlersNoArrayAccess has no effect in %s on line %d
181245
Error: Cannot use a scalar value as an array
182-
DimensionHandlersNoArrayAccess, read: true, write: false, has: false, unset: false, readType: 1, hasOffset: true, checkEmpty: uninitialized, offset: 'foo'
246+
DimensionHandlersNoArrayAccess, read: true, write: false, has: false, unset: false, readType: BP_VAR_W, hasOffset: true, checkEmpty: uninitialized, offset: 'foo'
183247
nested appending: appending then append
184248

185249
Notice: Indirect modification of overloaded element of DimensionHandlersNoArrayAccess has no effect in %s on line %d
186250
Error: Cannot use a scalar value as an array
187-
DimensionHandlersNoArrayAccess, read: true, write: false, has: false, unset: false, readType: 1, hasOffset: false, checkEmpty: uninitialized, offset: uninitialized
251+
DimensionHandlersNoArrayAccess, read: true, write: false, has: false, unset: false, readType: BP_VAR_W, hasOffset: false, checkEmpty: uninitialized, offset: uninitialized
252+
nested unset
253+
254+
Notice: Indirect modification of overloaded element of DimensionHandlersNoArrayAccess has no effect in %s on line %d
255+
Error: Cannot unset offset in a non-array variable
256+
DimensionHandlersNoArrayAccess, read: true, write: false, has: false, unset: false, readType: BP_VAR_UNSET, hasOffset: true, checkEmpty: uninitialized, offset: 'foo'

Zend/tests/offsets/internal_handlers_extended.phpt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,5 +42,5 @@ exportObject($do);
4242

4343
?>
4444
--EXPECT--
45-
NoImplement, read: true, write: false, has: false, unset: false, readType: 0, hasOffset: true, checkEmpty: uninitialized, offset: 'foo'
46-
DoImplement, read: true, write: false, has: false, unset: false, readType: 0, hasOffset: true, checkEmpty: uninitialized, offset: 'foo'
45+
NoImplement, read: true, write: false, has: false, unset: false, readType: BP_VAR_R, hasOffset: true, checkEmpty: uninitialized, offset: 'foo'
46+
DoImplement, read: true, write: false, has: false, unset: false, readType: BP_VAR_R, hasOffset: true, checkEmpty: uninitialized, offset: 'foo'

Zend/tests/offsets/test_offset_helpers.inc

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,18 @@ function exportProp(object $o, string $p) {
4545

4646
echo ', ', $p, ': ';
4747
if ($rp->isInitialized($o)) {
48-
echo zend_test_var_export($o->$p);
48+
if ($p === 'readType') {
49+
echo match($o->$p) {
50+
0 => 'BP_VAR_R',
51+
1 => 'BP_VAR_W',
52+
2 => 'BP_VAR_RW',
53+
3 => 'BP_VAR_IS',
54+
4 => 'BP_VAR_FUNC_ARG',
55+
5 => 'BP_VAR_UNSET',
56+
};
57+
} else {
58+
echo zend_test_var_export($o->$p);
59+
}
4960
} else {
5061
echo 'uninitialized';
5162
}

0 commit comments

Comments
 (0)