From 31abb691b3ba5593c45cca8ecd0e14163a2911db Mon Sep 17 00:00:00 2001 From: Oliver Klee Date: Thu, 27 Feb 2025 12:06:22 +0100 Subject: [PATCH] [TASK] Make `Selector` a `Renderable` This is required to be able to drop `__toString` for this class. --- CHANGELOG.md | 1 + src/Property/Selector.php | 10 +++- tests/Functional/Property/SelectorTest.php | 59 ++++++++++++++++++++++ tests/Unit/Property/SelectorTest.php | 11 ++++ 4 files changed, 80 insertions(+), 1 deletion(-) create mode 100644 tests/Functional/Property/SelectorTest.php diff --git a/CHANGELOG.md b/CHANGELOG.md index 4bbee72e..37f76d9d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -21,6 +21,7 @@ Please also have a look at our ### Changed +- Make `Selector` a `Renderable` (#1017) - Mark `Selector::isValid()` as `@internal` (#1037) - Mark parsing-related methods of most CSS elements as `@internal` (#908) - Mark `OutputFormat::nextLevel()` as `@internal` (#901) diff --git a/src/Property/Selector.php b/src/Property/Selector.php index 9f9a22dd..0f68df5f 100644 --- a/src/Property/Selector.php +++ b/src/Property/Selector.php @@ -4,11 +4,14 @@ namespace Sabberworm\CSS\Property; +use Sabberworm\CSS\OutputFormat; +use Sabberworm\CSS\Renderable; + /** * Class representing a single CSS selector. Selectors have to be split by the comma prior to being passed into this * class. */ -class Selector +class Selector implements Renderable { /** * regexp for specificity calculations @@ -139,4 +142,9 @@ public function getSpecificity() } return $this->specificity; } + + public function render(OutputFormat $outputFormat): string + { + return $this->getSelector(); + } } diff --git a/tests/Functional/Property/SelectorTest.php b/tests/Functional/Property/SelectorTest.php new file mode 100644 index 00000000..397dbc72 --- /dev/null +++ b/tests/Functional/Property/SelectorTest.php @@ -0,0 +1,59 @@ +render(new OutputFormat())); + } + + /** + * @test + */ + public function renderWithDefaultOutputFormatRendersSelectorPassedToConstructor(): void + { + $pattern = 'a'; + $subject = new Selector($pattern); + + self::assertSame($pattern, $subject->render(OutputFormat::create())); + } + + /** + * @test + */ + public function renderWithCompactOutputFormatRendersSelectorPassedToConstructor(): void + { + $pattern = 'a'; + $subject = new Selector($pattern); + + self::assertSame($pattern, $subject->render(OutputFormat::createCompact())); + } + + /** + * @test + */ + public function renderWithPrettyOutputFormatRendersSelectorPassedToConstructor(): void + { + $pattern = 'a'; + $subject = new Selector($pattern); + + self::assertSame($pattern, $subject->render(OutputFormat::createPretty())); + } +} diff --git a/tests/Unit/Property/SelectorTest.php b/tests/Unit/Property/SelectorTest.php index 0d030d94..de888fd5 100644 --- a/tests/Unit/Property/SelectorTest.php +++ b/tests/Unit/Property/SelectorTest.php @@ -6,12 +6,23 @@ use PHPUnit\Framework\TestCase; use Sabberworm\CSS\Property\Selector; +use Sabberworm\CSS\Renderable; /** * @covers \Sabberworm\CSS\Property\Selector */ final class SelectorTest extends TestCase { + /** + * @test + */ + public function implementsRenderable(): void + { + $subject = new Selector('a'); + + self::assertInstanceOf(Renderable::class, $subject); + } + /** * @test */