Skip to content

Commit

Permalink
add test case for test parser
Browse files Browse the repository at this point in the history
  • Loading branch information
annadamm-check24 committed Jun 13, 2024
1 parent e41a372 commit 5db2e8e
Show file tree
Hide file tree
Showing 2 changed files with 83 additions and 0 deletions.
52 changes: 52 additions & 0 deletions tests/integration/test/TestParser/ParsesTestsTest.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
<?php

declare(strict_types=1);

namespace Tests\PHPat\integration\test\TestParser;

use PHPat\Selector\Selector;
use PHPat\Test\PHPat;
use PHPat\Test\Rule;
use PHPat\Test\RuleValidatorInterface;
use PHPat\Test\TestExtractorInterface;
use PHPat\Test\TestParser;
use PHPUnit\Framework\TestCase;

final class ParsesTestsTest extends TestCase
{
public function testClassCollectsMultipleRulesFromFunction(): void
{
$testParser = new TestParser(
new class() implements TestExtractorInterface {
public function __invoke(): iterable
{
yield new \ReflectionClass(TestClass::class);
}
},
new class implements RuleValidatorInterface {
public function validate(Rule $rule): void
{
}
},
);

$rule1 = PHPat::rule()->classes(Selector::classname('1'))();
$rule1->ruleName = TestClass::class . ':test_rules_from_iterator' . ':one';

$rule2 = PHPat::rule()->classes(Selector::classname('2'))();
$rule2->ruleName = TestClass::class . ':test_rules_from_iterator' . ':two';

$rule3 = PHPat::rule()->classes(Selector::classname('3'))();
$rule3->ruleName = TestClass::class . ':test_rule';

$rule4 = PHPat::rule()->classes(Selector::classname('4'))();
$rule4->ruleName = TestClass::class . ':test_rule_from_attribute';

self::assertEquals([
$rule1,
$rule2,
$rule3,
$rule4,
], ($testParser)());
}
}
31 changes: 31 additions & 0 deletions tests/integration/test/TestParser/TestClass.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
<?php

declare(strict_types=1);

namespace Tests\PHPat\integration\test\TestParser;

use PHPat\Selector\Selector;
use PHPat\Test\Attributes\TestRule;
use PHPat\Test\PHPat;
use PHPat\Test\Builder\Rule;

final class TestClass
{
/** @return iterable<Rule> */
public function test_rules_from_iterator(): iterable
{
yield 'one' => PHPat::rule()->classes(Selector::classname('1'));
yield 'two' => PHPat::rule()->classes(Selector::classname('2'));
}

public function test_rule(): Rule
{
return PHPat::rule()->classes(Selector::classname('3'));
}

#[TestRule]
public function test_rule_from_attribute(): Rule
{
return PHPat::rule()->classes(Selector::classname('4'));
}
}

0 comments on commit 5db2e8e

Please sign in to comment.