create(ParserFactory::PREFER_PHP7); $config = new TestConfig(); } public function setUp() { FileChecker::clearCache(); $this->project_checker = new \Psalm\Checker\ProjectChecker(); } public function testGenerator() { $stmts = self::$parser->parse(' */ function xrange($start, $limit, $step = 1) { for ($i = $start; $i <= $limit; $i += $step) { yield $i; } } $a = null; /* * Note that an array is never created or returned, * which saves memory. */ foreach (xrange(1, 9, 2) as $number) { $a = $number; } '); $file_checker = new FileChecker('somefile.php', $this->project_checker, $stmts); $context = new Context('somefile.php'); $file_checker->visitAndCheckMethods($context); $this->assertEquals('null|int', (string) $context->vars_in_scope['$a']); } public function testFinally() { $stmts = self::$parser->parse('project_checker, $stmts); $context = new Context('somefile.php'); $file_checker->visitAndCheckMethods($context); } public function testForeachList() { $stmts = self::$parser->parse('project_checker, $stmts); $context = new Context('somefile.php'); $file_checker->visitAndCheckMethods($context); } public function testArrayStringDereferencing() { $stmts = self::$parser->parse('project_checker, $stmts); $context = new Context('somefile.php'); $file_checker->visitAndCheckMethods($context); $this->assertEquals('int', (string) $context->vars_in_scope['$a']); $this->assertEquals('string', (string) $context->vars_in_scope['$b']); } public function testClassString() { $stmts = self::$parser->parse(' '); $file_checker = new FileChecker('somefile.php', $this->project_checker, $stmts); $context = new Context('somefile.php'); $file_checker->visitAndCheckMethods($context); $this->assertEquals('string', (string) $context->vars_in_scope['$a']); } }