Skip to content

Commit 71a7818

Browse files
committed
Add "InvalidTemplateArgumentException" tests
1 parent 663613b commit 71a7818

2 files changed

Lines changed: 45 additions & 5 deletions

File tree

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace TypeLang\Mapper\Tests\Exception\Definition;
6+
7+
use PHPUnit\Framework\Attributes\CoversClass;
8+
use PHPUnit\Framework\Attributes\Group;
9+
use PHPUnit\Framework\Attributes\TestDox;
10+
use TypeLang\Mapper\Exception\Definition\Template\InvalidTemplateArgumentException;
11+
use TypeLang\Parser\Node\Stmt\NamedTypeNode;
12+
use TypeLang\Parser\Node\Stmt\Template\TemplateArgumentNode;
13+
14+
#[Group('exception')]
15+
#[CoversClass(InvalidTemplateArgumentException::class)]
16+
final class InvalidTemplateArgumentTest extends DefinitionExceptionTestCase
17+
{
18+
#[TestDox('expected int<string>, passed int<T>')]
19+
public function testInvalidArgumentGiven(): void
20+
{
21+
$this->expectException(InvalidTemplateArgumentException::class);
22+
$this->expectExceptionMessage('Passed template argument #1 of type int<T> must be of type string, but T given');
23+
24+
$type = self::parse('int<T>');
25+
26+
assert($type instanceof NamedTypeNode);
27+
28+
$argument = $type->arguments?->first();
29+
assert($argument instanceof TemplateArgumentNode);
30+
31+
throw InvalidTemplateArgumentException::becauseTemplateArgumentMustBe(
32+
argument: $argument,
33+
expected: new NamedTypeNode('string'),
34+
type: $type,
35+
);
36+
}
37+
}

tests/Exception/Definition/TemplateArgumentHintsNotSupportedTest.php

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@
88
use PHPUnit\Framework\Attributes\Group;
99
use PHPUnit\Framework\Attributes\TestDox;
1010
use TypeLang\Mapper\Exception\Definition\Template\Hint\TemplateArgumentHintsNotSupportedException;
11-
use TypeLang\Mapper\Type\Parser\TypeLangParser;
1211
use TypeLang\Parser\Node\Stmt\NamedTypeNode;
1312
use TypeLang\Parser\Node\Stmt\Template\TemplateArgumentNode;
1413

@@ -25,10 +24,12 @@ public function testManyArgumentsPassedWithGenericType(): void
2524
$type = self::parse('int<out T>');
2625

2726
assert($type instanceof NamedTypeNode);
28-
assert($type->arguments->first() instanceof TemplateArgumentNode);
27+
28+
$argument = $type->arguments?->first();
29+
assert($argument instanceof TemplateArgumentNode);
2930

3031
throw TemplateArgumentHintsNotSupportedException::becauseTooManyHints(
31-
argument: $type->arguments->first(),
32+
argument: $argument,
3233
type: $type,
3334
);
3435
}
@@ -42,10 +43,12 @@ public function testManyArgumentsPassedWithBasicType(): void
4243
$type = self::parse('int<T>');
4344

4445
assert($type instanceof NamedTypeNode);
45-
assert($type->arguments->first() instanceof TemplateArgumentNode);
46+
47+
$argument = $type->arguments?->first();
48+
assert($argument instanceof TemplateArgumentNode);
4649

4750
throw TemplateArgumentHintsNotSupportedException::becauseTooManyHints(
48-
argument: $type->arguments->first(),
51+
argument: $argument,
4952
type: $type,
5053
);
5154
}

0 commit comments

Comments
 (0)