Skip to content

Commit 4cb2211

Browse files
Add tests
1 parent ffc1a15 commit 4cb2211

File tree

5 files changed

+205
-7
lines changed

5 files changed

+205
-7
lines changed

tests/PHPStan/Analyser/NodeScopeResolverTest.php

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -29,12 +29,6 @@ private static function findTestFiles(): iterable
2929
yield $testFile;
3030
}
3131

32-
if (PHP_VERSION_ID >= 80200) {
33-
yield __DIR__ . '/data/str-split-php82.php';
34-
} else {
35-
yield __DIR__ . '/data/str-split.php';
36-
}
37-
3832
if (PHP_VERSION_ID < 80200 && PHP_VERSION_ID >= 80100) {
3933
yield __DIR__ . '/data/enum-reflection-php81.php';
4034
}
@@ -62,7 +56,9 @@ private static function findTestFiles(): iterable
6256
} else {
6357
yield __DIR__ . '/data/str-split-php74.php';
6458
}
65-
if (PHP_VERSION_ID >= 80000) {
59+
if (PHP_VERSION_ID >= 80200) {
60+
yield __DIR__ . '/data/mb-str-split-php82.php';
61+
} elseif (PHP_VERSION_ID >= 80000) {
6662
yield __DIR__ . '/data/mb-str-split-php80.php';
6763
} elseif (PHP_VERSION_ID >= 74000) {
6864
yield __DIR__ . '/data/mb-str-split-php74.php';

tests/PHPStan/Analyser/data/mb-str-split-php80.php

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -91,4 +91,31 @@ public function legacyTest(): void
9191
$mbStrSplitConstantStringWithVariableStringAndVariableSplitLengthAndVariableEncoding = mb_str_split(doFoo() ? 'abcdef' : 'ghijkl', doFoo() ? 1 : 2, doFoo());
9292
assertType('list<string>', $mbStrSplitConstantStringWithVariableStringAndVariableSplitLengthAndVariableEncoding);
9393
}
94+
95+
/**
96+
* @param non-empty-string $nonEmptyString
97+
* @param non-falsy-string $nonFalsyString
98+
* @param lowercase-string $lowercaseString
99+
* @param uppercase-string $uppercaseString
100+
*/
101+
function doFoo(
102+
string $string,
103+
string $nonEmptyString,
104+
string $nonFalsyString,
105+
string $lowercaseString,
106+
string $uppercaseString,
107+
int $integer,
108+
):void {
109+
assertType('list<string>', mb_str_split($string));
110+
assertType('non-empty-list<non-empty-string>', mb_str_split($nonEmptyString));
111+
assertType('non-empty-list<non-empty-string>', mb_str_split($nonFalsyString));
112+
assertType('list<lowercase-string>', mb_str_split($lowercaseString));
113+
assertType('list<uppercase-string>', mb_str_split($uppercaseString));
114+
115+
assertType('list<string>', mb_str_split($string, $integer));
116+
assertType('non-empty-list<non-empty-string>', mb_str_split($nonEmptyString, $integer));
117+
assertType('non-empty-list<non-empty-string>', mb_str_split($nonFalsyString, $integer));
118+
assertType('list<lowercase-string>', mb_str_split($lowercaseString, $integer));
119+
assertType('list<uppercase-string>', mb_str_split($uppercaseString, $integer));
120+
}
94121
}
Lines changed: 121 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,121 @@
1+
<?php
2+
3+
namespace MbStrSplitPHP82;
4+
5+
use function PHPStan\Testing\assertType;
6+
7+
class MbStrSplit {
8+
public function legacyTest(): void
9+
{
10+
/** @var string $string */
11+
$string = doFoo();
12+
13+
$mbStrSplitConstantStringWithoutDefinedParameters = mb_str_split();
14+
assertType('list<string>', $mbStrSplitConstantStringWithoutDefinedParameters);
15+
16+
$mbStrSplitConstantStringWithoutDefinedSplitLength = mb_str_split('abcdef');
17+
assertType('array{\'a\', \'b\', \'c\', \'d\', \'e\', \'f\'}', $mbStrSplitConstantStringWithoutDefinedSplitLength);
18+
19+
$mbStrSplitStringWithoutDefinedSplitLength = mb_str_split($string);
20+
assertType('list<string>', $mbStrSplitStringWithoutDefinedSplitLength);
21+
22+
$mbStrSplitConstantStringWithOneSplitLength = mb_str_split('abcdef', 1);
23+
assertType('array{\'a\', \'b\', \'c\', \'d\', \'e\', \'f\'}', $mbStrSplitConstantStringWithOneSplitLength);
24+
25+
$mbStrSplitConstantStringWithGreaterSplitLengthThanStringLength = mb_str_split('abcdef', 999);
26+
assertType('array{\'abcdef\'}', $mbStrSplitConstantStringWithGreaterSplitLengthThanStringLength);
27+
28+
$mbStrSplitConstantStringWithFailureSplitLength = mb_str_split('abcdef', 0);
29+
assertType('false', $mbStrSplitConstantStringWithFailureSplitLength);
30+
31+
$mbStrSplitConstantStringWithInvalidSplitLengthType = mb_str_split('abcdef', []);
32+
assertType('list<string>', $mbStrSplitConstantStringWithInvalidSplitLengthType);
33+
34+
$mbStrSplitConstantStringWithVariableStringAndConstantSplitLength = mb_str_split(doFoo() ? 'abcdef' : 'ghijkl', 1);
35+
assertType("array{'a', 'b', 'c', 'd', 'e', 'f'}|array{'g', 'h', 'i', 'j', 'k', 'l'}", $mbStrSplitConstantStringWithVariableStringAndConstantSplitLength);
36+
37+
$mbStrSplitConstantStringWithVariableStringAndVariableSplitLength = mb_str_split(doFoo() ? 'abcdef' : 'ghijkl', doFoo() ? 1 : 2);
38+
assertType('list<string>', $mbStrSplitConstantStringWithVariableStringAndVariableSplitLength);
39+
40+
$mbStrSplitConstantStringWithOneSplitLengthAndValidEncoding = mb_str_split('abcdef', 1, 'UTF-8');
41+
assertType("array{'a', 'b', 'c', 'd', 'e', 'f'}", $mbStrSplitConstantStringWithOneSplitLengthAndValidEncoding);
42+
43+
$mbStrSplitConstantStringWithOneSplitLengthAndInvalidEncoding = mb_str_split('abcdef', 1, 'FAKE');
44+
assertType('false', $mbStrSplitConstantStringWithOneSplitLengthAndInvalidEncoding);
45+
46+
$mbStrSplitConstantStringWithOneSplitLengthAndVariableEncoding = mb_str_split('abcdef', 1, doFoo());
47+
assertType('list<string>', $mbStrSplitConstantStringWithOneSplitLengthAndVariableEncoding);
48+
49+
$mbStrSplitConstantStringWithGreaterSplitLengthThanStringLengthAndValidEncoding = mb_str_split('abcdef', 999, 'UTF-8');
50+
assertType("array{'abcdef'}", $mbStrSplitConstantStringWithGreaterSplitLengthThanStringLengthAndValidEncoding);
51+
52+
$mbStrSplitConstantStringWithGreaterSplitLengthThanStringLengthAndInvalidEncoding = mb_str_split('abcdef', 999, 'FAKE');
53+
assertType('false', $mbStrSplitConstantStringWithGreaterSplitLengthThanStringLengthAndInvalidEncoding);
54+
55+
$mbStrSplitConstantStringWithGreaterSplitLengthThanStringLengthAndVariableEncoding = mb_str_split('abcdef', 999, doFoo());
56+
assertType('list<string>', $mbStrSplitConstantStringWithGreaterSplitLengthThanStringLengthAndVariableEncoding);
57+
58+
$mbStrSplitConstantStringWithFailureSplitLengthAndValidEncoding = mb_str_split('abcdef', 0, 'UTF-8');
59+
assertType('false', $mbStrSplitConstantStringWithFailureSplitLengthAndValidEncoding);
60+
61+
$mbStrSplitConstantStringWithFailureSplitLengthAndInvalidEncoding = mb_str_split('abcdef', 0, 'FAKE');
62+
assertType('false', $mbStrSplitConstantStringWithFailureSplitLengthAndInvalidEncoding);
63+
64+
$mbStrSplitConstantStringWithFailureSplitLengthAndVariableEncoding = mb_str_split('abcdef', 0, doFoo());
65+
assertType('false', $mbStrSplitConstantStringWithFailureSplitLengthAndVariableEncoding);
66+
67+
$mbStrSplitConstantStringWithInvalidSplitLengthTypeAndValidEncoding = mb_str_split('abcdef', [], 'UTF-8');
68+
assertType('list<string>', $mbStrSplitConstantStringWithInvalidSplitLengthTypeAndValidEncoding);
69+
70+
$mbStrSplitConstantStringWithInvalidSplitLengthTypeAndInvalidEncoding = mb_str_split('abcdef', [], 'FAKE');
71+
assertType('false', $mbStrSplitConstantStringWithInvalidSplitLengthTypeAndInvalidEncoding);
72+
73+
$mbStrSplitConstantStringWithInvalidSplitLengthTypeAndVariableEncoding = mb_str_split('abcdef', [], doFoo());
74+
assertType('list<string>', $mbStrSplitConstantStringWithInvalidSplitLengthTypeAndVariableEncoding);
75+
76+
$mbStrSplitConstantStringWithVariableStringAndConstantSplitLengthAndValidEncoding = mb_str_split(doFoo() ? 'abcdef' : 'ghijkl', 1, 'UTF-8');
77+
assertType("array{'a', 'b', 'c', 'd', 'e', 'f'}|array{'g', 'h', 'i', 'j', 'k', 'l'}", $mbStrSplitConstantStringWithVariableStringAndConstantSplitLengthAndValidEncoding);
78+
79+
$mbStrSplitConstantStringWithVariableStringAndConstantSplitLengthAndInvalidEncoding = mb_str_split(doFoo() ? 'abcdef' : 'ghijkl', 1, 'FAKE');
80+
assertType('false', $mbStrSplitConstantStringWithVariableStringAndConstantSplitLengthAndInvalidEncoding);
81+
82+
$mbStrSplitConstantStringWithVariableStringAndConstantSplitLengthAndVariableEncoding = mb_str_split(doFoo() ? 'abcdef' : 'ghijkl', 1, doFoo());
83+
assertType('list<string>', $mbStrSplitConstantStringWithVariableStringAndConstantSplitLengthAndVariableEncoding);
84+
85+
$mbStrSplitConstantStringWithVariableStringAndVariableSplitLengthAndValidEncoding = mb_str_split(doFoo() ? 'abcdef' : 'ghijkl', doFoo() ? 1 : 2, 'UTF-8');
86+
assertType('list<string>', $mbStrSplitConstantStringWithVariableStringAndVariableSplitLengthAndValidEncoding);
87+
88+
$mbStrSplitConstantStringWithVariableStringAndVariableSplitLengthAndInvalidEncoding = mb_str_split(doFoo() ? 'abcdef' : 'ghijkl', doFoo() ? 1 : 2, 'FAKE');
89+
assertType('false', $mbStrSplitConstantStringWithVariableStringAndVariableSplitLengthAndInvalidEncoding);
90+
91+
$mbStrSplitConstantStringWithVariableStringAndVariableSplitLengthAndVariableEncoding = mb_str_split(doFoo() ? 'abcdef' : 'ghijkl', doFoo() ? 1 : 2, doFoo());
92+
assertType('list<string>', $mbStrSplitConstantStringWithVariableStringAndVariableSplitLengthAndVariableEncoding);
93+
}
94+
95+
/**
96+
* @param non-empty-string $nonEmptyString
97+
* @param non-falsy-string $nonFalsyString
98+
* @param lowercase-string $lowercaseString
99+
* @param uppercase-string $uppercaseString
100+
*/
101+
function doFoo(
102+
string $string,
103+
string $nonEmptyString,
104+
string $nonFalsyString,
105+
string $lowercaseString,
106+
string $uppercaseString,
107+
int $integer,
108+
):void {
109+
assertType('list<string>', mb_str_split($string));
110+
assertType('non-empty-list<non-empty-string>', mb_str_split($nonEmptyString));
111+
assertType('non-empty-list<non-empty-string>', mb_str_split($nonFalsyString));
112+
assertType('list<lowercase-string>', mb_str_split($lowercaseString));
113+
assertType('list<uppercase-string>', mb_str_split($uppercaseString));
114+
115+
assertType('list<string>', mb_str_split($string, $integer));
116+
assertType('non-empty-list<non-empty-string>', mb_str_split($nonEmptyString, $integer));
117+
assertType('non-empty-list<non-empty-string>', mb_str_split($nonFalsyString, $integer));
118+
assertType('list<lowercase-string>', mb_str_split($lowercaseString, $integer));
119+
assertType('list<uppercase-string>', mb_str_split($uppercaseString, $integer));
120+
}
121+
}

