Skip to content

Commit 0977b0a

Browse files
committed
Fix string container behaviour test
1 parent c800cc4 commit 0977b0a

File tree

1 file changed

+107
-7
lines changed

1 file changed

+107
-7
lines changed

Zend/tests/offsets/string_container_offset_behaviour.phpt

Lines changed: 107 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
11
--TEST--
22
String containers behaviour with offsets
3-
--XFAIL--
4-
INF offset on string doesn't behave like other floats for isset()/empty()
53
--FILE--
64
<?php
75

@@ -30,6 +28,33 @@ OUTPUT;
3028

3129
$EXPECTED_OUTPUT_VALID_OFFSETS_REGEX = '/^' . expectf_to_regex(EXPECTED_OUTPUT_VALID_OFFSETS) . '$/s';
3230

31+
const EXPECTED_OUTPUT_VALID_OFFSETS_OUT_OF_RANGE = <<<OUTPUT
32+
Read before write:
33+
34+
Warning: Uninitialized string offset %i in %s on line 8
35+
string(0) ""
36+
Write:
37+
38+
Warning: Illegal string offset %i in %s on line 15
39+
Read:
40+
41+
Warning: Uninitialized string offset %i in %s on line 22
42+
string(0) ""
43+
Read-Write:
44+
Cannot use assign-op operators with string offsets
45+
isset():
46+
bool(false)
47+
empty():
48+
bool(true)
49+
Coalesce():
50+
string(7) "default"
51+
unset():
52+
Cannot unset string offsets
53+
54+
OUTPUT;
55+
56+
$EXPECTED_OUTPUT_VALID_OFFSETS_OUT_OF_RANGE_REGEX = '/^' . expectf_to_regex(EXPECTED_OUTPUT_VALID_OFFSETS_OUT_OF_RANGE) . '$/s';
57+
3358
const EXPECTED_OUTPUT_STRING_CAST_OFFSETS = <<<OUTPUT
3459
Read before write:
3560
@@ -61,6 +86,41 @@ OUTPUT;
6186

6287
$EXPECTED_OUTPUT_STRING_CAST_OFFSETS_REGEX = '/^' . expectf_to_regex(EXPECTED_OUTPUT_STRING_CAST_OFFSETS) . '$/s';
6388

89+
const EXPECTED_OUTPUT_STRING_CAST_OFFSETS_OUT_OF_RANGE = <<<OUTPUT
90+
Read before write:
91+
92+
Warning: String offset cast occurred in %s on line 8
93+
94+
Warning: Uninitialized string offset %i in %s on line 8
95+
string(0) ""
96+
Write:
97+
98+
Warning: String offset cast occurred in %s on line 15
99+
100+
Warning: Illegal string offset %i in %s on line 15
101+
Read:
102+
103+
Warning: String offset cast occurred in %s on line 22
104+
105+
Warning: Uninitialized string offset %i in %s on line 22
106+
string(0) ""
107+
Read-Write:
108+
109+
Warning: String offset cast occurred in %s on line 29
110+
Cannot use assign-op operators with string offsets
111+
isset():
112+
bool(false)
113+
empty():
114+
bool(true)
115+
Coalesce():
116+
string(7) "default"
117+
unset():
118+
Cannot unset string offsets
119+
120+
OUTPUT;
121+
122+
$EXPECTED_OUTPUT_STRING_CAST_OFFSETS_OUT_OF_RANGE_REGEX = '/^' . expectf_to_regex(EXPECTED_OUTPUT_STRING_CAST_OFFSETS_OUT_OF_RANGE) . '$/s';
123+
64124
const EXPECTF_OUTPUT_FLOAT_OFFSETS = <<<OUTPUT
65125
Read before write:
66126
@@ -88,16 +148,53 @@ empty():
88148
Deprecated: Implicit conversion from float %F to int loses precision in %s on line 42
89149
bool(false)
90150
Coalesce():
91-
92-
Deprecated: Implicit conversion from float %F to int loses precision in %s on line 48
93-
string(7) "vappend"
151+
string(1) "v"
94152
unset():
95153
Cannot unset string offsets
96154
97155
OUTPUT;
98156

