Skip to content

Commit 7a7038b

Browse files
Add tests
1 parent ffc1a15 commit 7a7038b

File tree

5 files changed

+205
-1
lines changed

5 files changed

+205
-1
lines changed

tests/PHPStan/Analyser/NodeScopeResolverTest.php

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,9 @@ private static function findTestFiles(): iterable
6262
} else {
6363
yield __DIR__ . '/data/str-split-php74.php';
6464
}
65-
if (PHP_VERSION_ID >= 80000) {
65+
if (PHP_VERSION_ID >= 80200) {
66+
yield __DIR__ . '/data/mb-str-split-php82.php';
67+
} elseif (PHP_VERSION_ID >= 80000) {
6668
yield __DIR__ . '/data/mb-str-split-php80.php';
6769
} elseif (PHP_VERSION_ID >= 74000) {
6870
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)