diff --git a/stubs/Prophecy.phpstub b/stubs/Prophecy.phpstub index 6f5a668..7c7e25e 100644 --- a/stubs/Prophecy.phpstub +++ b/stubs/Prophecy.phpstub @@ -17,7 +17,7 @@ namespace Prophecy { use Prophecy\Argument\Token; class Argument { - /** @param callable():bool $callback */ + /** @param callable(mixed...):bool $callback */ public static function that(callable $callback): Token\CallbackToken {} /** @param mixed ...$tokens */ diff --git a/tests/acceptance/Prophecy.feature b/tests/acceptance/Prophecy.feature new file mode 100644 index 0000000..1a1858e --- /dev/null +++ b/tests/acceptance/Prophecy.feature @@ -0,0 +1,92 @@ +Feature: Prophecy + In order to utilize Prophecy in my test cases + As a Psalm user + I need Psalm to typecheck my prophecies + + Background: + Given I have the following config + """ + + + + + + + + + + + """ + And I have the following code preamble + """ + 0; + }); + } + } + """ + When I run Psalm + Then I see no errors + + Scenario: Argument::that() accepts callable with multiple parameters + Given I have the following code + """ + class MyTestCase extends TestCase + { + /** @return void */ + public function testSomething() { + $argument = Argument::that(function (int $i, int $j, int $k) { + return ($i + $j + $k) > 0; + }); + } + } + """ + When I run Psalm + Then I see no errors + + Scenario: Argument::that() only accepts callable with boolean return type + Given I have the following code + """ + class MyTestCase extends TestCase + { + /** @return void */ + public function testSomething() { + $argument = Argument::that(function (): string { + return 'hello'; + }); + } + } + """ + When I run Psalm + Then I see these errors + | InvalidScalarArgument | Argument 1 of Prophecy\Argument::that expects callable(mixed...):bool, Closure():string(hello) provided |