99157
$EXPECTED_OUTPUT_FLOAT_OFFSETS_REGEX = '/^' . expectf_to_regex(EXPECTF_OUTPUT_FLOAT_OFFSETS) . '$/s';
100158

159+
const EXPECTF_OUTPUT_FLOAT_OFFSETS_OUT_OF_RANGE = <<<OUTPUT
160+
Read before write:
161+
162+
Warning: String offset cast occurred in %s on line 8
163+
164+
Warning: Uninitialized string offset %i in %s on line 8
165+
string(0) ""
166+
Write:
167+
168+
Warning: String offset cast occurred in %s on line 15
169+
170+
Warning: Illegal string offset %i in %s on line 15
171+
Read:
172+
173+
Warning: String offset cast occurred in %s on line 22
174+
175+
Warning: Uninitialized string offset %i in %s on line 22
176+
string(0) ""
177+
Read-Write:
178+
179+
Warning: String offset cast occurred in %s on line 29
180+
Cannot use assign-op operators with string offsets
181+
isset():
182+
183+
Deprecated: Implicit conversion from float %F to int loses precision in %s on line 36
184+
bool(false)
185+
empty():
186+
187+
Deprecated: Implicit conversion from float %F to int loses precision in %s on line 42
188+
bool(true)
189+
Coalesce():
190+
string(7) "default"
191+
unset():
192+
Cannot unset string offsets
193+
194+
OUTPUT;
195+
196+
$EXPECTF_OUTPUT_FLOAT_OFFSETS_OUT_OF_RANGE_REGEX = '/^' . expectf_to_regex(EXPECTF_OUTPUT_FLOAT_OFFSETS_OUT_OF_RANGE) . '$/s';
197+
101198
const EXPECTED_OUTPUT_INVALID_OFFSETS = <<<OUTPUT
102199
Read before write:
103200
Cannot access offset of type %s on string
@@ -189,13 +286,16 @@ foreach ($offsets as $dimension) {
189286

190287
if (
191288
!preg_match($EXPECTED_OUTPUT_VALID_OFFSETS_REGEX, $varOutput)
289+
&& !preg_match($EXPECTED_OUTPUT_VALID_OFFSETS_OUT_OF_RANGE_REGEX, $varOutput)
192290
&& !preg_match($EXPECTED_OUTPUT_STRING_CAST_OFFSETS_REGEX, $varOutput)
193-
&& !preg_match($EXPECTED_OUTPUT_INVALID_OFFSETS_REGEX, $varOutput)
291+
&& !preg_match($EXPECTED_OUTPUT_STRING_CAST_OFFSETS_OUT_OF_RANGE_REGEX, $varOutput)
194292
&& !preg_match($EXPECTED_OUTPUT_FLOAT_OFFSETS_REGEX, $varOutput)
293+
&& !preg_match($EXPECTF_OUTPUT_FLOAT_OFFSETS_OUT_OF_RANGE_REGEX, $varOutput)
294+
&& !preg_match($EXPECTED_OUTPUT_INVALID_OFFSETS_REGEX, $varOutput)
195295
&& $varOutput !== EXPECTED_OUTPUT_INVALID_OFFSETS_AS_STRINGS
196296
&& !preg_match($EXPECTED_OUTPUT_INVALID_OFFSETS_AS_LEADING_NUMERIC_STRINGS_REGEX, $varOutput)
197297
) {
198-
//file_put_contents(__DIR__ . DIRECTORY_SEPARATOR . "debug_string_container_{$failuresNb}.txt", $varOutput);
298+
file_put_contents(__DIR__ . DIRECTORY_SEPARATOR . "debug_string_container_{$failuresNb}.txt", $varOutput);
199299
++$failuresNb;
200300
$failures[] = $error;
201301
}

0 commit comments

Comments
 (0)