1
0
mirror of https://github.com/danog/psalm.git synced 2024-11-27 12:55:26 +01:00
psalm/tests/TypeParseTest.php

83 lines
2.4 KiB
PHP
Raw Normal View History

<?php
namespace Psalm\Tests;
2016-11-02 07:29:00 +01:00
use Psalm\Type;
class TypeParseTest extends TestCase
{
2017-01-13 20:07:23 +01:00
/**
* @return void
*/
public function testIntOrString()
{
2017-05-27 02:05:57 +02:00
$this->assertSame('int|string', (string) Type::parseString('int|string'));
}
2017-11-20 06:32:40 +01:00
/**
* @return void
*/
public function testNullable()
{
$this->assertSame('null|string', (string) Type::parseString('?string'));
}
2017-01-13 20:07:23 +01:00
/**
* @return void
*/
public function testArray()
{
2017-05-27 02:05:57 +02:00
$this->assertSame('array<int, int>', (string) Type::parseString('array<int, int>'));
$this->assertSame('array<int, string>', (string) Type::parseString('array<int, string>'));
$this->assertSame('array<int, static>', (string) Type::parseString('array<int, static>'));
$this->assertSame('array<int|string, string>', (string) Type::parseString('array<int|string, string>'));
}
2017-01-13 20:07:23 +01:00
/**
* @return void
*/
public function testGeneric()
{
2017-05-27 02:05:57 +02:00
$this->assertSame('B<int>', (string) Type::parseString('B<int>'));
}
2017-01-13 20:07:23 +01:00
/**
* @return void
*/
2016-10-30 02:57:03 +02:00
public function testPhpDocStyle()
{
2017-05-27 02:05:57 +02:00
$this->assertSame('array<mixed, A>', (string) Type::parseString('A[]'));
$this->assertSame('array<mixed, A|B>', (string) Type::parseString('(A|B)[]'));
$this->assertSame('array<mixed, array<mixed, A>>', (string) Type::parseString('A[][]'));
$this->assertSame('array<mixed, array<mixed, A|B>>', (string) Type::parseString('(A|B)[][]'));
$this->assertSame('array<mixed, A|B>', (string) Type::parseString('A[]|B[]'));
$this->assertSame('array<mixed, A|B>|C', (string) Type::parseString('A[]|B[]|C'));
2016-10-30 02:57:03 +02:00
}
2017-10-12 20:02:06 +02:00
/**
* @expectedException \Psalm\Exception\TypeParseTreeException
*
* @return void
*/
public function testInvalidType()
{
Type::parseString('array(A)');
}
2017-01-13 20:07:23 +01:00
/**
* @return void
*/
public function testObjectLike()
{
2017-05-27 02:05:57 +02:00
$this->assertSame('array{a:int, b:string}', (string) Type::parseString('array{a:int, b:string}'));
$this->assertSame(
2016-11-13 17:24:25 +01:00
'array{a:int|string, b:string}',
2016-11-02 07:29:00 +01:00
(string) Type::parseString('array{a:int|string, b:string}')
);
2017-05-27 02:05:57 +02:00
$this->assertSame(
2016-11-13 17:24:25 +01:00
'array{a:array<int, string|int>, b:string}',
2016-11-02 07:29:00 +01:00
(string) Type::parseString('array{a:array<int, string|int>, b:string}')
);
}
}