2016-09-09 22:38:32 +02:00
|
|
|
<?php
|
|
|
|
|
|
|
|
namespace Psalm\Tests;
|
|
|
|
|
|
|
|
use Psalm\Type;
|
|
|
|
use PhpParser;
|
|
|
|
use PhpParser\ParserFactory;
|
|
|
|
use PHPUnit_Framework_TestCase;
|
|
|
|
|
|
|
|
class TypeParseTest extends PHPUnit_Framework_TestCase
|
|
|
|
{
|
|
|
|
protected static $_parser;
|
|
|
|
|
|
|
|
public static function setUpBeforeClass()
|
|
|
|
{
|
|
|
|
self::$_parser = (new ParserFactory)->create(ParserFactory::PREFER_PHP7);
|
|
|
|
}
|
|
|
|
|
|
|
|
private static function getAtomic($string)
|
|
|
|
{
|
|
|
|
return array_values(Type::parseString($string)->types)[0];
|
|
|
|
}
|
|
|
|
|
|
|
|
public function testIntOrString()
|
|
|
|
{
|
|
|
|
$this->assertEquals('int|string', (string) Type::parseString('int|string'));
|
2016-09-22 06:31:07 +02:00
|
|
|
}
|
2016-09-09 22:38:32 +02:00
|
|
|
|
2016-09-22 06:31:07 +02:00
|
|
|
public function testArray()
|
|
|
|
{
|
2016-10-30 02:57:03 +02:00
|
|
|
$this->assertEquals('array<int,int>', (string) Type::parseString('array<int, int>'));
|
|
|
|
$this->assertEquals('array<int,string>', (string) Type::parseString('array<int, string>'));
|
|
|
|
$this->assertEquals('array<int,static>', (string) Type::parseString('array<int, static>'));
|
|
|
|
$this->assertEquals('array<int|string,string>', (string) Type::parseString('array<int|string, string>'));
|
2016-09-22 06:31:07 +02:00
|
|
|
}
|
2016-09-09 22:38:32 +02:00
|
|
|
|
2016-09-22 06:31:07 +02:00
|
|
|
public function testGeneric()
|
|
|
|
{
|
2016-09-09 22:38:32 +02:00
|
|
|
$this->assertEquals('B<int>', (string) Type::parseString('B<int>'));
|
|
|
|
}
|
|
|
|
|
2016-10-30 02:57:03 +02:00
|
|
|
public function testPhpDocStyle()
|
|
|
|
{
|
|
|
|
$this->assertEquals('array<mixed,A>', (string) Type::parseString('A[]'));
|
|
|
|
$this->assertEquals('array<mixed,A|B>', (string) Type::parseString('(A|B)[]'));
|
|
|
|
$this->assertEquals('array<mixed,array<mixed,A>>', (string) Type::parseString('A[][]'));
|
|
|
|
$this->assertEquals('array<mixed,array<mixed,A|B>>', (string) Type::parseString('(A|B)[][]'));
|
|
|
|
}
|
|
|
|
|
2016-09-22 06:31:07 +02:00
|
|
|
public function testObjectLike()
|
|
|
|
{
|
2016-10-30 02:57:03 +02:00
|
|
|
$this->assertEquals('array{a:int,b:string}', (string) Type::parseString('array{a:int, b:string}'));
|
|
|
|
$this->assertEquals('array{a:int|string,b:string}', (string) Type::parseString('array{a:int|string, b:string}'));
|
|
|
|
$this->assertEquals('array{a:array<int,string|int>,b:string}', (string) Type::parseString('array{a:array<int, string|int>, b:string}'));
|
2016-09-22 06:31:07 +02:00
|
|
|
}
|
2016-09-09 22:38:32 +02:00
|
|
|
}
|