diff --git a/tests/PHPStan/Analyser/LegacyNodeScopeResolverTest.php b/tests/PHPStan/Analyser/LegacyNodeScopeResolverTest.php index c2f8dbde17..3b3d96f26d 100644 --- a/tests/PHPStan/Analyser/LegacyNodeScopeResolverTest.php +++ b/tests/PHPStan/Analyser/LegacyNodeScopeResolverTest.php @@ -5273,14 +5273,6 @@ public function testArrayFunctions( public function dataFunctions(): array { - $strSplitDefaultReturnType = 'non-empty-list|false'; - if (PHP_VERSION_ID >= 80000) { - $strSplitDefaultReturnType = 'non-empty-list'; - } - if (PHP_VERSION_ID >= 80200) { - $strSplitDefaultReturnType = 'list'; - } - return [ [ 'string', @@ -5470,42 +5462,6 @@ public function dataFunctions(): array '(array{sec: int, usec: int, minuteswest: int, dsttime: int}|float)', '$gettimeofdayBenevolent', ], - [ - $strSplitDefaultReturnType, - '$strSplitConstantStringWithoutDefinedParameters', - ], - [ - 'array{\'a\', \'b\', \'c\', \'d\', \'e\', \'f\'}', - '$strSplitConstantStringWithoutDefinedSplitLength', - ], - [ - PHP_VERSION_ID < 80200 ? 'non-empty-list' : 'list', - '$strSplitStringWithoutDefinedSplitLength', - ], - [ - 'array{\'a\', \'b\', \'c\', \'d\', \'e\', \'f\'}', - '$strSplitConstantStringWithOneSplitLength', - ], - [ - 'array{\'abcdef\'}', - '$strSplitConstantStringWithGreaterSplitLengthThanStringLength', - ], - [ - 'false', - '$strSplitConstantStringWithFailureSplitLength', - ], - [ - $strSplitDefaultReturnType, - '$strSplitConstantStringWithInvalidSplitLengthType', - ], - [ - "array{'a', 'b', 'c', 'd', 'e', 'f'}|array{'g', 'h', 'i', 'j', 'k', 'l'}", - '$strSplitConstantStringWithVariableStringAndConstantSplitLength', - ], - [ - $strSplitDefaultReturnType, - '$strSplitConstantStringWithVariableStringAndVariableSplitLength', - ], // parse_url [ 'array|int|string|false|null', @@ -8956,138 +8912,6 @@ public function testPhp73Functions( ); } - public function dataPhp74Functions(): array - { - return [ - [ - PHP_VERSION_ID < 80000 ? 'list|false' : 'list', - '$mbStrSplitConstantStringWithoutDefinedParameters', - ], - [ - 'array{\'a\', \'b\', \'c\', \'d\', \'e\', \'f\'}', - '$mbStrSplitConstantStringWithoutDefinedSplitLength', - ], - [ - 'list', - '$mbStrSplitStringWithoutDefinedSplitLength', - ], - [ - 'array{\'a\', \'b\', \'c\', \'d\', \'e\', \'f\'}', - '$mbStrSplitConstantStringWithOneSplitLength', - ], - [ - 'array{\'abcdef\'}', - '$mbStrSplitConstantStringWithGreaterSplitLengthThanStringLength', - ], - [ - 'false', - '$mbStrSplitConstantStringWithFailureSplitLength', - ], - [ - PHP_VERSION_ID < 80000 ? 'list|false' : 'list', - '$mbStrSplitConstantStringWithInvalidSplitLengthType', - ], - [ - "array{'a', 'b', 'c', 'd', 'e', 'f'}|array{'g', 'h', 'i', 'j', 'k', 'l'}", - '$mbStrSplitConstantStringWithVariableStringAndConstantSplitLength', - ], - [ - PHP_VERSION_ID < 80000 ? 'list|false' : 'list', - '$mbStrSplitConstantStringWithVariableStringAndVariableSplitLength', - ], - [ - "array{'a', 'b', 'c', 'd', 'e', 'f'}", - '$mbStrSplitConstantStringWithOneSplitLengthAndValidEncoding', - ], - [ - 'false', - '$mbStrSplitConstantStringWithOneSplitLengthAndInvalidEncoding', - ], - [ - PHP_VERSION_ID < 80000 ? 'list|false' : 'list', - '$mbStrSplitConstantStringWithOneSplitLengthAndVariableEncoding', - ], - [ - "array{'abcdef'}", - '$mbStrSplitConstantStringWithGreaterSplitLengthThanStringLengthAndValidEncoding', - ], - [ - 'false', - '$mbStrSplitConstantStringWithGreaterSplitLengthThanStringLengthAndInvalidEncoding', - ], - [ - PHP_VERSION_ID < 80000 ? 'list|false' : 'list', - '$mbStrSplitConstantStringWithGreaterSplitLengthThanStringLengthAndVariableEncoding', - ], - [ - 'false', - '$mbStrSplitConstantStringWithFailureSplitLengthAndValidEncoding', - ], - [ - 'false', - '$mbStrSplitConstantStringWithFailureSplitLengthAndInvalidEncoding', - ], - [ - 'false', - '$mbStrSplitConstantStringWithFailureSplitLengthAndVariableEncoding', - ], - [ - PHP_VERSION_ID < 80000 ? 'list|false' : 'list', - '$mbStrSplitConstantStringWithInvalidSplitLengthTypeAndValidEncoding', - ], - [ - 'false', - '$mbStrSplitConstantStringWithInvalidSplitLengthTypeAndInvalidEncoding', - ], - [ - PHP_VERSION_ID < 80000 ? 'list|false' : 'list', - '$mbStrSplitConstantStringWithInvalidSplitLengthTypeAndVariableEncoding', - ], - [ - "array{'a', 'b', 'c', 'd', 'e', 'f'}|array{'g', 'h', 'i', 'j', 'k', 'l'}", - '$mbStrSplitConstantStringWithVariableStringAndConstantSplitLengthAndValidEncoding', - ], - [ - 'false', - '$mbStrSplitConstantStringWithVariableStringAndConstantSplitLengthAndInvalidEncoding', - ], - [ - PHP_VERSION_ID < 80000 ? 'list|false' : 'list', - '$mbStrSplitConstantStringWithVariableStringAndConstantSplitLengthAndVariableEncoding', - ], - [ - PHP_VERSION_ID < 80000 ? 'list|false' : 'list', - '$mbStrSplitConstantStringWithVariableStringAndVariableSplitLengthAndValidEncoding', - ], - [ - 'false', - '$mbStrSplitConstantStringWithVariableStringAndVariableSplitLengthAndInvalidEncoding', - ], - [ - PHP_VERSION_ID < 80000 ? 'list|false' : 'list', - '$mbStrSplitConstantStringWithVariableStringAndVariableSplitLengthAndVariableEncoding', - ], - ]; - } - - /** - * @dataProvider dataPhp74Functions - */ - public function testPhp74Functions( - string $description, - string $expression, - ): void - { - if (PHP_VERSION_ID < 70400) { - $this->markTestSkipped('Test requires PHP 7.4'); - } - $this->assertTypes( - __DIR__ . '/data/php74_functions.php', - $description, - $expression, - ); - } - public function dataUnionMethods(): array { return [ diff --git a/tests/PHPStan/Analyser/NodeScopeResolverTest.php b/tests/PHPStan/Analyser/NodeScopeResolverTest.php index 1e3afb4e70..5facb9795c 100644 --- a/tests/PHPStan/Analyser/NodeScopeResolverTest.php +++ b/tests/PHPStan/Analyser/NodeScopeResolverTest.php @@ -49,6 +49,19 @@ private static function findTestFiles(): iterable } } + if (PHP_VERSION_ID >= 80200) { + yield __DIR__ . '/data/str-split-php82.php'; + } elseif (PHP_VERSION_ID >= 80000) { + yield __DIR__ . '/data/str-split-php80.php'; + } else { + yield __DIR__ . '/data/str-split-php74.php'; + } + if (PHP_VERSION_ID >= 80000) { + yield __DIR__ . '/data/mb-str-split-php80.php'; + } elseif (PHP_VERSION_ID >= 74000) { + yield __DIR__ . '/data/mb-str-split-php74.php'; + } + yield __DIR__ . '/../Rules/Methods/data/bug-6856.php'; if (PHP_VERSION_ID < 80000) { diff --git a/tests/PHPStan/Analyser/data/functions.php b/tests/PHPStan/Analyser/data/functions.php index ff580ad6a4..01b6d33f3d 100644 --- a/tests/PHPStan/Analyser/data/functions.php +++ b/tests/PHPStan/Analyser/data/functions.php @@ -56,19 +56,6 @@ $gettimeofdayDefault = gettimeofday(null); $gettimeofdayBenevolent = gettimeofday($undefined); -// str_split -/** @var string $string */ -$string = doFoo(); -$strSplitConstantStringWithoutDefinedParameters = str_split(); -$strSplitConstantStringWithoutDefinedSplitLength = str_split('abcdef'); -$strSplitStringWithoutDefinedSplitLength = str_split($string); -$strSplitConstantStringWithOneSplitLength = str_split('abcdef', 1); -$strSplitConstantStringWithGreaterSplitLengthThanStringLength = str_split('abcdef', 999); -$strSplitConstantStringWithFailureSplitLength = str_split('abcdef', 0); -$strSplitConstantStringWithInvalidSplitLengthType = str_split('abcdef', []); -$strSplitConstantStringWithVariableStringAndConstantSplitLength = str_split(doFoo() ? 'abcdef' : 'ghijkl', 1); -$strSplitConstantStringWithVariableStringAndVariableSplitLength = str_split(doFoo() ? 'abcdef' : 'ghijkl', doFoo() ? 1 : 2); - // parse_url /** @var int $integer */ $integer = doFoo(); diff --git a/tests/PHPStan/Analyser/data/mb-str-split-php74.php b/tests/PHPStan/Analyser/data/mb-str-split-php74.php new file mode 100644 index 0000000000..840010c7c3 --- /dev/null +++ b/tests/PHPStan/Analyser/data/mb-str-split-php74.php @@ -0,0 +1,94 @@ +|false', $mbStrSplitConstantStringWithoutDefinedParameters); + + $mbStrSplitConstantStringWithoutDefinedSplitLength = mb_str_split('abcdef'); + assertType('array{\'a\', \'b\', \'c\', \'d\', \'e\', \'f\'}', $mbStrSplitConstantStringWithoutDefinedSplitLength); + + $mbStrSplitStringWithoutDefinedSplitLength = mb_str_split($string); + assertType('list', $mbStrSplitStringWithoutDefinedSplitLength); + + $mbStrSplitConstantStringWithOneSplitLength = mb_str_split('abcdef', 1); + assertType('array{\'a\', \'b\', \'c\', \'d\', \'e\', \'f\'}', $mbStrSplitConstantStringWithOneSplitLength); + + $mbStrSplitConstantStringWithGreaterSplitLengthThanStringLength = mb_str_split('abcdef', 999); + assertType('array{\'abcdef\'}', $mbStrSplitConstantStringWithGreaterSplitLengthThanStringLength); + + $mbStrSplitConstantStringWithFailureSplitLength = mb_str_split('abcdef', 0); + assertType('false', $mbStrSplitConstantStringWithFailureSplitLength); + + $mbStrSplitConstantStringWithInvalidSplitLengthType = mb_str_split('abcdef', []); + assertType('list|false', $mbStrSplitConstantStringWithInvalidSplitLengthType); + + $mbStrSplitConstantStringWithVariableStringAndConstantSplitLength = mb_str_split(doFoo() ? 'abcdef' : 'ghijkl', 1); + assertType("array{'a', 'b', 'c', 'd', 'e', 'f'}|array{'g', 'h', 'i', 'j', 'k', 'l'}", $mbStrSplitConstantStringWithVariableStringAndConstantSplitLength); + + $mbStrSplitConstantStringWithVariableStringAndVariableSplitLength = mb_str_split(doFoo() ? 'abcdef' : 'ghijkl', doFoo() ? 1 : 2); + assertType('list|false', $mbStrSplitConstantStringWithVariableStringAndVariableSplitLength); + + $mbStrSplitConstantStringWithOneSplitLengthAndValidEncoding = mb_str_split('abcdef', 1, 'UTF-8'); + assertType("array{'a', 'b', 'c', 'd', 'e', 'f'}", $mbStrSplitConstantStringWithOneSplitLengthAndValidEncoding); + + $mbStrSplitConstantStringWithOneSplitLengthAndInvalidEncoding = mb_str_split('abcdef', 1, 'FAKE'); + assertType('false', $mbStrSplitConstantStringWithOneSplitLengthAndInvalidEncoding); + + $mbStrSplitConstantStringWithOneSplitLengthAndVariableEncoding = mb_str_split('abcdef', 1, doFoo()); + assertType('list|false', $mbStrSplitConstantStringWithOneSplitLengthAndVariableEncoding); + + $mbStrSplitConstantStringWithGreaterSplitLengthThanStringLengthAndValidEncoding = mb_str_split('abcdef', 999, 'UTF-8'); + assertType("array{'abcdef'}", $mbStrSplitConstantStringWithGreaterSplitLengthThanStringLengthAndValidEncoding); + + $mbStrSplitConstantStringWithGreaterSplitLengthThanStringLengthAndInvalidEncoding = mb_str_split('abcdef', 999, 'FAKE'); + assertType('false', $mbStrSplitConstantStringWithGreaterSplitLengthThanStringLengthAndInvalidEncoding); + + $mbStrSplitConstantStringWithGreaterSplitLengthThanStringLengthAndVariableEncoding = mb_str_split('abcdef', 999, doFoo()); + assertType('list|false', $mbStrSplitConstantStringWithGreaterSplitLengthThanStringLengthAndVariableEncoding); + + $mbStrSplitConstantStringWithFailureSplitLengthAndValidEncoding = mb_str_split('abcdef', 0, 'UTF-8'); + assertType('false', $mbStrSplitConstantStringWithFailureSplitLengthAndValidEncoding); + + $mbStrSplitConstantStringWithFailureSplitLengthAndInvalidEncoding = mb_str_split('abcdef', 0, 'FAKE'); + assertType('false', $mbStrSplitConstantStringWithFailureSplitLengthAndInvalidEncoding); + + $mbStrSplitConstantStringWithFailureSplitLengthAndVariableEncoding = mb_str_split('abcdef', 0, doFoo()); + assertType('false', $mbStrSplitConstantStringWithFailureSplitLengthAndVariableEncoding); + + $mbStrSplitConstantStringWithInvalidSplitLengthTypeAndValidEncoding = mb_str_split('abcdef', [], 'UTF-8'); + assertType('list|false', $mbStrSplitConstantStringWithInvalidSplitLengthTypeAndValidEncoding); + + $mbStrSplitConstantStringWithInvalidSplitLengthTypeAndInvalidEncoding = mb_str_split('abcdef', [], 'FAKE'); + assertType('false', $mbStrSplitConstantStringWithInvalidSplitLengthTypeAndInvalidEncoding); + + $mbStrSplitConstantStringWithInvalidSplitLengthTypeAndVariableEncoding = mb_str_split('abcdef', [], doFoo()); + assertType('list|false', $mbStrSplitConstantStringWithInvalidSplitLengthTypeAndVariableEncoding); + + $mbStrSplitConstantStringWithVariableStringAndConstantSplitLengthAndValidEncoding = mb_str_split(doFoo() ? 'abcdef' : 'ghijkl', 1, 'UTF-8'); + assertType("array{'a', 'b', 'c', 'd', 'e', 'f'}|array{'g', 'h', 'i', 'j', 'k', 'l'}", $mbStrSplitConstantStringWithVariableStringAndConstantSplitLengthAndValidEncoding); + + $mbStrSplitConstantStringWithVariableStringAndConstantSplitLengthAndInvalidEncoding = mb_str_split(doFoo() ? 'abcdef' : 'ghijkl', 1, 'FAKE'); + assertType('false', $mbStrSplitConstantStringWithVariableStringAndConstantSplitLengthAndInvalidEncoding); + + $mbStrSplitConstantStringWithVariableStringAndConstantSplitLengthAndVariableEncoding = mb_str_split(doFoo() ? 'abcdef' : 'ghijkl', 1, doFoo()); + assertType('list|false', $mbStrSplitConstantStringWithVariableStringAndConstantSplitLengthAndVariableEncoding); + + $mbStrSplitConstantStringWithVariableStringAndVariableSplitLengthAndValidEncoding = mb_str_split(doFoo() ? 'abcdef' : 'ghijkl', doFoo() ? 1 : 2, 'UTF-8'); + assertType('list|false', $mbStrSplitConstantStringWithVariableStringAndVariableSplitLengthAndValidEncoding); + + $mbStrSplitConstantStringWithVariableStringAndVariableSplitLengthAndInvalidEncoding = mb_str_split(doFoo() ? 'abcdef' : 'ghijkl', doFoo() ? 1 : 2, 'FAKE'); + assertType('false', $mbStrSplitConstantStringWithVariableStringAndVariableSplitLengthAndInvalidEncoding); + + $mbStrSplitConstantStringWithVariableStringAndVariableSplitLengthAndVariableEncoding = mb_str_split(doFoo() ? 'abcdef' : 'ghijkl', doFoo() ? 1 : 2, doFoo()); + assertType('list|false', $mbStrSplitConstantStringWithVariableStringAndVariableSplitLengthAndVariableEncoding); + } +} diff --git a/tests/PHPStan/Analyser/data/mb-str-split-php80.php b/tests/PHPStan/Analyser/data/mb-str-split-php80.php new file mode 100644 index 0000000000..418c3bfb5c --- /dev/null +++ b/tests/PHPStan/Analyser/data/mb-str-split-php80.php @@ -0,0 +1,94 @@ +', $mbStrSplitConstantStringWithoutDefinedParameters); + + $mbStrSplitConstantStringWithoutDefinedSplitLength = mb_str_split('abcdef'); + assertType('array{\'a\', \'b\', \'c\', \'d\', \'e\', \'f\'}', $mbStrSplitConstantStringWithoutDefinedSplitLength); + + $mbStrSplitStringWithoutDefinedSplitLength = mb_str_split($string); + assertType('list', $mbStrSplitStringWithoutDefinedSplitLength); + + $mbStrSplitConstantStringWithOneSplitLength = mb_str_split('abcdef', 1); + assertType('array{\'a\', \'b\', \'c\', \'d\', \'e\', \'f\'}', $mbStrSplitConstantStringWithOneSplitLength); + + $mbStrSplitConstantStringWithGreaterSplitLengthThanStringLength = mb_str_split('abcdef', 999); + assertType('array{\'abcdef\'}', $mbStrSplitConstantStringWithGreaterSplitLengthThanStringLength); + + $mbStrSplitConstantStringWithFailureSplitLength = mb_str_split('abcdef', 0); + assertType('false', $mbStrSplitConstantStringWithFailureSplitLength); + + $mbStrSplitConstantStringWithInvalidSplitLengthType = mb_str_split('abcdef', []); + assertType('list', $mbStrSplitConstantStringWithInvalidSplitLengthType); + + $mbStrSplitConstantStringWithVariableStringAndConstantSplitLength = mb_str_split(doFoo() ? 'abcdef' : 'ghijkl', 1); + assertType("array{'a', 'b', 'c', 'd', 'e', 'f'}|array{'g', 'h', 'i', 'j', 'k', 'l'}", $mbStrSplitConstantStringWithVariableStringAndConstantSplitLength); + + $mbStrSplitConstantStringWithVariableStringAndVariableSplitLength = mb_str_split(doFoo() ? 'abcdef' : 'ghijkl', doFoo() ? 1 : 2); + assertType('list', $mbStrSplitConstantStringWithVariableStringAndVariableSplitLength); + + $mbStrSplitConstantStringWithOneSplitLengthAndValidEncoding = mb_str_split('abcdef', 1, 'UTF-8'); + assertType("array{'a', 'b', 'c', 'd', 'e', 'f'}", $mbStrSplitConstantStringWithOneSplitLengthAndValidEncoding); + + $mbStrSplitConstantStringWithOneSplitLengthAndInvalidEncoding = mb_str_split('abcdef', 1, 'FAKE'); + assertType('false', $mbStrSplitConstantStringWithOneSplitLengthAndInvalidEncoding); + + $mbStrSplitConstantStringWithOneSplitLengthAndVariableEncoding = mb_str_split('abcdef', 1, doFoo()); + assertType('list', $mbStrSplitConstantStringWithOneSplitLengthAndVariableEncoding); + + $mbStrSplitConstantStringWithGreaterSplitLengthThanStringLengthAndValidEncoding = mb_str_split('abcdef', 999, 'UTF-8'); + assertType("array{'abcdef'}", $mbStrSplitConstantStringWithGreaterSplitLengthThanStringLengthAndValidEncoding); + + $mbStrSplitConstantStringWithGreaterSplitLengthThanStringLengthAndInvalidEncoding = mb_str_split('abcdef', 999, 'FAKE'); + assertType('false', $mbStrSplitConstantStringWithGreaterSplitLengthThanStringLengthAndInvalidEncoding); + + $mbStrSplitConstantStringWithGreaterSplitLengthThanStringLengthAndVariableEncoding = mb_str_split('abcdef', 999, doFoo()); + assertType('list', $mbStrSplitConstantStringWithGreaterSplitLengthThanStringLengthAndVariableEncoding); + + $mbStrSplitConstantStringWithFailureSplitLengthAndValidEncoding = mb_str_split('abcdef', 0, 'UTF-8'); + assertType('false', $mbStrSplitConstantStringWithFailureSplitLengthAndValidEncoding); + + $mbStrSplitConstantStringWithFailureSplitLengthAndInvalidEncoding = mb_str_split('abcdef', 0, 'FAKE'); + assertType('false', $mbStrSplitConstantStringWithFailureSplitLengthAndInvalidEncoding); + + $mbStrSplitConstantStringWithFailureSplitLengthAndVariableEncoding = mb_str_split('abcdef', 0, doFoo()); + assertType('false', $mbStrSplitConstantStringWithFailureSplitLengthAndVariableEncoding); + + $mbStrSplitConstantStringWithInvalidSplitLengthTypeAndValidEncoding = mb_str_split('abcdef', [], 'UTF-8'); + assertType('list', $mbStrSplitConstantStringWithInvalidSplitLengthTypeAndValidEncoding); + + $mbStrSplitConstantStringWithInvalidSplitLengthTypeAndInvalidEncoding = mb_str_split('abcdef', [], 'FAKE'); + assertType('false', $mbStrSplitConstantStringWithInvalidSplitLengthTypeAndInvalidEncoding); + + $mbStrSplitConstantStringWithInvalidSplitLengthTypeAndVariableEncoding = mb_str_split('abcdef', [], doFoo()); + assertType('list', $mbStrSplitConstantStringWithInvalidSplitLengthTypeAndVariableEncoding); + + $mbStrSplitConstantStringWithVariableStringAndConstantSplitLengthAndValidEncoding = mb_str_split(doFoo() ? 'abcdef' : 'ghijkl', 1, 'UTF-8'); + assertType("array{'a', 'b', 'c', 'd', 'e', 'f'}|array{'g', 'h', 'i', 'j', 'k', 'l'}", $mbStrSplitConstantStringWithVariableStringAndConstantSplitLengthAndValidEncoding); + + $mbStrSplitConstantStringWithVariableStringAndConstantSplitLengthAndInvalidEncoding = mb_str_split(doFoo() ? 'abcdef' : 'ghijkl', 1, 'FAKE'); + assertType('false', $mbStrSplitConstantStringWithVariableStringAndConstantSplitLengthAndInvalidEncoding); + + $mbStrSplitConstantStringWithVariableStringAndConstantSplitLengthAndVariableEncoding = mb_str_split(doFoo() ? 'abcdef' : 'ghijkl', 1, doFoo()); + assertType('list', $mbStrSplitConstantStringWithVariableStringAndConstantSplitLengthAndVariableEncoding); + + $mbStrSplitConstantStringWithVariableStringAndVariableSplitLengthAndValidEncoding = mb_str_split(doFoo() ? 'abcdef' : 'ghijkl', doFoo() ? 1 : 2, 'UTF-8'); + assertType('list', $mbStrSplitConstantStringWithVariableStringAndVariableSplitLengthAndValidEncoding); + + $mbStrSplitConstantStringWithVariableStringAndVariableSplitLengthAndInvalidEncoding = mb_str_split(doFoo() ? 'abcdef' : 'ghijkl', doFoo() ? 1 : 2, 'FAKE'); + assertType('false', $mbStrSplitConstantStringWithVariableStringAndVariableSplitLengthAndInvalidEncoding); + + $mbStrSplitConstantStringWithVariableStringAndVariableSplitLengthAndVariableEncoding = mb_str_split(doFoo() ? 'abcdef' : 'ghijkl', doFoo() ? 1 : 2, doFoo()); + assertType('list', $mbStrSplitConstantStringWithVariableStringAndVariableSplitLengthAndVariableEncoding); + } +} diff --git a/tests/PHPStan/Analyser/data/php74_functions.php b/tests/PHPStan/Analyser/data/php74_functions.php deleted file mode 100644 index 62b2e4b910..0000000000 --- a/tests/PHPStan/Analyser/data/php74_functions.php +++ /dev/null @@ -1,33 +0,0 @@ -|false', $strSplitConstantStringWithoutDefinedParameters); + + $strSplitConstantStringWithoutDefinedSplitLength = str_split('abcdef'); + assertType('array{\'a\', \'b\', \'c\', \'d\', \'e\', \'f\'}', $strSplitConstantStringWithoutDefinedSplitLength); + + $strSplitStringWithoutDefinedSplitLength = str_split($string); + assertType('non-empty-list', $strSplitStringWithoutDefinedSplitLength); + + $strSplitConstantStringWithOneSplitLength = str_split('abcdef', 1); + assertType('array{\'a\', \'b\', \'c\', \'d\', \'e\', \'f\'}', $strSplitConstantStringWithOneSplitLength); + + $strSplitConstantStringWithGreaterSplitLengthThanStringLength = str_split('abcdef', 999); + assertType('array{\'abcdef\'}', $strSplitConstantStringWithGreaterSplitLengthThanStringLength); + + $strSplitConstantStringWithFailureSplitLength = str_split('abcdef', 0); + assertType('false', $strSplitConstantStringWithFailureSplitLength); + + $strSplitConstantStringWithInvalidSplitLengthType = str_split('abcdef', []); + assertType('non-empty-list|false', $strSplitConstantStringWithInvalidSplitLengthType); + + $strSplitConstantStringWithVariableStringAndConstantSplitLength = str_split(doFoo() ? 'abcdef' : 'ghijkl', 1); + assertType("array{'a', 'b', 'c', 'd', 'e', 'f'}|array{'g', 'h', 'i', 'j', 'k', 'l'}", $strSplitConstantStringWithVariableStringAndConstantSplitLength); + + $strSplitConstantStringWithVariableStringAndVariableSplitLength = str_split(doFoo() ? 'abcdef' : 'ghijkl', doFoo() ? 1 : 2); + assertType('non-empty-list|false', $strSplitConstantStringWithVariableStringAndVariableSplitLength); + + } +} diff --git a/tests/PHPStan/Analyser/data/str-split-php80.php b/tests/PHPStan/Analyser/data/str-split-php80.php new file mode 100644 index 0000000000..1cf04a0cfd --- /dev/null +++ b/tests/PHPStan/Analyser/data/str-split-php80.php @@ -0,0 +1,40 @@ +', $strSplitConstantStringWithoutDefinedParameters); + + $strSplitConstantStringWithoutDefinedSplitLength = str_split('abcdef'); + assertType('array{\'a\', \'b\', \'c\', \'d\', \'e\', \'f\'}', $strSplitConstantStringWithoutDefinedSplitLength); + + $strSplitStringWithoutDefinedSplitLength = str_split($string); + assertType('non-empty-list', $strSplitStringWithoutDefinedSplitLength); + + $strSplitConstantStringWithOneSplitLength = str_split('abcdef', 1); + assertType('array{\'a\', \'b\', \'c\', \'d\', \'e\', \'f\'}', $strSplitConstantStringWithOneSplitLength); + + $strSplitConstantStringWithGreaterSplitLengthThanStringLength = str_split('abcdef', 999); + assertType('array{\'abcdef\'}', $strSplitConstantStringWithGreaterSplitLengthThanStringLength); + + $strSplitConstantStringWithFailureSplitLength = str_split('abcdef', 0); + assertType('false', $strSplitConstantStringWithFailureSplitLength); + + $strSplitConstantStringWithInvalidSplitLengthType = str_split('abcdef', []); + assertType('non-empty-list', $strSplitConstantStringWithInvalidSplitLengthType); + + $strSplitConstantStringWithVariableStringAndConstantSplitLength = str_split(doFoo() ? 'abcdef' : 'ghijkl', 1); + assertType("array{'a', 'b', 'c', 'd', 'e', 'f'}|array{'g', 'h', 'i', 'j', 'k', 'l'}", $strSplitConstantStringWithVariableStringAndConstantSplitLength); + + $strSplitConstantStringWithVariableStringAndVariableSplitLength = str_split(doFoo() ? 'abcdef' : 'ghijkl', doFoo() ? 1 : 2); + assertType('non-empty-list', $strSplitConstantStringWithVariableStringAndVariableSplitLength); + + } +} diff --git a/tests/PHPStan/Analyser/data/str-split-php82.php b/tests/PHPStan/Analyser/data/str-split-php82.php new file mode 100644 index 0000000000..8d1e00d59f --- /dev/null +++ b/tests/PHPStan/Analyser/data/str-split-php82.php @@ -0,0 +1,40 @@ +', $strSplitConstantStringWithoutDefinedParameters); + + $strSplitConstantStringWithoutDefinedSplitLength = str_split('abcdef'); + assertType('array{\'a\', \'b\', \'c\', \'d\', \'e\', \'f\'}', $strSplitConstantStringWithoutDefinedSplitLength); + + $strSplitStringWithoutDefinedSplitLength = str_split($string); + assertType('list', $strSplitStringWithoutDefinedSplitLength); + + $strSplitConstantStringWithOneSplitLength = str_split('abcdef', 1); + assertType('array{\'a\', \'b\', \'c\', \'d\', \'e\', \'f\'}', $strSplitConstantStringWithOneSplitLength); + + $strSplitConstantStringWithGreaterSplitLengthThanStringLength = str_split('abcdef', 999); + assertType('array{\'abcdef\'}', $strSplitConstantStringWithGreaterSplitLengthThanStringLength); + + $strSplitConstantStringWithFailureSplitLength = str_split('abcdef', 0); + assertType('false', $strSplitConstantStringWithFailureSplitLength); + + $strSplitConstantStringWithInvalidSplitLengthType = str_split('abcdef', []); + assertType('list', $strSplitConstantStringWithInvalidSplitLengthType); + + $strSplitConstantStringWithVariableStringAndConstantSplitLength = str_split(doFoo() ? 'abcdef' : 'ghijkl', 1); + assertType("array{'a', 'b', 'c', 'd', 'e', 'f'}|array{'g', 'h', 'i', 'j', 'k', 'l'}", $strSplitConstantStringWithVariableStringAndConstantSplitLength); + + $strSplitConstantStringWithVariableStringAndVariableSplitLength = str_split(doFoo() ? 'abcdef' : 'ghijkl', doFoo() ? 1 : 2); + assertType('list', $strSplitConstantStringWithVariableStringAndVariableSplitLength); + + } +}