Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
176 changes: 0 additions & 176 deletions tests/PHPStan/Analyser/LegacyNodeScopeResolverTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -5273,14 +5273,6 @@ public function testArrayFunctions(

public function dataFunctions(): array
{
$strSplitDefaultReturnType = 'non-empty-list<string>|false';
if (PHP_VERSION_ID >= 80000) {
$strSplitDefaultReturnType = 'non-empty-list<string>';
}
if (PHP_VERSION_ID >= 80200) {
$strSplitDefaultReturnType = 'list<string>';
}

return [
[
'string',
Expand Down Expand Up @@ -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<string>' : 'list<string>',
'$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',
Expand Down Expand Up @@ -8956,138 +8912,6 @@ public function testPhp73Functions(
);
}

public function dataPhp74Functions(): array
{
return [
[
PHP_VERSION_ID < 80000 ? 'list<string>|false' : 'list<string>',
'$mbStrSplitConstantStringWithoutDefinedParameters',
],
[
'array{\'a\', \'b\', \'c\', \'d\', \'e\', \'f\'}',
'$mbStrSplitConstantStringWithoutDefinedSplitLength',
],
[
'list<string>',
'$mbStrSplitStringWithoutDefinedSplitLength',
],
[
'array{\'a\', \'b\', \'c\', \'d\', \'e\', \'f\'}',
'$mbStrSplitConstantStringWithOneSplitLength',
],
[
'array{\'abcdef\'}',
'$mbStrSplitConstantStringWithGreaterSplitLengthThanStringLength',
],
[
'false',
'$mbStrSplitConstantStringWithFailureSplitLength',
],
[
PHP_VERSION_ID < 80000 ? 'list<string>|false' : 'list<string>',
'$mbStrSplitConstantStringWithInvalidSplitLengthType',
],
[
"array{'a', 'b', 'c', 'd', 'e', 'f'}|array{'g', 'h', 'i', 'j', 'k', 'l'}",
'$mbStrSplitConstantStringWithVariableStringAndConstantSplitLength',
],
[
PHP_VERSION_ID < 80000 ? 'list<string>|false' : 'list<string>',
'$mbStrSplitConstantStringWithVariableStringAndVariableSplitLength',
],
[
"array{'a', 'b', 'c', 'd', 'e', 'f'}",
'$mbStrSplitConstantStringWithOneSplitLengthAndValidEncoding',
],
[
'false',
'$mbStrSplitConstantStringWithOneSplitLengthAndInvalidEncoding',
],
[
PHP_VERSION_ID < 80000 ? 'list<string>|false' : 'list<string>',
'$mbStrSplitConstantStringWithOneSplitLengthAndVariableEncoding',
],
[
"array{'abcdef'}",
'$mbStrSplitConstantStringWithGreaterSplitLengthThanStringLengthAndValidEncoding',
],
[
'false',
'$mbStrSplitConstantStringWithGreaterSplitLengthThanStringLengthAndInvalidEncoding',
],
[
PHP_VERSION_ID < 80000 ? 'list<string>|false' : 'list<string>',
'$mbStrSplitConstantStringWithGreaterSplitLengthThanStringLengthAndVariableEncoding',
],
[
'false',
'$mbStrSplitConstantStringWithFailureSplitLengthAndValidEncoding',
],
[
'false',
'$mbStrSplitConstantStringWithFailureSplitLengthAndInvalidEncoding',
],
[
'false',
'$mbStrSplitConstantStringWithFailureSplitLengthAndVariableEncoding',
],
[
PHP_VERSION_ID < 80000 ? 'list<string>|false' : 'list<string>',
'$mbStrSplitConstantStringWithInvalidSplitLengthTypeAndValidEncoding',
],
[
'false',
'$mbStrSplitConstantStringWithInvalidSplitLengthTypeAndInvalidEncoding',
],
[
PHP_VERSION_ID < 80000 ? 'list<string>|false' : 'list<string>',
'$mbStrSplitConstantStringWithInvalidSplitLengthTypeAndVariableEncoding',
],
[
"array{'a', 'b', 'c', 'd', 'e', 'f'}|array{'g', 'h', 'i', 'j', 'k', 'l'}",
'$mbStrSplitConstantStringWithVariableStringAndConstantSplitLengthAndValidEncoding',
],
[
'false',
'$mbStrSplitConstantStringWithVariableStringAndConstantSplitLengthAndInvalidEncoding',
],
[
PHP_VERSION_ID < 80000 ? 'list<string>|false' : 'list<string>',
'$mbStrSplitConstantStringWithVariableStringAndConstantSplitLengthAndVariableEncoding',
],
[
PHP_VERSION_ID < 80000 ? 'list<string>|false' : 'list<string>',
'$mbStrSplitConstantStringWithVariableStringAndVariableSplitLengthAndValidEncoding',
],
[
'false',
'$mbStrSplitConstantStringWithVariableStringAndVariableSplitLengthAndInvalidEncoding',
],
[
PHP_VERSION_ID < 80000 ? 'list<string>|false' : 'list<string>',
'$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 [
Expand Down
13 changes: 13 additions & 0 deletions tests/PHPStan/Analyser/NodeScopeResolverTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -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) {
Expand Down
13 changes: 0 additions & 13 deletions tests/PHPStan/Analyser/data/functions.php
Original file line number Diff line number Diff line change
Expand Up @@ -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();
Expand Down
94 changes: 94 additions & 0 deletions tests/PHPStan/Analyser/data/mb-str-split-php74.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,94 @@
<?php

namespace MbStrSplitPHP74;

use function PHPStan\Testing\assertType;

class MbStrSplit {
public function legacyTest(): void
{
/** @var string $string */
$string = doFoo();

$mbStrSplitConstantStringWithoutDefinedParameters = mb_str_split();
assertType('list<string>|false', $mbStrSplitConstantStringWithoutDefinedParameters);

$mbStrSplitConstantStringWithoutDefinedSplitLength = mb_str_split('abcdef');
assertType('array{\'a\', \'b\', \'c\', \'d\', \'e\', \'f\'}', $mbStrSplitConstantStringWithoutDefinedSplitLength);

$mbStrSplitStringWithoutDefinedSplitLength = mb_str_split($string);
assertType('list<string>', $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<string>|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<string>|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<string>|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<string>|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<string>|false', $mbStrSplitConstantStringWithInvalidSplitLengthTypeAndValidEncoding);

$mbStrSplitConstantStringWithInvalidSplitLengthTypeAndInvalidEncoding = mb_str_split('abcdef', [], 'FAKE');
assertType('false', $mbStrSplitConstantStringWithInvalidSplitLengthTypeAndInvalidEncoding);

$mbStrSplitConstantStringWithInvalidSplitLengthTypeAndVariableEncoding = mb_str_split('abcdef', [], doFoo());
assertType('list<string>|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<string>|false', $mbStrSplitConstantStringWithVariableStringAndConstantSplitLengthAndVariableEncoding);

$mbStrSplitConstantStringWithVariableStringAndVariableSplitLengthAndValidEncoding = mb_str_split(doFoo() ? 'abcdef' : 'ghijkl', doFoo() ? 1 : 2, 'UTF-8');
assertType('list<string>|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<string>|false', $mbStrSplitConstantStringWithVariableStringAndVariableSplitLengthAndVariableEncoding);
}
}
Loading
Loading