Skip to content

Commit

Permalink
fix: interfaces, traits, enums and final classes can not be abstract (#…
Browse files Browse the repository at this point in the history
  • Loading branch information
sebastianstucke87 committed May 8, 2024
1 parent b1f0560 commit f55131c
Show file tree
Hide file tree
Showing 2 changed files with 86 additions and 1 deletion.
3 changes: 2 additions & 1 deletion src/Expression/ForClasses/IsAbstract.php
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,8 @@ public function describe(ClassDescription $theClass, string $because): Descripti

public function evaluate(ClassDescription $theClass, Violations $violations, string $because): void
{
if ($theClass->isAbstract()) {
if ($theClass->isAbstract() || $theClass->isInterface() || $theClass->isTrait() || $theClass->isEnum()
|| $theClass->isFinal()) {
return;
}

Expand Down
84 changes: 84 additions & 0 deletions tests/Unit/Expressions/ForClasses/IsAbstractTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -57,4 +57,88 @@ public function test_it_should_return_true_if_is_abstract(): void
$isAbstract->evaluate($classDescription, $violations, $because);
self::assertEquals(0, $violations->count());
}

public function test_interfaces_can_not_be_abstract_and_should_be_ignored(): void
{
$isAbstract = new IsAbstract();
$classDescription = new ClassDescription(
FullyQualifiedClassName::fromString('HappyIsland'),
[],
[],
null,
false,
false,
false,
true,
false,
false
);
$because = 'we want to add this rule for our software';
$violations = new Violations();
$isAbstract->evaluate($classDescription, $violations, $because);
self::assertEquals(0, $violations->count());
}

public function test_traits_can_not_be_abstract_and_should_be_ignored(): void
{
$isAbstract = new IsAbstract();
$classDescription = new ClassDescription(
FullyQualifiedClassName::fromString('HappyIsland'),
[],
[],
null,
false,
false,
false,
false,
true,
false
);
$because = 'we want to add this rule for our software';
$violations = new Violations();
$isAbstract->evaluate($classDescription, $violations, $because);
self::assertEquals(0, $violations->count());
}

public function test_enums_can_not_be_abstract_and_should_be_ignored(): void
{
$isAbstract = new IsAbstract();
$classDescription = new ClassDescription(
FullyQualifiedClassName::fromString('HappyIsland'),
[],
[],
null,
false,
false,
false,
false,
false,
true
);
$because = 'we want to add this rule for our software';
$violations = new Violations();
$isAbstract->evaluate($classDescription, $violations, $because);
self::assertEquals(0, $violations->count());
}

public function test_final_classes_can_not_be_abstract_and_should_be_ignored(): void
{
$isAbstract = new IsAbstract();
$classDescription = new ClassDescription(
FullyQualifiedClassName::fromString('HappyIsland'),
[],
[],
null,
true,
false,
false,
false,
false,
false
);
$because = 'we want to add this rule for our software';
$violations = new Violations();
$isAbstract->evaluate($classDescription, $violations, $because);
self::assertEquals(0, $violations->count());
}
}

0 comments on commit f55131c

Please sign in to comment.