Skip to content

Commit

Permalink
add tests for fixed issues
Browse files Browse the repository at this point in the history
  • Loading branch information
schlndh committed Apr 27, 2024
1 parent 22b25e6 commit f41aa30
Show file tree
Hide file tree
Showing 3 changed files with 179 additions and 0 deletions.
2 changes: 2 additions & 0 deletions tests/PHPStan/Analyser/NodeScopeResolverTest.php
Expand Up @@ -1421,6 +1421,8 @@ public function dataFileAsserts(): iterable
}

yield from $this->gatherAssertTypes(__DIR__ . '/data/preserve-large-constant-array.php');
yield from $this->gatherAssertTypes(__DIR__ . '/data/bug-9397.php');
yield from $this->gatherAssertTypes(__DIR__ . '/data/bug-10080.php');
yield from $this->gatherAssertTypes(__DIR__ . '/data/impure-error-log.php');
yield from $this->gatherAssertTypes(__DIR__ . '/data/falsy-isset.php');
yield from $this->gatherAssertTypes(__DIR__ . '/data/falsey-coalesce.php');
Expand Down
76 changes: 76 additions & 0 deletions tests/PHPStan/Analyser/data/bug-10080.php
@@ -0,0 +1,76 @@
<?php

namespace Bug10080;

/**
* @param array{
* a1?: string,
* a2?: string,
* a3?: string,
* a4?: string,
* a5?: string,
* a6?: string,
* a7?: string,
* a8?: string,
* a9?: string,
* a10?: string,
* a11?: string,
* a12?: string,
* a13?: string,
* a14?: string,
* a15?: string,
* a16?: string,
* a17?: string,
* a18?: string,
* a19?: string,
* a20?: string,
* a21?: string,
* a22?: string,
* a23?: string,
* a24?: string,
* a25?: string,
* a26?: string,
* a27?: string,
* a28?: string,
* a29?: string,
* a30?: string,
* a31?: string,
* a32?: string,
* a33?: string,
* a34?: string,
* a35?: string,
* a36?: string,
* a37?: string,
* a38?: string,
* a39?: string,
* a40?: string,
* a41?: string,
* a42?: string,
* a43?: string,
* a44?: string,
* a45?: string,
* a46?: string,
* a47?: string,
* a48?: string,
* a49?: string,
* a50?: string,
* a51?: string,
* a52?: string,
* a53?: string,
* a54?: string,
* a55?: string,
* a56?: string,
* a57?: string,
* a58?: string,
* a59?: string,
* a60?: string,
* a61?: string,
* a62?: string|string[]|int|float,
* a63?: string
* } $row
*/
function doStuff(array $row): void
{
\PHPStan\Testing\assertType('string', $row['a51'] ?? '');
\PHPStan\Testing\assertType('string', $row['a51'] ?? '');
}
101 changes: 101 additions & 0 deletions tests/PHPStan/Analyser/data/bug-9397.php
@@ -0,0 +1,101 @@
<?php declare(strict_types = 1);

namespace Bug9397;

use function PHPStan\Testing\assertType;

final class Money {
public static function zero(): Money {
return new Money();
}
}


class HelloWorld
{
/**
* @return array<int, array{
* foo1: Money,
* foo2: ?Money,
* foo3: string,
* foo4: string,
* foo5: string,
* foo6: string,
* foo7: string,
* foo8: string,
* foo9: string,
* foo10:string,
* foo11:int,
* foo12:int,
* foo13:int,
* foo14:int,
* foo15:int,
* foo16:int,
* foo17:int,
* foo18:int,
* foo19:int,
* foo20:int,
* foo21:bool,
* foo22:bool,
* foo23:bool,
* foo24:bool,
* foo25:bool,
* foo26:bool,
* foo27:bool,
* foo28:bool,
* foo29:bool,
* foo30:bool,
* foo31:bool,
* foo32:string,
* foo33:string,
* foo34:string,
* foo35:string,
* foo36:string,
* foo37:string,
* foo38:string,
* foo39:string,
* foo40:string,
* foo41:string,
* foo42:string,
* foo43:string,
* foo44:string,
* foo45:string,
* foo46:string,
* foo47:string,
* foo48:string,
* foo49:string,
* foo50:string,
* foo51:string,
* foo52:string,
* foo53:string,
* foo54:string,
* foo55:string,
* foo56:string,
* foo57:string,
* foo58:string,
* foo59:string,
* foo60:string,
* foo61:string,
* foo62:string,
* foo63:string,
* }>
* If the above type has 63 or more properties, the bug occurs
*/
private static function callable(): array {
return [];
}

public function callsite(): void {
$result = self::callable();
foreach ($result as $id => $p) {
assertType(Money::class, $p['foo1']);
assertType(Money::class . '|null', $p['foo2']);
assertType('string', $p['foo3']);

$baseDeposit = $p['foo2'] ?? Money::zero();
assertType(Money::class, $p['foo1']);
assertType(Money::class . '|null', $p['foo2']);
assertType('string', $p['foo3']);
}
}
}

0 comments on commit f41aa30

Please sign in to comment.