@@ -27,6 +27,15 @@ class SelectorsTest < Minitest::Spec
27
27
]
28
28
]
29
29
end
30
+
31
+ assert_pattern do
32
+ actual => [
33
+ Selectors ::CompoundSelector [
34
+ Selectors ::ClassSelector [ value : { value : "flex" } ] ,
35
+ Selectors ::ClassSelector [ value : { value : "text-xl" } ]
36
+ ]
37
+ ]
38
+ end
30
39
end
31
40
32
41
it "parses a compound selector" do
@@ -41,6 +50,15 @@ class SelectorsTest < Minitest::Spec
41
50
]
42
51
]
43
52
end
53
+
54
+ assert_pattern do
55
+ actual => [
56
+ Selectors ::CompoundSelector [
57
+ Selectors ::TypeSelector [ value : { name : { value : "div" } } ] ,
58
+ Selectors ::ClassSelector [ value : { value : "flex" } ] ,
59
+ ]
60
+ ]
61
+ end
44
62
end
45
63
46
64
it "parses a compound selector with a pseudo-element" do
@@ -54,9 +72,7 @@ class SelectorsTest < Minitest::Spec
54
72
pseudo_elements : [
55
73
[
56
74
Selectors ::PseudoElementSelector [
57
- Selectors ::PseudoClassSelector [
58
- value : { value : "first-line" }
59
- ]
75
+ value : { value : { value : "first-line" } }
60
76
] ,
61
77
[ ]
62
78
]
@@ -66,6 +82,51 @@ class SelectorsTest < Minitest::Spec
66
82
end
67
83
end
68
84
85
+ it "parses a compound selector with a pseudo-class" do
86
+ actual = parse_selectors ( "div.flex:hover" )
87
+
88
+ assert_pattern do
89
+ actual => [
90
+ Selectors ::CompoundSelector [
91
+ type : { value : { name : { value : "div" } } } ,
92
+ subclasses : [
93
+ Selectors ::ClassSelector [ value : { value : "flex" } ] ,
94
+ Selectors ::PseudoClassSelector [ value : { value : "hover" } ] ,
95
+ ] ,
96
+ ]
97
+ ]
98
+ end
99
+ end
100
+
101
+ it "parses a compound selector with pseudo-elements and pseudo-classes" do
102
+ actual = parse_selectors ( "div.flex:hover::first-line:last-child:active::first-letter" )
103
+
104
+ assert_pattern do
105
+ actual => [
106
+ Selectors ::CompoundSelector [
107
+ type : { value : { name : { value : "div" } } } ,
108
+ subclasses : [
109
+ Selectors ::ClassSelector [ value : { value : "flex" } ] ,
110
+ Selectors ::PseudoClassSelector [ value : { value : "hover" } ] ,
111
+ ] ,
112
+ pseudo_elements : [
113
+ [
114
+ Selectors ::PseudoElementSelector [ value : { value : { value : "first-line" } } ] ,
115
+ [
116
+ Selectors ::PseudoClassSelector [ value : { value : "last-child" } ] ,
117
+ Selectors ::PseudoClassSelector [ value : { value : "active" } ] ,
118
+ ] ,
119
+ ] ,
120
+ [
121
+ Selectors ::PseudoElementSelector [ value : { value : { value : "first-letter" } } ] ,
122
+ [ ] ,
123
+ ]
124
+ ]
125
+ ]
126
+ ]
127
+ end
128
+ end
129
+
69
130
it "parses a complex selector" do
70
131
actual = parse_selectors ( "section>table" )
71
132
@@ -151,8 +212,43 @@ class SelectorsTest < Minitest::Spec
151
212
end
152
213
153
214
describe "formatting" do
154
- it "formats complex selectors" do
155
- assert_selector_format ( ".outer section.foo>table.bar tr" , ".outer section.foo > table.bar tr" )
215
+ describe Selectors ::CompoundSelector do
216
+ it "with an id selector" do
217
+ assert_selector_format (
218
+ "div#foo" ,
219
+ "div#foo" ,
220
+ )
221
+ end
222
+
223
+ it "with a pseudo-class selector" do
224
+ assert_selector_format (
225
+ "div:hover" ,
226
+ "div:hover" ,
227
+ )
228
+ end
229
+
230
+ it "with class selectors" do
231
+ assert_selector_format (
232
+ "div.flex.text-xl" ,
233
+ "div.flex.text-xl" ,
234
+ )
235
+ end
236
+
237
+ it "with pseudo-elements" do
238
+ assert_selector_format (
239
+ "div.flex:hover::first-line:last-child:active::first-letter" ,
240
+ "div.flex:hover::first-line:last-child:active::first-letter" ,
241
+ )
242
+ end
243
+ end
244
+
245
+ describe Selectors ::ComplexSelector do
246
+ it "with whitespace" do
247
+ assert_selector_format (
248
+ ".outer section.foo>table.bar tr" ,
249
+ ".outer section.foo > table.bar tr" ,
250
+ )
251
+ end
156
252
end
157
253
158
254
private
@@ -162,7 +258,7 @@ def assert_selector_format(selectors, expected)
162
258
163
259
io = StringIO . new
164
260
selectors . each do |selector |
165
- selector . format ( ::PrettyPrint . new ( io ) )
261
+ selector . format ( ::PP . new ( io ) )
166
262
assert_equal ( expected , io . string )
167
263
end
168
264
end
0 commit comments