File tree 2 files changed +40
-14
lines changed
2 files changed +40
-14
lines changed Original file line number Diff line number Diff line change @@ -339,25 +339,19 @@ def relative_selector_list
339
339
def complex_selector
340
340
left = compound_selector
341
341
342
- loop do
343
- if ( combinator = maybe { combinator } )
344
- ComplexSelector . new ( left : left , combinator : combinator , right : compound_selector )
345
- elsif ( right = maybe { compound_selector } )
346
- ComplexSelector . new ( left : left , combinator : nil , right : right )
347
- else
348
- break
349
- end
342
+ if ( c = maybe { combinator } )
343
+ ComplexSelector . new ( left : left , combinator : c , right : complex_selector )
344
+ elsif ( right = maybe { complex_selector } )
345
+ ComplexSelector . new ( left : left , combinator : nil , right : right )
346
+ else
347
+ left
350
348
end
351
-
352
- left
353
349
end
354
350
355
351
# <relative-selector> = <combinator>? <complex-selector>
356
352
def relative_selector
357
- combinator = maybe { combinator }
358
-
359
- if combinator
360
- RelativeSelector . new ( combinator : combinator , complex_selector : complex_selector )
353
+ if ( c = maybe { combinator } )
354
+ RelativeSelector . new ( combinator : c , complex_selector : complex_selector )
361
355
else
362
356
complex_selector
363
357
end
Original file line number Diff line number Diff line change @@ -65,6 +65,38 @@ class SelectorsTest < Minitest::Spec
65
65
end
66
66
end
67
67
68
+ it "parses a complex selector" do
69
+ actual = parse_selectors ( "section>table" )
70
+
71
+ assert_pattern do
72
+ actual => [
73
+ Selectors ::ComplexSelector [
74
+ left : Selectors ::TypeSelector [ value : { name : { value : "section" } } ] ,
75
+ combinator : { value : { value : ">" } } ,
76
+ right : Selectors ::TypeSelector [ value : { name : { value : "table" } } ]
77
+ ]
78
+ ]
79
+ end
80
+ end
81
+
82
+ it "parses a complex selector with many selectors" do
83
+ actual = parse_selectors ( "section>table>tr" )
84
+
85
+ assert_pattern do
86
+ actual => [
87
+ Selectors ::ComplexSelector [
88
+ left : Selectors ::TypeSelector [ value : { name : { value : "section" } } ] ,
89
+ combinator : { value : { value : ">" } } ,
90
+ right : Selectors ::ComplexSelector [
91
+ left : Selectors ::TypeSelector [ value : { name : { value : "table" } } ] ,
92
+ combinator : { value : { value : ">" } } ,
93
+ right : Selectors ::TypeSelector [ value : { name : { value : "tr" } } ]
94
+ ]
95
+ ]
96
+ ]
97
+ end
98
+ end
99
+
68
100
private
69
101
70
102
def parse_selectors ( selectors )
You can’t perform that action at this time.
0 commit comments