Left: | ||
Right: |
OLD | NEW |
---|---|
(Empty) | |
1 /* | |
2 * This file is part of Adblock Plus <https://adblockplus.org/>, | |
3 * Copyright (C) 2006-present eyeo GmbH | |
4 * | |
5 * Adblock Plus is free software: you can redistribute it and/or modify | |
6 * it under the terms of the GNU General Public License version 3 as | |
7 * published by the Free Software Foundation. | |
8 * | |
9 * Adblock Plus is distributed in the hope that it will be useful, | |
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
12 * GNU General Public License for more details. | |
13 * | |
14 * You should have received a copy of the GNU General Public License | |
15 * along with Adblock Plus. If not, see <http://www.gnu.org/licenses/>. | |
16 */ | |
17 | |
18 "use strict"; | |
19 | |
20 const {createSandbox} = require("./_common"); | |
21 | |
22 let qualifySelector = null; | |
23 | |
24 exports.setUp = function(callback) | |
25 { | |
26 let sandboxedRequire = createSandbox(); | |
27 ( | |
28 {qualifySelector} = sandboxedRequire("../lib/common") | |
29 ); | |
30 callback(); | |
31 }; | |
32 | |
33 exports.testQualifySelector = function(test) | |
34 { | |
35 // Simple selectors. | |
36 test.equal(qualifySelector("#foo", "div"), "div#foo"); | |
37 test.equal(qualifySelector(".foo", "div"), "div.foo"); | |
38 test.equal(qualifySelector("div", "#foo"), "div#foo"); | |
39 test.equal(qualifySelector("div", ".foo"), "div.foo"); | |
40 test.equal(qualifySelector("div#bar", ".foo"), "div.foo#bar"); | |
41 test.equal(qualifySelector("div.bar", "#foo"), "div#foo.bar"); | |
hub
2018/04/26 03:31:16
I'm not sure I understand why the order is differe
Manish Jethani
2018/05/10 02:20:44
The order is different because the code doesn't ca
hub
2018/05/14 19:35:12
Acknowledged.
| |
42 | |
43 // Compound selectors. | |
44 test.equal(qualifySelector("body #foo", "div"), "body div#foo"); | |
45 test.equal(qualifySelector("body .foo", "div"), "body div.foo"); | |
46 test.equal(qualifySelector("body div", "#foo"), "body div#foo"); | |
47 test.equal(qualifySelector("body div", ".foo"), "body div.foo"); | |
48 test.equal(qualifySelector("body div#bar", ".foo"), "body div.foo#bar"); | |
49 test.equal(qualifySelector("body div.bar", "#foo"), "body div#foo.bar"); | |
50 | |
51 // Compound selectors with pseudo-class with parentheses. | |
52 test.equal(qualifySelector("body #foo:nth-child(1)", "div"), | |
53 "body div#foo:nth-child(1)"); | |
54 test.equal(qualifySelector("body .foo:nth-child(1)", "div"), | |
55 "body div.foo:nth-child(1)"); | |
56 test.equal(qualifySelector("body div:nth-child(1)", "#foo"), | |
57 "body div#foo:nth-child(1)"); | |
58 test.equal(qualifySelector("body div:nth-child(1)", ".foo"), | |
59 "body div.foo:nth-child(1)"); | |
60 test.equal(qualifySelector("body div#bar:nth-child(1)", ".foo"), | |
61 "body div.foo#bar:nth-child(1)"); | |
62 test.equal(qualifySelector("body div.bar:nth-child(1)", "#foo"), | |
63 "body div#foo.bar:nth-child(1)"); | |
64 | |
65 // Compound selectors with pseudo-class with parentheses containing extra | |
66 // whitespace. | |
67 test.equal(qualifySelector("body #foo:nth-child( 1 )", "div"), | |
68 "body div#foo:nth-child( 1 )"); | |
69 test.equal(qualifySelector("body .foo:nth-child( 1 )", "div"), | |
70 "body div.foo:nth-child( 1 )"); | |
71 test.equal(qualifySelector("body div:nth-child( 1 )", "#foo"), | |
72 "body div#foo:nth-child( 1 )"); | |
73 test.equal(qualifySelector("body div:nth-child( 1 )", ".foo"), | |
74 "body div.foo:nth-child( 1 )"); | |
75 test.equal(qualifySelector("body div#bar:nth-child( 1 )", ".foo"), | |
76 "body div.foo#bar:nth-child( 1 )"); | |
77 test.equal(qualifySelector("body div.bar:nth-child( 1 )", "#foo"), | |
78 "body div#foo.bar:nth-child( 1 )"); | |
79 | |
80 // Compound selectors with child combinator and pseudo-class with | |
81 // parentheses. | |
82 test.equal(qualifySelector("body > #foo:nth-child(1)", "div"), | |
83 "body > div#foo:nth-child(1)"); | |
84 test.equal(qualifySelector("body > .foo:nth-child(1)", "div"), | |
85 "body > div.foo:nth-child(1)"); | |
86 test.equal(qualifySelector("body > div:nth-child(1)", "#foo"), | |
87 "body > div#foo:nth-child(1)"); | |
88 test.equal(qualifySelector("body > div:nth-child(1)", ".foo"), | |
89 "body > div.foo:nth-child(1)"); | |
90 test.equal(qualifySelector("body > div#bar:nth-child(1)", ".foo"), | |
91 "body > div.foo#bar:nth-child(1)"); | |
92 test.equal(qualifySelector("body > div.bar:nth-child(1)", "#foo"), | |
93 "body > div#foo.bar:nth-child(1)"); | |
94 | |
95 // Compound selectors with child combinator surrounded by no whitespace and | |
96 // pseudo-class with parentheses. | |
97 test.equal(qualifySelector("body>#foo:nth-child(1)", "div"), | |
98 "body>div#foo:nth-child(1)"); | |
99 test.equal(qualifySelector("body>.foo:nth-child(1)", "div"), | |
100 "body>div.foo:nth-child(1)"); | |
101 test.equal(qualifySelector("body>div:nth-child(1)", "#foo"), | |
102 "body>div#foo:nth-child(1)"); | |
103 test.equal(qualifySelector("body>div:nth-child(1)", ".foo"), | |
104 "body>div.foo:nth-child(1)"); | |
105 test.equal(qualifySelector("body>div#bar:nth-child(1)", ".foo"), | |
106 "body>div.foo#bar:nth-child(1)"); | |
107 test.equal(qualifySelector("body>div.bar:nth-child(1)", "#foo"), | |
108 "body>div#foo.bar:nth-child(1)"); | |
109 | |
110 // Compound selectors with adjacent sibling combinator and pseudo-class with | |
111 // parentheses. | |
112 test.equal(qualifySelector("article + #foo:nth-child(1)", "div"), | |
113 "article + div#foo:nth-child(1)"); | |
114 test.equal(qualifySelector("article + .foo:nth-child(1)", "div"), | |
115 "article + div.foo:nth-child(1)"); | |
116 test.equal(qualifySelector("article + div:nth-child(1)", "#foo"), | |
117 "article + div#foo:nth-child(1)"); | |
118 test.equal(qualifySelector("article + div:nth-child(1)", ".foo"), | |
119 "article + div.foo:nth-child(1)"); | |
120 test.equal(qualifySelector("article + div#bar:nth-child(1)", ".foo"), | |
121 "article + div.foo#bar:nth-child(1)"); | |
122 test.equal(qualifySelector("article + div.bar:nth-child(1)", "#foo"), | |
123 "article + div#foo.bar:nth-child(1)"); | |
124 | |
125 // Compound selectors with general sibling combinator and pseudo-class with | |
126 // parentheses. | |
127 test.equal(qualifySelector("article ~ #foo:nth-child(1)", "div"), | |
128 "article ~ div#foo:nth-child(1)"); | |
129 test.equal(qualifySelector("article ~ .foo:nth-child(1)", "div"), | |
130 "article ~ div.foo:nth-child(1)"); | |
131 test.equal(qualifySelector("article ~ div:nth-child(1)", "#foo"), | |
132 "article ~ div#foo:nth-child(1)"); | |
133 test.equal(qualifySelector("article ~ div:nth-child(1)", ".foo"), | |
134 "article ~ div.foo:nth-child(1)"); | |
135 test.equal(qualifySelector("article ~ div#bar:nth-child(1)", ".foo"), | |
136 "article ~ div.foo#bar:nth-child(1)"); | |
137 test.equal(qualifySelector("article ~ div.bar:nth-child(1)", "#foo"), | |
138 "article ~ div#foo.bar:nth-child(1)"); | |
139 | |
140 // Compound selectors with child combinator and pseudo-element. | |
141 test.equal(qualifySelector("body > #foo::first-child", "div"), | |
142 "body > div#foo::first-child"); | |
143 test.equal(qualifySelector("body > .foo::first-child", "div"), | |
144 "body > div.foo::first-child"); | |
145 test.equal(qualifySelector("body > div::first-child", "#foo"), | |
146 "body > div#foo::first-child"); | |
147 test.equal(qualifySelector("body > div::first-child", ".foo"), | |
148 "body > div.foo::first-child"); | |
149 test.equal(qualifySelector("body > div#bar::first-child", ".foo"), | |
150 "body > div.foo#bar::first-child"); | |
151 test.equal(qualifySelector("body > div.bar::first-child", "#foo"), | |
152 "body > div#foo.bar::first-child"); | |
153 | |
154 // Compound selectors with attribute selector. | |
155 test.equal(qualifySelector("body #foo[style='display: block']", "div"), | |
156 "body div#foo[style='display: block']"); | |
157 test.equal(qualifySelector("body .foo[style='display: block']", "div"), | |
158 "body div.foo[style='display: block']"); | |
159 test.equal(qualifySelector("body div[style='display: block']", "#foo"), | |
160 "body div#foo[style='display: block']"); | |
161 test.equal(qualifySelector("body div[style='display: block']", ".foo"), | |
162 "body div.foo[style='display: block']"); | |
163 test.equal(qualifySelector("body div#bar[style='display: block']", ".foo"), | |
164 "body div.foo#bar[style='display: block']"); | |
165 test.equal(qualifySelector("body div.bar[style='display: block']", "#foo"), | |
166 "body div#foo.bar[style='display: block']"); | |
167 | |
168 // Compound selectors with unqualified attribute selector. | |
169 test.equal(qualifySelector("body [style='display: block']", "div"), | |
170 "body div[style='display: block']"); | |
171 test.equal(qualifySelector("body [style='display: block']", "#foo"), | |
172 "body #foo[style='display: block']"); | |
173 test.equal(qualifySelector("body [style='display: block']", ".foo"), | |
174 "body .foo[style='display: block']"); | |
175 | |
176 // Multiple selectors. | |
177 test.equal(qualifySelector("#foo, #bar", "div"), "div#foo, div#bar"); | |
178 test.equal(qualifySelector(".foo, .bar", "div"), "div.foo, div.bar"); | |
179 test.equal(qualifySelector("div, .bar", "#foo"), "div#foo, #foo.bar"); | |
180 test.equal(qualifySelector("div, #bar", ".foo"), "div.foo, .foo#bar"); | |
181 | |
182 // Compound selector with class selector containing Unicode composite | |
183 // character. | |
184 test.equal(qualifySelector("body .\ud83d\ude42", "img"), | |
185 "body img.\ud83d\ude42"); | |
186 | |
187 test.done(); | |
188 }; | |
OLD | NEW |