Skip to content

Commit b8ee0bc

Browse files
committed
Added *Parser unit tests
1 parent 9a02775 commit b8ee0bc

File tree

3 files changed

+117
-0
lines changed

3 files changed

+117
-0
lines changed

tests/PHPStan/Parser/ParserTest.php

Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
<?php declare(strict_types = 1);
2+
3+
namespace PHPStan\Parser;
4+
5+
use PHPStan\Testing\PHPStanTestCase;
6+
use PHPStan\TrinaryLogic;
7+
8+
/**
9+
* @covers \PHPStan\Parser\RichParser
10+
* @covers \PHPStan\Parser\SimpleParser
11+
*/
12+
class ParserTest extends PHPStanTestCase
13+
{
14+
15+
public function dataVariadicCallLikes(): iterable
16+
{
17+
yield [
18+
__DIR__ . '/data/variadic-functions.php',
19+
VariadicFunctionsVisitor::ATTRIBUTE_NAME,
20+
[
21+
'VariadicFunctions\variadic_fn1' => TrinaryLogic::createYes(),
22+
'VariadicFunctions\nonvariadic' => TrinaryLogic::createNo(),
23+
'VariadicFunctions\maybe_variadic_fn1' => TrinaryLogic::createNo(),
24+
],
25+
];
26+
27+
yield [
28+
__DIR__ . '/data/variadic-methods.php',
29+
VariadicMethodsVisitor::ATTRIBUTE_NAME,
30+
[
31+
'VariadicMethod\X' => [
32+
'non_variadic_fn1' => TrinaryLogic::createNo(),
33+
'variadic_fn1' => TrinaryLogic::createNo(), // variadicness later on detected via reflection
34+
],
35+
],
36+
];
37+
}
38+
39+
/**
40+
* @dataProvider dataVariadicCallLikes
41+
* @param array<string, TrinaryLogic>|array<string, array<string, TrinaryLogic>> $expectedVariadics
42+
* @throws ParserErrorsException
43+
*/
44+
public function testSimpleParserVariadicCallLikes(string $file, string $attributeName, array $expectedVariadics): void
45+
{
46+
/** @var RichParser $parser */
47+
$parser = self::getContainer()->getService('currentPhpVersionSimpleParser');
48+
$ast = $parser->parseFile($file);
49+
$variadics = $ast[0]->getAttribute($attributeName);
50+
$this->assertIsArray($variadics);
51+
$this->assertSame($expectedVariadics, $variadics);
52+
}
53+
54+
/**
55+
* @dataProvider dataVariadicCallLikes
56+
* @param array<string, TrinaryLogic>|array<string, array<string, TrinaryLogic>> $expectedVariadics
57+
* @throws ParserErrorsException
58+
*/
59+
public function testRichParserVariadicCallLikes(string $file, string $attributeName, array $expectedVariadics): void
60+
{
61+
/** @var RichParser $parser */
62+
$parser = self::getContainer()->getService('currentPhpVersionRichParser');
63+
$ast = $parser->parseFile($file);
64+
$variadics = $ast[0]->getAttribute($attributeName);
65+
$this->assertIsArray($variadics);
66+
$this->assertSame($expectedVariadics, $variadics);
67+
}
68+
69+
}
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
<?php
2+
3+
namespace VariadicFunctions;
4+
5+
function variadic_fn1(...$v) {
6+
}
7+
8+
function nonvariadic()
9+
{
10+
}
11+
12+
if (rand(0,1)) {
13+
function maybe_variadic_fn1($v)
14+
{
15+
}
16+
} else {
17+
function maybe_variadic_fn1(...$v)
18+
{
19+
}
20+
}
21+
22+
(function() {})();
23+
24+
$y = 1;
25+
$fn2 = function ($x) use ($y) {
26+
return $x + $y;
27+
};
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
<?php
2+
3+
namespace VariadicMethod;
4+
5+
class X {
6+
7+
function non_variadic_fn1($v) {
8+
}
9+
10+
function variadic_fn1(...$v) {
11+
}
12+
}
13+
14+
15+
$x = new class {
16+
function non_variadic_fn1($v) {
17+
}
18+
19+
function variadic_fn1(...$v) {
20+
}
21+
};

0 commit comments

Comments
 (0)