create(ParserFactory::PREFER_PHP7); $config = new TestConfig(); } /** * @return void */ public function setUp() { FileChecker::clearCache(); $this->project_checker = new \Psalm\Checker\ProjectChecker(); } /** * @return void */ public function testSimpleVars() { $stmts = self::$parser->parse('project_checker, $stmts); $context = new Context('somefile.php'); $file_checker->visitAndAnalyzeMethods($context); $this->assertEquals('string', (string) $context->vars_in_scope['$a']); $this->assertEquals('string', (string) $context->vars_in_scope['$b']); } /** * @return void */ public function testSimpleVarsWithSeparateTypes() { $stmts = self::$parser->parse('project_checker, $stmts); $context = new Context('somefile.php'); $file_checker->visitAndAnalyzeMethods($context); $this->assertEquals('string', (string) $context->vars_in_scope['$a']); $this->assertEquals('int', (string) $context->vars_in_scope['$b']); } /** * @return void */ public function testSimpleVarsWithSeparateTypesInVar() { $stmts = self::$parser->parse('project_checker, $stmts); $context = new Context('somefile.php'); $file_checker->visitAndAnalyzeMethods($context); $this->assertEquals('int|string', (string) $context->vars_in_scope['$a']); $this->assertEquals('int|string', (string) $context->vars_in_scope['$b']); } /** * @return void */ public function testThisVar() { $stmts = self::$parser->parse('a, $this->b) = ["a", "b"]; return $this->a; } } '); $file_checker = new FileChecker('somefile.php', $this->project_checker, $stmts); $context = new Context('somefile.php'); $file_checker->visitAndAnalyzeMethods($context); } /** * @expectedException \Psalm\Exception\CodeException * @expectedExceptionMessage InvalidPropertyAssignment - somefile.php:11 * @return void */ public function testThisVarWithBadType() { $stmts = self::$parser->parse('a, $this->b) = ["a", "b"]; return $this->a; } } '); $file_checker = new FileChecker('somefile.php', $this->project_checker, $stmts); $context = new Context('somefile.php'); $file_checker->visitAndAnalyzeMethods($context); } }