Skip to content

Commit 63f2235

Browse files
committed
test: start ad-hoc test coverage for CSS selectors
1 parent 24042c2 commit 63f2235

File tree

1 file changed

+76
-0
lines changed

1 file changed

+76
-0
lines changed

test/selectors_test.rb

+76
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
# frozen_string_literal: true
2+
3+
require "test_helper"
4+
5+
module SyntaxTree
6+
module CSS
7+
class SelectorsTest < Minitest::Spec
8+
it "parses a simple class selector" do
9+
actual = parse_selectors(".flex")
10+
11+
assert_pattern do
12+
actual => [Selectors::ClassSelector[value: { value: "flex" }]]
13+
end
14+
end
15+
16+
it "parses a compound class selector" do
17+
actual = parse_selectors(".flex.text-xl")
18+
19+
assert_pattern do
20+
actual => [
21+
Selectors::CompoundSelector[
22+
subclasses: [
23+
Selectors::ClassSelector[value: { value: "flex" }],
24+
Selectors::ClassSelector[value: { value: "text-xl" }]
25+
]
26+
]
27+
]
28+
end
29+
end
30+
31+
it "parses a compound selector" do
32+
actual = parse_selectors("div.flex")
33+
34+
assert_pattern do
35+
actual => [
36+
Selectors::CompoundSelector[
37+
type: { value: { name: { value: "div" } } },
38+
subclasses: [Selectors::ClassSelector[value: { value: "flex" }]],
39+
pseudo_elements: []
40+
]
41+
]
42+
end
43+
end
44+
45+
it "parses a compound selector with a pseudo-element" do
46+
actual = parse_selectors("div.flex::first-line")
47+
48+
assert_pattern do
49+
actual => [
50+
Selectors::CompoundSelector[
51+
type: { value: { name: { value: "div" } } },
52+
subclasses: [Selectors::ClassSelector[value: { value: "flex" }]],
53+
pseudo_elements: [
54+
[
55+
Selectors::PseudoElementSelector[
56+
Selectors::PseudoClassSelector[
57+
value: { value: "first-line" }
58+
]
59+
],
60+
[]
61+
]
62+
]
63+
]
64+
]
65+
end
66+
end
67+
68+
private
69+
70+
def parse_selectors(selectors)
71+
css = selectors + " {}"
72+
Parser.new(css).parse.rules.first.selectors
73+
end
74+
end
75+
end
76+
end

0 commit comments

Comments
 (0)