tests/PHPStan/Analyser/data/str-split-php80.php

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,4 +37,31 @@ public function legacyTest() {
3737
assertType('non-empty-list<string>', $strSplitConstantStringWithVariableStringAndVariableSplitLength);
3838

3939
}
40+
41+
/**
42+
* @param non-empty-string $nonEmptyString
43+
* @param non-falsy-string $nonFalsyString
44+
* @param lowercase-string $lowercaseString
45+
* @param uppercase-string $uppercaseString
46+
*/
47+
function doFoo(
48+
string $string,
49+
string $nonEmptyString,
50+
string $nonFalsyString,
51+
string $lowercaseString,
52+
string $uppercaseString,
53+
int $integer,
54+
):void {
55+
assertType('non-empty-list<string>', str_split($string));
56+
assertType('non-empty-list<non-empty-string>', str_split($nonEmptyString));
57+
assertType('non-empty-list<non-empty-string>', str_split($nonFalsyString));
58+
assertType('non-empty-list<lowercase-string>', str_split($lowercaseString));
59+
assertType('non-empty-list<uppercase-string>', str_split($uppercaseString));
60+
61+
assertType('non-empty-list<string>', str_split($string, $integer));
62+
assertType('non-empty-list<non-empty-string>', str_split($nonEmptyString, $integer));
63+
assertType('non-empty-list<non-empty-string>', str_split($nonFalsyString, $integer));
64+
assertType('non-empty-list<lowercase-string>', str_split($lowercaseString, $integer));
65+
assertType('non-empty-list<uppercase-string>', str_split($uppercaseString, $integer));
66+
}
4067
}

