create(ParserFactory::PREFER_PHP7); } /** * @return void */ public function setUp() { FileChecker::clearCache(); $this->project_checker = new \Psalm\Checker\ProjectChecker(); } /** * @param string $string * @return Type\Atomic */ private static function getAtomic($string) { return array_values(Type::parseString($string)->types)[0]; } /** * @return void */ public function testIntOrString() { $this->assertEquals( 'int|string', (string) Type::combineTypes([ self::getAtomic('int'), self::getAtomic('string') ]) ); } /** * @return void */ public function testArrayOfIntOrString() { $this->assertEquals( 'array', (string) Type::combineTypes([ self::getAtomic('array'), self::getAtomic('array') ]) ); } /** * @return void */ public function testArrayOfIntOrAlsoString() { $this->assertEquals( 'array|string', (string) Type::combineTypes([ self::getAtomic('array'), self::getAtomic('string') ]) ); } /** * @return void */ public function testEmptyArrays() { $this->assertEquals( 'array', (string) Type::combineTypes([ self::getAtomic('array'), self::getAtomic('array') ]) ); } /** * @return void */ public function testArrayStringOrEmptyArray() { $this->assertEquals( 'array', (string) Type::combineTypes([ self::getAtomic('array'), self::getAtomic('array') ]) ); } /** * @return void */ public function testArrayMixedOrString() { $this->assertEquals( 'array', (string) Type::combineTypes([ self::getAtomic('array'), self::getAtomic('array') ]) ); } /** * @return void */ public function testArrayMixedOrStringKeys() { $this->assertEquals( 'array', (string) Type::combineTypes([ self::getAtomic('array'), self::getAtomic('array') ]) ); } /** * @return void */ public function testArrayMixedOrEmpty() { $this->assertEquals( 'array', (string) Type::combineTypes([ self::getAtomic('array'), self::getAtomic('array') ]) ); } /** * @return void */ public function testArrayBigCombination() { $this->assertEquals( 'array', (string) Type::combineTypes([ self::getAtomic('array'), self::getAtomic('array') ]) ); } /** * @return void */ public function testFalseDestruction() { $this->assertEquals( 'bool', (string) Type::combineTypes([ self::getAtomic('false'), self::getAtomic('bool') ]) ); } /** * @return void */ public function testOnlyFalse() { $this->assertEquals( 'bool', (string) Type::combineTypes([ self::getAtomic('false') ]) ); } /** * @return void */ public function testFalseFalseDestruction() { $this->assertEquals( 'bool', (string) Type::combineTypes([ self::getAtomic('false'), self::getAtomic('false') ]) ); } /** * @return void */ public function testAAndAOfB() { $this->assertEquals( 'A', (string) Type::combineTypes([ self::getAtomic('A'), self::getAtomic('A') ]) ); } /** * @return void */ public function testCombineObjectType() { $this->assertEquals( 'array{a:int, b:string}', (string) Type::combineTypes([ self::getAtomic('array{a:int}'), self::getAtomic('array{b:string}') ]) ); $this->assertEquals( 'array{a:int|string, b:string}', (string) Type::combineTypes([ self::getAtomic('array{a:int}'), self::getAtomic('array{a:string,b:string}') ]) ); } /** * @return void */ public function testMultipleValuedArray() { $stmts = self::$parser->parse('project_checker, $stmts); $file_checker->visitAndAnalyzeMethods(); } }