Skip to content

Commit b6d0b70

Browse files
authored
[TASK] Make Selector a Renderable (#1017)
This is required to be able to drop `__toString` for this class.
1 parent 7ef82db commit b6d0b70

File tree

4 files changed

+80
-1
lines changed

4 files changed

+80
-1
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ Please also have a look at our
2121

2222
### Changed
2323

24+
- Make `Selector` a `Renderable` (#1017)
2425
- Mark `Selector::isValid()` as `@internal` (#1037)
2526
- Mark parsing-related methods of most CSS elements as `@internal` (#908)
2627
- Mark `OutputFormat::nextLevel()` as `@internal` (#901)

src/Property/Selector.php

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,14 @@
44

55
namespace Sabberworm\CSS\Property;
66

7+
use Sabberworm\CSS\OutputFormat;
8+
use Sabberworm\CSS\Renderable;
9+
710
/**
811
* Class representing a single CSS selector. Selectors have to be split by the comma prior to being passed into this
912
* class.
1013
*/
11-
class Selector
14+
class Selector implements Renderable
1215
{
1316
/**
1417
* regexp for specificity calculations
@@ -139,4 +142,9 @@ public function getSpecificity()
139142
}
140143
return $this->specificity;
141144
}
145+
146+
public function render(OutputFormat $outputFormat): string
147+
{
148+
return $this->getSelector();
149+
}
142150
}
Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace Sabberworm\CSS\Tests\Functional\Selector;
6+
7+
use PHPUnit\Framework\TestCase;
8+
use Sabberworm\CSS\OutputFormat;
9+
use Sabberworm\CSS\Property\Selector;
10+
11+
/**
12+
* @covers \Sabberworm\CSS\Property\Selector
13+
*/
14+
final class SelectorTest extends TestCase
15+
{
16+
/**
17+
* @test
18+
*/
19+
public function renderWithVirginOutputFormatRendersSelectorPassedToConstructor(): void
20+
{
21+
$pattern = 'a';
22+
$subject = new Selector($pattern);
23+
24+
self::assertSame($pattern, $subject->render(new OutputFormat()));
25+
}
26+
27+
/**
28+
* @test
29+
*/
30+
public function renderWithDefaultOutputFormatRendersSelectorPassedToConstructor(): void
31+
{
32+
$pattern = 'a';
33+
$subject = new Selector($pattern);
34+
35+
self::assertSame($pattern, $subject->render(OutputFormat::create()));
36+
}
37+
38+
/**
39+
* @test
40+
*/
41+
public function renderWithCompactOutputFormatRendersSelectorPassedToConstructor(): void
42+
{
43+
$pattern = 'a';
44+
$subject = new Selector($pattern);
45+
46+
self::assertSame($pattern, $subject->render(OutputFormat::createCompact()));
47+
}
48+
49+
/**
50+
* @test
51+
*/
52+
public function renderWithPrettyOutputFormatRendersSelectorPassedToConstructor(): void
53+
{
54+
$pattern = 'a';
55+
$subject = new Selector($pattern);
56+
57+
self::assertSame($pattern, $subject->render(OutputFormat::createPretty()));
58+
}
59+
}

tests/Unit/Property/SelectorTest.php

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,23 @@
66

77
use PHPUnit\Framework\TestCase;
88
use Sabberworm\CSS\Property\Selector;
9+
use Sabberworm\CSS\Renderable;
910

1011
/**
1112
* @covers \Sabberworm\CSS\Property\Selector
1213
*/
1314
final class SelectorTest extends TestCase
1415
{
16+
/**
17+
* @test
18+
*/
19+
public function implementsRenderable(): void
20+
{
21+
$subject = new Selector('a');
22+
23+
self::assertInstanceOf(Renderable::class, $subject);
24+
}
25+
1526
/**
1627
* @test
1728
*/

0 commit comments

Comments
 (0)