tests/PHPStan/Analyser/data/str-split-php82.php

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,4 +37,31 @@ public function legacyTest() {
3737
assertType('list<string>', $strSplitConstantStringWithVariableStringAndVariableSplitLength);
3838

3939
}
40+
41+
/**
42+
* @param non-empty-string $nonEmptyString
43+
* @param non-falsy-string $nonFalsyString
44+
* @param lowercase-string $lowercaseString
45+
* @param uppercase-string $uppercaseString
46+
*/
47+
function doFoo(
48+
string $string,
49+
string $nonEmptyString,
50+
string $nonFalsyString,
51+
string $lowercaseString,
52+
string $uppercaseString,
53+
int $integer,
54+
):void {
55+
assertType('non-empty-list<string>', str_split($string));
56+
assertType('non-empty-list<non-empty-string>', str_split($nonEmptyString));
57+
assertType('non-empty-list<non-empty-string>', str_split($nonFalsyString));
58+
assertType('non-empty-list<lowercase-string>', str_split($lowercaseString));
59+
assertType('non-empty-list<uppercase-string>', str_split($uppercaseString));
60+
61+
assertType('non-empty-list<string>', str_split($string, $integer));
62+
assertType('non-empty-list<non-empty-string>', str_split($nonEmptyString, $integer));
63+
assertType('non-empty-list<non-empty-string>', str_split($nonFalsyString, $integer));
64+
assertType('non-empty-list<lowercase-string>', str_split($lowercaseString, $integer));
65+
assertType('non-empty-list<uppercase-string>', str_split($uppercaseString, $integer));
66+
}
4067
}

0 commit comments

Comments
 (0)