1 | "use strict";
|
---|
2 |
|
---|
3 | var _process = _interopRequireDefault(require("process"));
|
---|
4 |
|
---|
5 | var _attribute = _interopRequireDefault(require("../selectors/attribute"));
|
---|
6 |
|
---|
7 | var _helpers = require("./util/helpers");
|
---|
8 |
|
---|
9 | function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
|
---|
10 |
|
---|
11 | _process["default"].throwDeprecation = true;
|
---|
12 | (0, _helpers.test)('attribute selector', '[href]', function (t, tree) {
|
---|
13 | t.deepEqual(tree.nodes[0].nodes[0].attribute, 'href');
|
---|
14 | t.deepEqual(tree.nodes[0].nodes[0].type, 'attribute');
|
---|
15 | t.falsy(tree.nodes[0].nodes[0].quoted);
|
---|
16 | });
|
---|
17 | (0, _helpers.test)('attribute selector spaces (before)', '[ href]', function (t, tree) {
|
---|
18 | t.deepEqual(tree.nodes[0].nodes[0].attribute, 'href');
|
---|
19 | t.deepEqual(tree.nodes[0].nodes[0].spaces.attribute.before, ' ');
|
---|
20 | t.deepEqual(tree.nodes[0].nodes[0].type, 'attribute');
|
---|
21 | t.falsy(tree.nodes[0].nodes[0].quoted);
|
---|
22 | });
|
---|
23 | (0, _helpers.test)('attribute selector spaces (after)', '[href ]', function (t, tree) {
|
---|
24 | t.deepEqual(tree.nodes[0].nodes[0].attribute, 'href');
|
---|
25 | t.deepEqual(tree.nodes[0].nodes[0].spaces.attribute.after, ' ');
|
---|
26 | t.deepEqual(tree.nodes[0].nodes[0].type, 'attribute');
|
---|
27 | t.falsy(tree.nodes[0].nodes[0].quoted);
|
---|
28 | });
|
---|
29 | (0, _helpers.test)('attribute selector spaces with namespace (both)', '[ foo|bar ]', function (t, tree) {
|
---|
30 | t.deepEqual(tree.nodes[0].nodes[0].ns, 'foo');
|
---|
31 | t.deepEqual(tree.nodes[0].nodes[0].attribute, 'bar');
|
---|
32 | t.deepEqual(tree.nodes[0].nodes[0].spaces.attribute.before, ' ');
|
---|
33 | t.deepEqual(tree.nodes[0].nodes[0].spaces.attribute.after, ' ');
|
---|
34 | t.deepEqual(tree.nodes[0].nodes[0].type, 'attribute');
|
---|
35 | t.falsy(tree.nodes[0].nodes[0].quoted);
|
---|
36 | });
|
---|
37 | (0, _helpers.test)('attribute selector spaces (both)', '[ href ]', function (t, tree) {
|
---|
38 | t.deepEqual(tree.nodes[0].nodes[0].attribute, 'href');
|
---|
39 | t.deepEqual(tree.nodes[0].nodes[0].spaces.attribute.before, ' ');
|
---|
40 | t.deepEqual(tree.nodes[0].nodes[0].spaces.attribute.after, ' ');
|
---|
41 | t.deepEqual(tree.nodes[0].nodes[0].type, 'attribute');
|
---|
42 | t.falsy(tree.nodes[0].nodes[0].quoted);
|
---|
43 | });
|
---|
44 | (0, _helpers.test)('multiple attribute selectors', '[href][class][name]', function (t, tree) {
|
---|
45 | t.deepEqual(tree.nodes[0].nodes[0].attribute, 'href');
|
---|
46 | t.deepEqual(tree.nodes[0].nodes[1].attribute, 'class');
|
---|
47 | t.deepEqual(tree.nodes[0].nodes[2].attribute, 'name');
|
---|
48 | });
|
---|
49 | (0, _helpers.test)('select elements with or without a namespace', '[*|href]', function (t, tree) {
|
---|
50 | t.deepEqual(tree.nodes[0].nodes[0].namespace, '*');
|
---|
51 | t.deepEqual(tree.nodes[0].nodes[0].attribute, 'href');
|
---|
52 | });
|
---|
53 | (0, _helpers.test)('namespace with escapes', '[\\31 \\#\\32 |href]', function (t, tree) {
|
---|
54 | var attr = tree.nodes[0].nodes[0];
|
---|
55 | t.deepEqual(attr.namespace, '1#2');
|
---|
56 | t.deepEqual(attr.raws.namespace, '\\31 \\#\\32 ');
|
---|
57 | attr.namespace = "foo";
|
---|
58 | t.deepEqual(attr.namespace, 'foo');
|
---|
59 | t.deepEqual(attr.raws.namespace, undefined);
|
---|
60 | attr.namespace = "1";
|
---|
61 | t.deepEqual(attr.namespace, '1');
|
---|
62 | t.deepEqual(attr.raws.namespace, '\\31');
|
---|
63 | });
|
---|
64 | (0, _helpers.test)('attribute selector with a empty value', '[href=""]', function (t, tree) {
|
---|
65 | t.deepEqual(tree.nodes[0].nodes[0].attribute, 'href');
|
---|
66 | t.deepEqual(tree.nodes[0].nodes[0].operator, '=');
|
---|
67 | t.deepEqual(tree.nodes[0].nodes[0].value, '');
|
---|
68 | t["true"](tree.nodes[0].nodes[0].quoted);
|
---|
69 | });
|
---|
70 | (0, _helpers.test)('attribute selector with a value', '[name=james]', function (t, tree) {
|
---|
71 | t.deepEqual(tree.nodes[0].nodes[0].attribute, 'name');
|
---|
72 | t.deepEqual(tree.nodes[0].nodes[0].operator, '=');
|
---|
73 | t.deepEqual(tree.nodes[0].nodes[0].value, 'james');
|
---|
74 | t.falsy(tree.nodes[0].nodes[0].quoted);
|
---|
75 | });
|
---|
76 | (0, _helpers.test)('attribute selector with quoted value', '[name="james"]', function (t, tree) {
|
---|
77 | var attr = tree.nodes[0].nodes[0];
|
---|
78 | t.deepEqual(attr.attribute, 'name');
|
---|
79 | t.deepEqual(attr.operator, '=');
|
---|
80 | t.deepEqual(attr.value, 'james');
|
---|
81 | t.deepEqual(attr.quoteMark, '"');
|
---|
82 | t.truthy(attr.quoted);
|
---|
83 | t.deepEqual(attr.getQuotedValue(), '"james"');
|
---|
84 | });
|
---|
85 | (0, _helpers.test)('attribute selector with escaped quote', '[title="Something \\"weird\\""]', function (t, tree) {
|
---|
86 | var attr = tree.nodes[0].nodes[0];
|
---|
87 | t.deepEqual(attr.value, 'Something "weird"');
|
---|
88 | t.deepEqual(attr.getQuotedValue(), '\"Something \\"weird\\"\"');
|
---|
89 | t.deepEqual(attr.getQuotedValue({
|
---|
90 | smart: true
|
---|
91 | }), '\'Something "weird"\'');
|
---|
92 | t.deepEqual(attr.getQuotedValue({
|
---|
93 | quoteMark: null
|
---|
94 | }), 'Something\\ \\"weird\\"');
|
---|
95 | t.deepEqual(attr.quoteMark, '"');
|
---|
96 | t.truthy(attr.quoted);
|
---|
97 | t.deepEqual(attr.raws.value, '"Something \\"weird\\""');
|
---|
98 | t.deepEqual(tree.toString(), '[title="Something \\"weird\\""]');
|
---|
99 | });
|
---|
100 | (0, _helpers.test)('attribute selector with escaped colon', '[ng\\:cloak]', function (t, tree) {
|
---|
101 | t.deepEqual(tree.toString(), '[ng\\:cloak]');
|
---|
102 | var attr = tree.nodes[0].nodes[0];
|
---|
103 | t.deepEqual(attr.raws.attribute, 'ng\\:cloak');
|
---|
104 | t.deepEqual(attr.attribute, 'ng:cloak');
|
---|
105 | });
|
---|
106 | (0, _helpers.test)('attribute selector with short hex escape', '[ng\\3a cloak]', function (t, tree) {
|
---|
107 | t.deepEqual(tree.toString(), '[ng\\3a cloak]');
|
---|
108 | var attr = tree.nodes[0].nodes[0];
|
---|
109 | t.deepEqual(attr.raws.attribute, 'ng\\3a cloak');
|
---|
110 | t.deepEqual(attr.attribute, 'ng:cloak');
|
---|
111 | });
|
---|
112 | (0, _helpers.test)('attribute selector with hex escape', '[ng\\00003acloak]', function (t, tree) {
|
---|
113 | t.deepEqual(tree.toString(), '[ng\\00003acloak]');
|
---|
114 | var attr = tree.nodes[0].nodes[0];
|
---|
115 | t.deepEqual(attr.raws.attribute, 'ng\\00003acloak');
|
---|
116 | t.deepEqual(attr.attribute, 'ng:cloak');
|
---|
117 | });
|
---|
118 | (0, _helpers.test)('assign attribute name requiring escape', '[ng\\:cloak]', function (t, tree) {
|
---|
119 | var attr = tree.nodes[0].nodes[0];
|
---|
120 | attr.attribute = "ng:foo";
|
---|
121 | t.deepEqual(attr.raws.attribute, 'ng\\:foo');
|
---|
122 | t.deepEqual(attr.attribute, 'ng:foo');
|
---|
123 | t.deepEqual(tree.toString(), '[ng\\:foo]');
|
---|
124 | });
|
---|
125 | (0, _helpers.test)('multiple attribute selectors + combinator', '[href][class][name] h1 > h2', function (t, tree) {
|
---|
126 | t.deepEqual(tree.nodes[0].nodes[2].attribute, 'name');
|
---|
127 | t.deepEqual(tree.nodes[0].nodes[3].value, ' ');
|
---|
128 | t.deepEqual(tree.nodes[0].nodes[5].value, '>');
|
---|
129 | t.deepEqual(tree.nodes[0].nodes[6].value, 'h2');
|
---|
130 | });
|
---|
131 | (0, _helpers.test)('attribute, class, combinator', '[href] > h2.test', function (t, tree) {
|
---|
132 | t.deepEqual(tree.nodes[0].nodes[0].attribute, 'href');
|
---|
133 | t.deepEqual(tree.nodes[0].nodes[1].value, '>');
|
---|
134 | t.deepEqual(tree.nodes[0].nodes[2].value, 'h2');
|
---|
135 | t.deepEqual(tree.nodes[0].nodes[3].value, 'test');
|
---|
136 | });
|
---|
137 | (0, _helpers.test)('attribute selector with quoted value & combinator', '[name="james"] > h1', function (t, tree) {
|
---|
138 | t.deepEqual(tree.nodes[0].nodes[0].value, 'james');
|
---|
139 | t.deepEqual(tree.nodes[0].nodes[0].quoteMark, '"');
|
---|
140 | t.deepEqual(tree.nodes[0].nodes[1].value, '>');
|
---|
141 | t.deepEqual(tree.nodes[0].nodes[2].value, 'h1');
|
---|
142 | });
|
---|
143 | (0, _helpers.test)('multiple quoted attribute selectors', '[href*="test.com"][rel=\'external\'][id][class~="test"] > [name]', function (t, tree) {
|
---|
144 | t.deepEqual(tree.nodes[0].nodes[0].attribute, 'href');
|
---|
145 | t.deepEqual(tree.nodes[0].nodes[0].value, 'test.com');
|
---|
146 | t.is(tree.nodes[0].nodes[0].quoteMark, '"');
|
---|
147 | t.deepEqual(tree.nodes[0].nodes[1].attribute, 'rel');
|
---|
148 | t.deepEqual(tree.nodes[0].nodes[1].value, 'external');
|
---|
149 | t.is(tree.nodes[0].nodes[1].quoteMark, "'");
|
---|
150 | t.deepEqual(tree.nodes[0].nodes[2].attribute, 'id');
|
---|
151 | t.falsy(tree.nodes[0].nodes[2].value, 'should not have a value');
|
---|
152 | t.is(tree.nodes[0].nodes[2].quoteMark, undefined, 'should not have a quoteMark set');
|
---|
153 | t.deepEqual(tree.nodes[0].nodes[3].attribute, 'class');
|
---|
154 | t.deepEqual(tree.nodes[0].nodes[3].value, 'test');
|
---|
155 | t.deepEqual(tree.nodes[0].nodes[3].quoteMark, '"');
|
---|
156 | t.deepEqual(tree.nodes[0].nodes[4].value, '>');
|
---|
157 | t.deepEqual(tree.nodes[0].nodes[5].attribute, 'name');
|
---|
158 | t.falsy(tree.nodes[0].nodes[5].value, 'should not have a value');
|
---|
159 | t.is(tree.nodes[0].nodes[5].quoteMark, undefined, 'should not have a quoteMark set');
|
---|
160 | });
|
---|
161 | (0, _helpers.test)('more attribute operators', '[href*=test],[href^=test],[href$=test],[href|=test]', function (t, tree) {
|
---|
162 | t.deepEqual(tree.nodes[0].nodes[0].operator, '*=');
|
---|
163 | t.deepEqual(tree.nodes[1].nodes[0].operator, '^=');
|
---|
164 | t.deepEqual(tree.nodes[2].nodes[0].operator, '$=');
|
---|
165 | t.deepEqual(tree.nodes[3].nodes[0].operator, '|=');
|
---|
166 | });
|
---|
167 | (0, _helpers.test)('attribute selector with quoted value containing "="', '[data-weird-attr="Something=weird"]', function (t, tree) {
|
---|
168 | t.deepEqual(tree.nodes[0].nodes[0].attribute, 'data-weird-attr');
|
---|
169 | t.deepEqual(tree.nodes[0].nodes[0].operator, '=');
|
---|
170 | t.deepEqual(tree.nodes[0].nodes[0].value, 'Something=weird');
|
---|
171 | t.is(tree.nodes[0].nodes[0].quoteMark, '"');
|
---|
172 | t.deepEqual(tree.nodes[0].nodes[0].getQuotedValue(), '"Something=weird"');
|
---|
173 | });
|
---|
174 | var selector = '[data-weird-attr*="Something=weird"],' + '[data-weird-attr^="Something=weird"],' + '[data-weird-attr$="Something=weird"],' + '[data-weird-attr|="Something=weird"]';
|
---|
175 | (0, _helpers.test)('more attribute selector with quoted value containing "="', selector, function (t, tree) {
|
---|
176 | t.deepEqual(tree.nodes[0].nodes[0].attribute, 'data-weird-attr');
|
---|
177 | t.deepEqual(tree.nodes[0].nodes[0].operator, '*=');
|
---|
178 | t.deepEqual(tree.nodes[0].nodes[0].value, 'Something=weird');
|
---|
179 | t.deepEqual(tree.nodes[1].nodes[0].attribute, 'data-weird-attr');
|
---|
180 | t.deepEqual(tree.nodes[1].nodes[0].operator, '^=');
|
---|
181 | t.deepEqual(tree.nodes[1].nodes[0].value, 'Something=weird');
|
---|
182 | t.deepEqual(tree.nodes[2].nodes[0].attribute, 'data-weird-attr');
|
---|
183 | t.deepEqual(tree.nodes[2].nodes[0].operator, '$=');
|
---|
184 | t.deepEqual(tree.nodes[2].nodes[0].value, 'Something=weird');
|
---|
185 | t.deepEqual(tree.nodes[3].nodes[0].attribute, 'data-weird-attr');
|
---|
186 | t.deepEqual(tree.nodes[3].nodes[0].operator, '|=');
|
---|
187 | t.deepEqual(tree.nodes[3].nodes[0].value, 'Something=weird');
|
---|
188 | });
|
---|
189 | (0, _helpers.test)('attribute selector with quoted value containing multiple "="', '[data-weird-attr="Something=weird SomethingElse=weirder"]', function (t, tree) {
|
---|
190 | t.deepEqual(tree.nodes[0].nodes[0].attribute, 'data-weird-attr');
|
---|
191 | t.deepEqual(tree.nodes[0].nodes[0].operator, '=');
|
---|
192 | t.deepEqual(tree.nodes[0].nodes[0].value, 'Something=weird SomethingElse=weirder');
|
---|
193 | });
|
---|
194 | selector = '[data-weird-attr*="Something=weird SomethingElse=weirder"],' + '[data-weird-attr^="Something=weird SomethingElse=weirder"],' + '[data-weird-attr$="Something=weird SomethingElse=weirder"],' + '[data-weird-attr|="Something=weird SomethingElse=weirder"]';
|
---|
195 | (0, _helpers.test)('more attribute selector with quoted value containing multiple "="', selector, function (t, tree) {
|
---|
196 | t.deepEqual(tree.nodes[0].nodes[0].attribute, 'data-weird-attr');
|
---|
197 | t.deepEqual(tree.nodes[0].nodes[0].operator, '*=');
|
---|
198 | t.deepEqual(tree.nodes[0].nodes[0].value, 'Something=weird SomethingElse=weirder');
|
---|
199 | t.deepEqual(tree.nodes[1].nodes[0].attribute, 'data-weird-attr');
|
---|
200 | t.deepEqual(tree.nodes[1].nodes[0].operator, '^=');
|
---|
201 | t.deepEqual(tree.nodes[1].nodes[0].value, 'Something=weird SomethingElse=weirder');
|
---|
202 | t.deepEqual(tree.nodes[2].nodes[0].attribute, 'data-weird-attr');
|
---|
203 | t.deepEqual(tree.nodes[2].nodes[0].operator, '$=');
|
---|
204 | t.deepEqual(tree.nodes[2].nodes[0].value, 'Something=weird SomethingElse=weirder');
|
---|
205 | t.deepEqual(tree.nodes[3].nodes[0].attribute, 'data-weird-attr');
|
---|
206 | t.deepEqual(tree.nodes[3].nodes[0].operator, '|=');
|
---|
207 | t.deepEqual(tree.nodes[3].nodes[0].value, 'Something=weird SomethingElse=weirder');
|
---|
208 | });
|
---|
209 | (0, _helpers.test)('multiple attribute selectors with quoted value containing "="', '[data-weird-foo="foo=weird"][data-weird-bar="bar=weird"]', function (t, tree) {
|
---|
210 | t.deepEqual(tree.nodes[0].nodes[0].attribute, 'data-weird-foo');
|
---|
211 | t.deepEqual(tree.nodes[0].nodes[0].operator, '=');
|
---|
212 | t.deepEqual(tree.nodes[0].nodes[0].value, 'foo=weird');
|
---|
213 | t.deepEqual(tree.nodes[0].nodes[1].attribute, 'data-weird-bar');
|
---|
214 | t.deepEqual(tree.nodes[0].nodes[1].operator, '=');
|
---|
215 | t.deepEqual(tree.nodes[0].nodes[1].value, 'bar=weird');
|
---|
216 | });
|
---|
217 | (0, _helpers.test)('multiple attribute selectors with value containing escaped "="', '[data-weird-foo=foo\\=weird][data-weird-bar=bar\\3d weird]', function (t, tree) {
|
---|
218 | t.deepEqual(tree.nodes[0].nodes[0].attribute, 'data-weird-foo');
|
---|
219 | t.deepEqual(tree.nodes[0].nodes[0].operator, '=');
|
---|
220 | t.deepEqual(tree.nodes[0].nodes[0].value, 'foo=weird');
|
---|
221 | t.deepEqual(tree.nodes[0].nodes[1].attribute, 'data-weird-bar');
|
---|
222 | t.deepEqual(tree.nodes[0].nodes[1].operator, '=');
|
---|
223 | t.deepEqual(tree.nodes[0].nodes[1].value, 'bar=weird');
|
---|
224 | });
|
---|
225 | selector = '[data-weird-foo*="foo2=weirder"][data-weird-bar*="bar2=weirder"],' + '[data-weird-foo^="foo2=weirder"][data-weird-bar^="bar2=weirder"],' + '[data-weird-foo$="foo2=weirder"][data-weird-bar$="bar2=weirder"],' + '[data-weird-foo|="foo2=weirder"][data-weird-bar|="bar2=weirder"]';
|
---|
226 | (0, _helpers.test)('more multiple attribute selectors with quoted value containing "="', selector, function (t, tree) {
|
---|
227 | t.deepEqual(tree.nodes[0].nodes[0].attribute, 'data-weird-foo');
|
---|
228 | t.deepEqual(tree.nodes[0].nodes[0].operator, '*=');
|
---|
229 | t.deepEqual(tree.nodes[0].nodes[0].value, 'foo2=weirder');
|
---|
230 | t.deepEqual(tree.nodes[0].nodes[1].attribute, 'data-weird-bar');
|
---|
231 | t.deepEqual(tree.nodes[0].nodes[1].operator, '*=');
|
---|
232 | t.deepEqual(tree.nodes[0].nodes[1].value, 'bar2=weirder');
|
---|
233 | t.deepEqual(tree.nodes[1].nodes[0].attribute, 'data-weird-foo');
|
---|
234 | t.deepEqual(tree.nodes[1].nodes[0].operator, '^=');
|
---|
235 | t.deepEqual(tree.nodes[1].nodes[0].value, 'foo2=weirder');
|
---|
236 | t.deepEqual(tree.nodes[1].nodes[1].attribute, 'data-weird-bar');
|
---|
237 | t.deepEqual(tree.nodes[1].nodes[1].operator, '^=');
|
---|
238 | t.deepEqual(tree.nodes[1].nodes[1].value, 'bar2=weirder');
|
---|
239 | t.deepEqual(tree.nodes[2].nodes[0].attribute, 'data-weird-foo');
|
---|
240 | t.deepEqual(tree.nodes[2].nodes[0].operator, '$=');
|
---|
241 | t.deepEqual(tree.nodes[2].nodes[0].value, 'foo2=weirder');
|
---|
242 | t.deepEqual(tree.nodes[2].nodes[1].attribute, 'data-weird-bar');
|
---|
243 | t.deepEqual(tree.nodes[2].nodes[1].operator, '$=');
|
---|
244 | t.deepEqual(tree.nodes[2].nodes[1].value, 'bar2=weirder');
|
---|
245 | t.deepEqual(tree.nodes[3].nodes[0].attribute, 'data-weird-foo');
|
---|
246 | t.deepEqual(tree.nodes[3].nodes[0].operator, '|=');
|
---|
247 | t.deepEqual(tree.nodes[3].nodes[0].value, 'foo2=weirder');
|
---|
248 | t.deepEqual(tree.nodes[3].nodes[1].attribute, 'data-weird-bar');
|
---|
249 | t.deepEqual(tree.nodes[3].nodes[1].operator, '|=');
|
---|
250 | t.deepEqual(tree.nodes[3].nodes[1].value, 'bar2=weirder');
|
---|
251 | });
|
---|
252 | (0, _helpers.test)('multiple attribute selectors with quoted value containing multiple "="', '[data-weird-foo="foo1=weirder foo2=weirder"][data-weird-bar="bar1=weirder bar2=weirder"]', function (t, tree) {
|
---|
253 | t.deepEqual(tree.nodes[0].nodes[0].attribute, 'data-weird-foo');
|
---|
254 | t.deepEqual(tree.nodes[0].nodes[0].operator, '=');
|
---|
255 | t.deepEqual(tree.nodes[0].nodes[0].value, 'foo1=weirder foo2=weirder');
|
---|
256 | t.deepEqual(tree.nodes[0].nodes[1].attribute, 'data-weird-bar');
|
---|
257 | t.deepEqual(tree.nodes[0].nodes[1].operator, '=');
|
---|
258 | t.deepEqual(tree.nodes[0].nodes[1].value, 'bar1=weirder bar2=weirder');
|
---|
259 | });
|
---|
260 | selector = '[data-weird-foo*="foo1=weirder foo2=weirder"][data-weird-bar*="bar1=weirder bar2=weirder"],' + '[data-weird-foo^="foo1=weirder foo2=weirder"][data-weird-bar^="bar1=weirder bar2=weirder"],' + '[data-weird-foo$="foo1=weirder foo2=weirder"][data-weird-bar$="bar1=weirder bar2=weirder"],' + '[data-weird-foo|="foo1=weirder foo2=weirder"][data-weird-bar|="bar1=weirder bar2=weirder"]';
|
---|
261 | (0, _helpers.test)('more multiple attribute selectors with quoted value containing multiple "="', selector, function (t, tree) {
|
---|
262 | t.deepEqual(tree.nodes[0].nodes[0].attribute, 'data-weird-foo');
|
---|
263 | t.deepEqual(tree.nodes[0].nodes[0].operator, '*=');
|
---|
264 | t.deepEqual(tree.nodes[0].nodes[0].value, 'foo1=weirder foo2=weirder');
|
---|
265 | t.deepEqual(tree.nodes[0].nodes[1].attribute, 'data-weird-bar');
|
---|
266 | t.deepEqual(tree.nodes[0].nodes[1].operator, '*=');
|
---|
267 | t.deepEqual(tree.nodes[0].nodes[1].value, 'bar1=weirder bar2=weirder');
|
---|
268 | t.deepEqual(tree.nodes[1].nodes[0].attribute, 'data-weird-foo');
|
---|
269 | t.deepEqual(tree.nodes[1].nodes[0].operator, '^=');
|
---|
270 | t.deepEqual(tree.nodes[1].nodes[0].value, 'foo1=weirder foo2=weirder');
|
---|
271 | t.deepEqual(tree.nodes[1].nodes[1].attribute, 'data-weird-bar');
|
---|
272 | t.deepEqual(tree.nodes[1].nodes[1].operator, '^=');
|
---|
273 | t.deepEqual(tree.nodes[1].nodes[1].value, 'bar1=weirder bar2=weirder');
|
---|
274 | t.deepEqual(tree.nodes[2].nodes[0].attribute, 'data-weird-foo');
|
---|
275 | t.deepEqual(tree.nodes[2].nodes[0].operator, '$=');
|
---|
276 | t.deepEqual(tree.nodes[2].nodes[0].value, 'foo1=weirder foo2=weirder');
|
---|
277 | t.deepEqual(tree.nodes[2].nodes[1].attribute, 'data-weird-bar');
|
---|
278 | t.deepEqual(tree.nodes[2].nodes[1].operator, '$=');
|
---|
279 | t.deepEqual(tree.nodes[2].nodes[1].value, 'bar1=weirder bar2=weirder');
|
---|
280 | t.deepEqual(tree.nodes[3].nodes[0].attribute, 'data-weird-foo');
|
---|
281 | t.deepEqual(tree.nodes[3].nodes[0].operator, '|=');
|
---|
282 | t.deepEqual(tree.nodes[3].nodes[0].value, 'foo1=weirder foo2=weirder');
|
---|
283 | t.deepEqual(tree.nodes[3].nodes[1].attribute, 'data-weird-bar');
|
---|
284 | t.deepEqual(tree.nodes[3].nodes[1].operator, '|=');
|
---|
285 | t.deepEqual(tree.nodes[3].nodes[1].value, 'bar1=weirder bar2=weirder');
|
---|
286 | });
|
---|
287 | (0, _helpers.test)('spaces in attribute selectors', 'h1[ href *= "test" ]', function (t, tree) {
|
---|
288 | var attr = tree.nodes[0].nodes[1];
|
---|
289 | t.deepEqual(attr.attribute, 'href');
|
---|
290 | t.deepEqual(attr.spaces.attribute.before, ' ');
|
---|
291 | t.deepEqual(attr.spaces.attribute.after, ' ');
|
---|
292 | t.deepEqual(attr.operator, '*=');
|
---|
293 | t.deepEqual(attr.spaces.operator.after, ' ');
|
---|
294 | t.deepEqual(attr.value, 'test');
|
---|
295 | t.deepEqual(attr.spaces.value.after, ' ');
|
---|
296 | t.truthy(tree.nodes[0].nodes[1].quoted);
|
---|
297 | });
|
---|
298 | (0, _helpers.test)('insensitive attribute selector 1', '[href="test" i]', function (t, tree) {
|
---|
299 | t.deepEqual(tree.nodes[0].nodes[0].value, 'test');
|
---|
300 | t.deepEqual(tree.nodes[0].nodes[0].insensitive, true);
|
---|
301 | t.deepEqual(tree.nodes[0].nodes[0].insensitive, true);
|
---|
302 | });
|
---|
303 | (0, _helpers.test)('insensitive attribute selector with a empty value', '[href="" i]', function (t, tree) {
|
---|
304 | t.deepEqual(tree.nodes[0].nodes[0].attribute, 'href');
|
---|
305 | t.deepEqual(tree.nodes[0].nodes[0].operator, '=');
|
---|
306 | t.deepEqual(tree.nodes[0].nodes[0].value, '');
|
---|
307 | t.deepEqual(tree.nodes[0].nodes[0].insensitive, true);
|
---|
308 | t["true"](tree.nodes[0].nodes[0].quoted);
|
---|
309 | });
|
---|
310 | (0, _helpers.test)('insensitive attribute selector 2', '[href=TEsT i ]', function (t, tree) {
|
---|
311 | t.deepEqual(tree.nodes[0].nodes[0].value, 'TEsT');
|
---|
312 | t.deepEqual(tree.nodes[0].nodes[0].insensitive, true);
|
---|
313 | t.deepEqual(tree.nodes[0].nodes[0].spaces.value.after, ' ');
|
---|
314 | t.deepEqual(tree.nodes[0].nodes[0].spaces.insensitive.after, ' ');
|
---|
315 | });
|
---|
316 | (0, _helpers.test)('insensitive attribute selector 3', '[href=test i]', function (t, tree) {
|
---|
317 | t.deepEqual(tree.nodes[0].nodes[0].value, 'test');
|
---|
318 | t.deepEqual(tree.nodes[0].nodes[0].insensitive, true);
|
---|
319 | });
|
---|
320 | (0, _helpers.test)('capitalized insensitive attribute selector 3', '[href=test I]', function (t, tree) {
|
---|
321 | t.deepEqual(tree.nodes[0].nodes[0].value, 'test');
|
---|
322 | t.deepEqual(tree.nodes[0].nodes[0].insensitive, true);
|
---|
323 | });
|
---|
324 | (0, _helpers.test)('extraneous non-combinating whitespace', ' [href] , [class] ', function (t, tree) {
|
---|
325 | t.deepEqual(tree.nodes[0].nodes[0].attribute, 'href');
|
---|
326 | t.deepEqual(tree.nodes[0].nodes[0].spaces.before, ' ');
|
---|
327 | t.deepEqual(tree.nodes[0].nodes[0].spaces.after, ' ');
|
---|
328 | t.deepEqual(tree.nodes[1].nodes[0].attribute, 'class');
|
---|
329 | t.deepEqual(tree.nodes[1].nodes[0].spaces.before, ' ');
|
---|
330 | t.deepEqual(tree.nodes[1].nodes[0].spaces.after, ' ');
|
---|
331 | });
|
---|
332 | (0, _helpers.test)('newline in attribute selector', '[class="woop \\\nwoop woop"]', function (t, tree) {
|
---|
333 | t.deepEqual(tree.nodes[0].nodes[0].attribute, 'class');
|
---|
334 | t.deepEqual(tree.nodes[0].nodes[0].operator, '=');
|
---|
335 | t.deepEqual(tree.nodes[0].nodes[0].value, 'woop \nwoop woop');
|
---|
336 | t["true"](tree.nodes[0].nodes[0].quoted);
|
---|
337 | });
|
---|
338 | (0, _helpers.test)('comments within attribute selectors', '[href/* wow */=/* wow */test]', function (t, tree) {
|
---|
339 | t.deepEqual(tree.nodes[0].nodes[0].attribute, 'href');
|
---|
340 | t.deepEqual(tree.nodes[0].nodes[0].operator, '=');
|
---|
341 | t.deepEqual(tree.nodes[0].nodes[0].value, 'test');
|
---|
342 | t.deepEqual(tree.nodes[0].nodes[0].raws.attribute, 'href/* wow */');
|
---|
343 | t.deepEqual(tree.nodes[0].nodes[0].raws.operator, '=/* wow */');
|
---|
344 | t.deepEqual(tree.nodes[0].nodes[0].value, 'test');
|
---|
345 | });
|
---|
346 | (0, _helpers.test)('comments within attribute selectors (2)', '[/* wow */href=test/* wow */]', function (t, tree) {
|
---|
347 | t.deepEqual(tree.nodes[0].nodes[0].attribute, 'href');
|
---|
348 | t.deepEqual(tree.nodes[0].nodes[0].operator, '=');
|
---|
349 | t.deepEqual(tree.nodes[0].nodes[0].value, 'test');
|
---|
350 | t.deepEqual(tree.nodes[0].nodes[0].raws.spaces.attribute.before, '/* wow */');
|
---|
351 | t.deepEqual(tree.nodes[0].nodes[0].operator, '=');
|
---|
352 | t.deepEqual(tree.nodes[0].nodes[0].raws.value, 'test/* wow */');
|
---|
353 | });
|
---|
354 | (0, _helpers.test)('comments within attribute selectors (3)', '[href=test/* wow */i]', function (t, tree) {
|
---|
355 | t.deepEqual(tree.nodes[0].nodes[0].attribute, 'href');
|
---|
356 | t.deepEqual(tree.nodes[0].nodes[0].value, 'testi');
|
---|
357 | t.deepEqual(tree.nodes[0].nodes[0].raws.value, 'test/* wow */i');
|
---|
358 | t.falsy(tree.nodes[0].nodes[0].insensitive);
|
---|
359 | });
|
---|
360 | (0, _helpers.test)('comments within attribute selectors (4)', '[ /*before*/ href /* after-attr */ = /* after-operator */ te/*inside-value*/st/* wow */ /*omg*/i/*bbq*/ /*whodoesthis*/]', function (t, tree) {
|
---|
361 | var attr = tree.nodes[0].nodes[0];
|
---|
362 | t.deepEqual(attr.attribute, 'href');
|
---|
363 | t.deepEqual(attr.value, 'test');
|
---|
364 | t.deepEqual(attr.getQuotedValue(), 'test');
|
---|
365 | t.deepEqual(attr.raws.value, 'te/*inside-value*/st');
|
---|
366 | t.deepEqual(attr.raws.spaces.value.after, '/* wow */ /*omg*/');
|
---|
367 | t.truthy(attr.insensitive);
|
---|
368 | t.deepEqual(attr.offsetOf("attribute"), 13);
|
---|
369 | t.deepEqual(attr.offsetOf("operator"), 35);
|
---|
370 | t.deepEqual(attr.offsetOf("insensitive"), 95);
|
---|
371 | t.deepEqual(attr.raws.spaces.insensitive.after, '/*bbq*/ /*whodoesthis*/');
|
---|
372 | attr.value = "foo";
|
---|
373 | t.is(attr.raws.value, undefined);
|
---|
374 | });
|
---|
375 | (0, _helpers.test)('non standard modifiers', '[href="foo" y]', function (t, tree) {
|
---|
376 | var attr = tree.atPosition(1, 13);
|
---|
377 | t.deepEqual(attr.insensitive, false);
|
---|
378 | t.deepEqual(attr.insensitiveFlag, '');
|
---|
379 | t.deepEqual(attr.raws.insensitiveFlag, 'y');
|
---|
380 | t.deepEqual(tree.toString(), '[href="foo" y]');
|
---|
381 | });
|
---|
382 | (0, _helpers.test)('comment after insensitive(non space)', '[href="foo" i/**/]', function (t, tree) {
|
---|
383 | // https://github.com/postcss/postcss-selector-parser/issues/150
|
---|
384 | var attr = tree.atPosition(1, 13);
|
---|
385 | t.deepEqual(attr.insensitive, true);
|
---|
386 | t.deepEqual(attr.insensitiveFlag, 'i');
|
---|
387 | t.is(attr.raws.insensitiveFlag, undefined);
|
---|
388 | t.deepEqual(attr.raws.spaces.insensitive.after, '/**/');
|
---|
389 | t.deepEqual(tree.toString(), '[href="foo" i/**/]');
|
---|
390 | });
|
---|
391 | (0, _helpers.test)('comment after insensitive(space after)', '[href="foo" i/**/ ]', function (t, tree) {
|
---|
392 | var attr = tree.atPosition(1, 13);
|
---|
393 | t.deepEqual(attr.insensitive, true);
|
---|
394 | t.deepEqual(attr.insensitiveFlag, 'i');
|
---|
395 | t.deepEqual(attr.raws.spaces.insensitive.after, '/**/ ');
|
---|
396 | t.deepEqual(tree.toString(), '[href="foo" i/**/ ]');
|
---|
397 | });
|
---|
398 | (0, _helpers.test)('comment after insensitive(space before)', '[href="foo" i /**/]', function (t, tree) {
|
---|
399 | var attr = tree.atPosition(1, 13);
|
---|
400 | t.deepEqual(attr.insensitive, true);
|
---|
401 | t.deepEqual(attr.insensitiveFlag, 'i');
|
---|
402 | t.deepEqual(attr.raws.spaces.insensitive.after, ' /**/');
|
---|
403 | t.deepEqual(tree.toString(), '[href="foo" i /**/]');
|
---|
404 | });
|
---|
405 | var testDeprecation = (0, _helpers.nodeVersionAtLeast)('7.0.0') || (0, _helpers.nodeVersionBefore)('6.0.0') ? _helpers.test : _helpers.test.skip;
|
---|
406 | testDeprecation('deprecated constructor', '', function (t) {
|
---|
407 | t["throws"](function () {
|
---|
408 | return new _attribute["default"]({
|
---|
409 | value: '"foo"',
|
---|
410 | attribute: "data-bar"
|
---|
411 | });
|
---|
412 | }, {
|
---|
413 | message: "Constructing an Attribute selector with a value without specifying quoteMark is deprecated. Note: The value should be unescaped now."
|
---|
414 | });
|
---|
415 | });
|
---|
416 | testDeprecation('deprecated get of raws.unquoted ', '', function (t) {
|
---|
417 | t["throws"](function () {
|
---|
418 | var attr = new _attribute["default"]({
|
---|
419 | value: 'foo',
|
---|
420 | quoteMark: '"',
|
---|
421 | attribute: "data-bar"
|
---|
422 | });
|
---|
423 | return attr.raws.unquoted;
|
---|
424 | }, {
|
---|
425 | message: "attr.raws.unquoted is deprecated. Call attr.value instead."
|
---|
426 | });
|
---|
427 | });
|
---|
428 | testDeprecation('deprecated set of raws.unquoted ', '', function (t) {
|
---|
429 | t["throws"](function () {
|
---|
430 | var attr = new _attribute["default"]({
|
---|
431 | value: 'foo',
|
---|
432 | quoteMark: '"',
|
---|
433 | attribute: "data-bar"
|
---|
434 | });
|
---|
435 | attr.raws.unquoted = 'fooooo';
|
---|
436 | }, {
|
---|
437 | message: "Setting attr.raws.unquoted is deprecated and has no effect. attr.value is unescaped by default now."
|
---|
438 | });
|
---|
439 | });
|
---|
440 | testDeprecation('smart quotes', '[data-foo=bar]', function (t, tree) {
|
---|
441 | var attr = tree.nodes[0].nodes[0];
|
---|
442 | attr.setValue('changed', {
|
---|
443 | quoteMark: '"'
|
---|
444 | });
|
---|
445 | t.deepEqual(attr.toString(), '[data-foo="changed"]');
|
---|
446 | attr.setValue('changed again', {
|
---|
447 | quoteMark: "'",
|
---|
448 | preferCurrentQuoteMark: true
|
---|
449 | });
|
---|
450 | t.deepEqual(attr.toString(), '[data-foo="changed again"]');
|
---|
451 | attr.setValue('smart-ident', {
|
---|
452 | smart: true
|
---|
453 | });
|
---|
454 | t.deepEqual(attr.toString(), '[data-foo=smart-ident]');
|
---|
455 | attr.setValue('smart quoted', {
|
---|
456 | smart: true
|
---|
457 | });
|
---|
458 | t.deepEqual(attr.toString(), '[data-foo=smart\\ quoted]');
|
---|
459 | attr.setValue('smart quoted three spaces', {
|
---|
460 | smart: true
|
---|
461 | });
|
---|
462 | t.deepEqual(attr.toString(), '[data-foo="smart quoted three spaces"]');
|
---|
463 | attr.setValue('smart quoted three spaces', {
|
---|
464 | smart: true,
|
---|
465 | quoteMark: "'"
|
---|
466 | });
|
---|
467 | t.deepEqual(attr.toString(), "[data-foo='smart quoted three spaces']");
|
---|
468 | attr.setValue("smart with 'single quotes'", {
|
---|
469 | smart: true
|
---|
470 | });
|
---|
471 | t.deepEqual(attr.toString(), "[data-foo=\"smart with 'single quotes'\"]");
|
---|
472 | attr.setValue('smart with "double quotes"', {
|
---|
473 | smart: true
|
---|
474 | });
|
---|
475 | t.deepEqual(attr.toString(), "[data-foo='smart with \"double quotes\"']");
|
---|
476 | });
|
---|
477 | testDeprecation('set Attribute#quoteMark', '[data-foo=bar]', function (t, tree) {
|
---|
478 | var attr = tree.nodes[0].nodes[0];
|
---|
479 | attr.quoteMark = '"';
|
---|
480 | t.deepEqual(attr.toString(), '[data-foo="bar"]');
|
---|
481 | attr.quoteMark = "'";
|
---|
482 | t.deepEqual(attr.toString(), "[data-foo='bar']");
|
---|
483 | attr.quoteMark = null;
|
---|
484 | t.deepEqual(attr.toString(), "[data-foo=bar]");
|
---|
485 | attr.value = "has space";
|
---|
486 | t.deepEqual(attr.toString(), "[data-foo=has\\ space]");
|
---|
487 | attr.quoteMark = '"';
|
---|
488 | t.deepEqual(attr.toString(), '[data-foo="has space"]');
|
---|
489 | }); |
---|