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 | Type | Message | | InvalidScalarArgument | /Argument 1 of Prophecy\\Argument::that expects callable\(mixed...\):bool, (pure-)?Closure\(\):(string\(hello\)\|"hello") provided/ | And I see no other errors Scenario: prophesize() provided by ProphecyTrait is generic Given I have the following code """ use Prophecy\PhpUnit\ProphecyTrait; class SUT { public function getString(): string { return "zzz"; } } class MyTestCase extends TestCase { use ProphecyTrait; public function testSomething(): void { $this->prophesize(SUT::class)->reveal()->getString(); } } """ When I run Psalm Then I see no errors