Skip to content

Commit 5e1dd20

Browse files
committed
WIP: TASK add unit tests for Enum Types
1 parent eb5cf4e commit 5e1dd20

File tree

3 files changed

+101
-2
lines changed

3 files changed

+101
-2
lines changed

test/Unit/TypeSystem/Resolver/Access/AccessTypeResolverTest.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ public function invalidAccessExamples(): iterable
5151

5252
yield "access enum member on non static enum instance" => [
5353
'someEnumValue.A',
54-
"@TODO Error: Cannot access on type PackageFactory\ComponentEngine\TypeSystem\Type\EnumType\EnumType"
54+
"@TODO Error: Cannot access on type PackageFactory\ComponentEngine\TypeSystem\Type\EnumType\EnumInstanceType"
5555
];
5656
}
5757

test/Unit/TypeSystem/Type/EnumType/EnumInstanceTypeTest.php

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
use PackageFactory\ComponentEngine\Module\ModuleId;
2626
use PackageFactory\ComponentEngine\Parser\Ast\EnumDeclarationNode;
2727
use PackageFactory\ComponentEngine\TypeSystem\Type\EnumType\EnumInstanceType;
28+
use PackageFactory\ComponentEngine\TypeSystem\Type\EnumType\EnumStaticType;
2829
use PHPUnit\Framework\TestCase;
2930

3031
final class EnumInstanceTypeTest extends TestCase
@@ -62,4 +63,43 @@ public function providesNameOfTheEnum(): void
6263

6364
$this->assertEquals('SomeEnum', $enumType->enumName);
6465
}
66+
67+
/**
68+
* @test
69+
*/
70+
public function providesMemberNames(): void
71+
{
72+
$enumStaticType = EnumStaticType::fromModuleIdAndDeclaration(
73+
ModuleId::fromString("module-a"),
74+
EnumDeclarationNode::fromString(
75+
'enum SomeEnum { A B C }'
76+
)
77+
);
78+
79+
$this->assertSame(["A", "B", "C"], $enumStaticType->getMemberNames());
80+
}
81+
82+
/**
83+
* @test
84+
* @return void
85+
*/
86+
public function canBeComparedToOther(): void
87+
{
88+
$enumDeclarationNode = EnumDeclarationNode::fromString(
89+
'enum SomeEnum { A }'
90+
);
91+
$enumInstanceType = EnumInstanceType::fromModuleIdAndDeclaration(
92+
ModuleId::fromString("module-a"),
93+
$enumDeclarationNode
94+
);
95+
96+
$this->assertTrue($enumInstanceType->is($enumInstanceType));
97+
98+
$enumStaticType = EnumStaticType::fromModuleIdAndDeclaration(
99+
ModuleId::fromString("module-a"),
100+
$enumDeclarationNode
101+
);
102+
103+
$this->assertTrue($enumInstanceType->is($enumStaticType));
104+
}
65105
}

test/Unit/TypeSystem/Type/EnumType/EnumStaticTypeTest.php

Lines changed: 60 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,10 +20,11 @@
2020

2121
declare(strict_types=1);
2222

23-
namespace PackageFactory\ComponentEngine\Test\Unit\TypeSystem\Type\EnumStaticType;
23+
namespace PackageFactory\ComponentEngine\Test\Unit\TypeSystem\Type\EnumType;
2424

2525
use PackageFactory\ComponentEngine\Module\ModuleId;
2626
use PackageFactory\ComponentEngine\Parser\Ast\EnumDeclarationNode;
27+
use PackageFactory\ComponentEngine\TypeSystem\Type\EnumType\EnumInstanceType;
2728
use PackageFactory\ComponentEngine\TypeSystem\Type\EnumType\EnumStaticType;
2829
use PHPUnit\Framework\TestCase;
2930

@@ -62,4 +63,62 @@ public function providesNameOfTheEnum(): void
6263

6364
$this->assertEquals('SomeEnum', $enumStaticType->enumName);
6465
}
66+
67+
/**
68+
* @test
69+
*/
70+
public function providesMemberNames(): void
71+
{
72+
$enumStaticType = EnumStaticType::fromModuleIdAndDeclaration(
73+
ModuleId::fromString("module-a"),
74+
EnumDeclarationNode::fromString(
75+
'enum SomeEnum { A B C }'
76+
)
77+
);
78+
79+
$this->assertSame(["A", "B", "C"], $enumStaticType->getMemberNames());
80+
}
81+
82+
/**
83+
* @test
84+
* @return void
85+
*/
86+
public function canBeTransformedIntoInstanceType(): void
87+
{
88+
$enumDeclarationNode = EnumDeclarationNode::fromString(
89+
'enum SomeEnum { A }'
90+
);
91+
$enumStaticType = EnumStaticType::fromModuleIdAndDeclaration(
92+
ModuleId::fromString("module-a"),
93+
$enumDeclarationNode
94+
);
95+
96+
$enumInstanceType = $enumStaticType->toEnumInstanceType();
97+
98+
$this->assertInstanceOf(EnumInstanceType::class, $enumInstanceType);
99+
}
100+
101+
/**
102+
* @test
103+
* @return void
104+
*/
105+
public function canBeComparedToOther(): void
106+
{
107+
$enumDeclarationNode = EnumDeclarationNode::fromString(
108+
'enum SomeEnum { A }'
109+
);
110+
$enumStaticType = EnumStaticType::fromModuleIdAndDeclaration(
111+
ModuleId::fromString("module-a"),
112+
$enumDeclarationNode
113+
);
114+
115+
$this->assertTrue($enumStaticType->is($enumStaticType));
116+
117+
$enumInstanceType = EnumInstanceType::fromModuleIdAndDeclaration(
118+
ModuleId::fromString("module-a"),
119+
$enumDeclarationNode
120+
);
121+
122+
$this->assertTrue($enumStaticType->is($enumInstanceType));
123+
}
65124
}

0 commit comments

Comments
 (0)