1 | "use strict";
|
---|
2 |
|
---|
3 | var _ava = _interopRequireDefault(require("ava"));
|
---|
4 |
|
---|
5 | var _ = _interopRequireDefault(require(".."));
|
---|
6 |
|
---|
7 | var _helpers = require("./util/helpers");
|
---|
8 |
|
---|
9 | function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
|
---|
10 |
|
---|
11 | (0, _ava["default"])('container#append', function (t) {
|
---|
12 | var out = (0, _helpers.parse)('h1', function (selectors) {
|
---|
13 | var selector = selectors.first;
|
---|
14 | var clone = selector.first.clone({
|
---|
15 | value: 'h2'
|
---|
16 | });
|
---|
17 | selectors.append(clone);
|
---|
18 | });
|
---|
19 | t.deepEqual(out, 'h1,h2');
|
---|
20 | });
|
---|
21 | (0, _ava["default"])('container#prepend', function (t) {
|
---|
22 | var out = (0, _helpers.parse)('h2', function (selectors) {
|
---|
23 | var selector = selectors.first;
|
---|
24 | var clone = selector.first.clone({
|
---|
25 | value: 'h1'
|
---|
26 | });
|
---|
27 | selectors.prepend(clone);
|
---|
28 | });
|
---|
29 | t.deepEqual(out, 'h1,h2');
|
---|
30 | });
|
---|
31 | (0, _ava["default"])('container#each', function (t) {
|
---|
32 | var str = '';
|
---|
33 | (0, _helpers.parse)('h1, h2:not(h3, h4)', function (selectors) {
|
---|
34 | selectors.each(function (selector) {
|
---|
35 | if (selector.first.type === 'tag') {
|
---|
36 | str += selector.first.value;
|
---|
37 | }
|
---|
38 | });
|
---|
39 | });
|
---|
40 | t.deepEqual(str, 'h1h2');
|
---|
41 | });
|
---|
42 | (0, _ava["default"])('container#each (safe iteration)', function (t) {
|
---|
43 | var out = (0, _helpers.parse)('.x, .y', function (selectors) {
|
---|
44 | selectors.each(function (selector) {
|
---|
45 | selector.parent.insertBefore(selector, _["default"].className({
|
---|
46 | value: 'b'
|
---|
47 | }));
|
---|
48 | selector.parent.insertAfter(selector, _["default"].className({
|
---|
49 | value: 'a'
|
---|
50 | }));
|
---|
51 | });
|
---|
52 | });
|
---|
53 | t.deepEqual(out, '.b,.x,.a,.b, .y,.a');
|
---|
54 | });
|
---|
55 | (0, _ava["default"])('container#each (early exit)', function (t) {
|
---|
56 | var str = '';
|
---|
57 | (0, _helpers.parse)('h1, h2, h3, h4', function (selectors) {
|
---|
58 | var eachReturn = selectors.each(function (selector) {
|
---|
59 | var tag = selector.first.value;
|
---|
60 | str += tag;
|
---|
61 | return tag !== 'h2';
|
---|
62 | });
|
---|
63 | t["false"](eachReturn);
|
---|
64 | });
|
---|
65 | t.deepEqual(str, 'h1h2');
|
---|
66 | });
|
---|
67 | (0, _ava["default"])('container#walk', function (t) {
|
---|
68 | var str = '';
|
---|
69 | (0, _helpers.parse)('h1, h2:not(h3, h4)', function (selectors) {
|
---|
70 | selectors.walk(function (selector) {
|
---|
71 | if (selector.type === 'tag') {
|
---|
72 | str += selector.value;
|
---|
73 | }
|
---|
74 | });
|
---|
75 | });
|
---|
76 | t.deepEqual(str, 'h1h2h3h4');
|
---|
77 | });
|
---|
78 | (0, _ava["default"])('container#walk (safe iteration)', function (t) {
|
---|
79 | var out = (0, _helpers.parse)('[class] + *[href] *:not(*.green)', function (selectors) {
|
---|
80 | selectors.walkUniversals(function (selector) {
|
---|
81 | var next = selector.next();
|
---|
82 |
|
---|
83 | if (next && next.type !== 'combinator') {
|
---|
84 | selector.remove();
|
---|
85 | }
|
---|
86 | });
|
---|
87 | });
|
---|
88 | t.deepEqual(out, '[class] + [href] :not(.green)');
|
---|
89 | });
|
---|
90 | (0, _ava["default"])('container#walk (early exit)', function (t) {
|
---|
91 | var str = '';
|
---|
92 | (0, _helpers.parse)('h1, h2:not(h3, h4)', function (selectors) {
|
---|
93 | var walkReturn = selectors.walk(function (selector) {
|
---|
94 | if (selector.type === 'tag') {
|
---|
95 | var tag = selector.value;
|
---|
96 | str += tag;
|
---|
97 | return tag !== 'h3';
|
---|
98 | }
|
---|
99 | });
|
---|
100 | t["false"](walkReturn);
|
---|
101 | });
|
---|
102 | t.deepEqual(str, 'h1h2h3');
|
---|
103 | });
|
---|
104 | (0, _ava["default"])('container#walkAttribute', function (t) {
|
---|
105 | var out = (0, _helpers.parse)('[href][class].class', function (selectors) {
|
---|
106 | selectors.walkAttributes(function (attr) {
|
---|
107 | if (attr.attribute === 'class') {
|
---|
108 | attr.remove();
|
---|
109 | }
|
---|
110 | });
|
---|
111 | });
|
---|
112 | t.deepEqual(out, '[href].class');
|
---|
113 | });
|
---|
114 | (0, _ava["default"])('container#walkClass', function (t) {
|
---|
115 | var out = (0, _helpers.parse)('.one, .two, .three:not(.four, .five)', function (selectors) {
|
---|
116 | selectors.walkClasses(function (className) {
|
---|
117 | className.value = className.value.slice(0, 1);
|
---|
118 | });
|
---|
119 | });
|
---|
120 | t.deepEqual(out, '.o, .t, .t:not(.f, .f)');
|
---|
121 | });
|
---|
122 | (0, _ava["default"])('container#walkCombinator', function (t) {
|
---|
123 | var out = (0, _helpers.parse)('h1 h2 h3 h4', function (selectors) {
|
---|
124 | selectors.walkCombinators(function (comment) {
|
---|
125 | comment.remove();
|
---|
126 | });
|
---|
127 | });
|
---|
128 | t.deepEqual(out, 'h1h2h3h4');
|
---|
129 | });
|
---|
130 | (0, _ava["default"])('container#walkComment', function (t) {
|
---|
131 | var out = (0, _helpers.parse)('.one/*test*/.two', function (selectors) {
|
---|
132 | selectors.walkComments(function (comment) {
|
---|
133 | comment.remove();
|
---|
134 | });
|
---|
135 | });
|
---|
136 | t.deepEqual(out, '.one.two');
|
---|
137 | });
|
---|
138 | (0, _ava["default"])('container#walkId', function (t) {
|
---|
139 | var out = (0, _helpers.parse)('h1#one, h2#two', function (selectors) {
|
---|
140 | selectors.walkIds(function (id) {
|
---|
141 | id.value = id.value.slice(0, 1);
|
---|
142 | });
|
---|
143 | });
|
---|
144 | t.deepEqual(out, 'h1#o, h2#t');
|
---|
145 | });
|
---|
146 | (0, _ava["default"])('container#walkNesting', function (t) {
|
---|
147 | var out = (0, _helpers.parse)('& h1', function (selectors) {
|
---|
148 | selectors.walkNesting(function (node) {
|
---|
149 | node.replaceWith(_["default"].tag({
|
---|
150 | value: 'body'
|
---|
151 | }));
|
---|
152 | });
|
---|
153 | });
|
---|
154 | t.deepEqual(out, 'body h1');
|
---|
155 | });
|
---|
156 | (0, _ava["default"])('container#walkPseudo', function (t) {
|
---|
157 | var out = (0, _helpers.parse)('a:before, a:after', function (selectors) {
|
---|
158 | selectors.walkPseudos(function (pseudo) {
|
---|
159 | pseudo.value = pseudo.value.slice(0, 2);
|
---|
160 | });
|
---|
161 | });
|
---|
162 | t.deepEqual(out, 'a:b, a:a');
|
---|
163 | });
|
---|
164 | (0, _ava["default"])('container#walkTag', function (t) {
|
---|
165 | var out = (0, _helpers.parse)('1 2 3', function (selectors) {
|
---|
166 | selectors.walkTags(function (tag) {
|
---|
167 | tag.value = 'h' + tag.value;
|
---|
168 | });
|
---|
169 | });
|
---|
170 | t.deepEqual(out, 'h1 h2 h3');
|
---|
171 | });
|
---|
172 | (0, _ava["default"])('container#walkUniversal', function (t) {
|
---|
173 | var out = (0, _helpers.parse)('*.class,*.class,*.class', function (selectors) {
|
---|
174 | selectors.walkUniversals(function (universal) {
|
---|
175 | universal.remove();
|
---|
176 | });
|
---|
177 | });
|
---|
178 | t.deepEqual(out, '.class,.class,.class');
|
---|
179 | });
|
---|
180 | (0, _ava["default"])('container#map', function (t) {
|
---|
181 | (0, _helpers.parse)('1 2 3', function (selectors) {
|
---|
182 | var arr = selectors.first.map(function (selector) {
|
---|
183 | if (/[0-9]/.test(selector.value)) {
|
---|
184 | return 'h' + selector.value;
|
---|
185 | }
|
---|
186 |
|
---|
187 | return selector.value;
|
---|
188 | });
|
---|
189 | t.deepEqual(arr, ['h1', ' ', 'h2', ' ', 'h3']);
|
---|
190 | });
|
---|
191 | });
|
---|
192 | (0, _ava["default"])('container#every', function (t) {
|
---|
193 | (0, _helpers.parse)('.one.two.three', function (selectors) {
|
---|
194 | var allClasses = selectors.first.every(function (selector) {
|
---|
195 | return selector.type === 'class';
|
---|
196 | });
|
---|
197 | t.truthy(allClasses);
|
---|
198 | });
|
---|
199 | });
|
---|
200 | (0, _ava["default"])('container#some', function (t) {
|
---|
201 | (0, _helpers.parse)('one#two.three', function (selectors) {
|
---|
202 | var someClasses = selectors.first.some(function (selector) {
|
---|
203 | return selector.type === 'class';
|
---|
204 | });
|
---|
205 | t.truthy(someClasses);
|
---|
206 | });
|
---|
207 | });
|
---|
208 | (0, _ava["default"])('container#reduce', function (t) {
|
---|
209 | (0, _helpers.parse)('h1, h2, h3, h4', function (selectors) {
|
---|
210 | var str = selectors.reduce(function (memo, selector) {
|
---|
211 | if (selector.first.type === 'tag') {
|
---|
212 | memo += selector.first.value;
|
---|
213 | }
|
---|
214 |
|
---|
215 | return memo;
|
---|
216 | }, '');
|
---|
217 | t.deepEqual(str, 'h1h2h3h4');
|
---|
218 | });
|
---|
219 | });
|
---|
220 | (0, _ava["default"])('container#filter', function (t) {
|
---|
221 | (0, _helpers.parse)('h1, h2, c1, c2', function (selectors) {
|
---|
222 | var ast = selectors.filter(function (selector) {
|
---|
223 | return ~selector.first.value.indexOf('h');
|
---|
224 | });
|
---|
225 | t.deepEqual(String(ast), 'h1, h2');
|
---|
226 | });
|
---|
227 | });
|
---|
228 | (0, _ava["default"])('container#split', function (t) {
|
---|
229 | (0, _helpers.parse)('h1 h2 >> h3', function (selectors) {
|
---|
230 | var list = selectors.first.split(function (selector) {
|
---|
231 | return selector.value === '>>';
|
---|
232 | }).map(function (group) {
|
---|
233 | return group.map(String);
|
---|
234 | });
|
---|
235 | t.deepEqual(list, [['h1', ' ', 'h2', ' >> '], ['h3']]);
|
---|
236 | t.deepEqual(list.length, 2);
|
---|
237 | });
|
---|
238 | });
|
---|
239 | (0, _ava["default"])('container#sort', function (t) {
|
---|
240 | var out = (0, _helpers.parse)('h2,h3,h1,h4', function (selectors) {
|
---|
241 | selectors.sort(function (a, b) {
|
---|
242 | return a.first.value.slice(-1) - b.first.value.slice(-1);
|
---|
243 | });
|
---|
244 | });
|
---|
245 | t.deepEqual(out, 'h1,h2,h3,h4');
|
---|
246 | });
|
---|
247 | (0, _ava["default"])('container#at', function (t) {
|
---|
248 | (0, _helpers.parse)('h1, h2, h3', function (selectors) {
|
---|
249 | t.deepEqual(selectors.at(1).first.value, 'h2');
|
---|
250 | });
|
---|
251 | });
|
---|
252 | (0, _ava["default"])('container#first, container#last', function (t) {
|
---|
253 | (0, _helpers.parse)('h1, h2, h3, h4', function (selectors) {
|
---|
254 | t.deepEqual(selectors.first.first.value, 'h1');
|
---|
255 | t.deepEqual(selectors.last.last.value, 'h4');
|
---|
256 | });
|
---|
257 | });
|
---|
258 | (0, _ava["default"])('container#index', function (t) {
|
---|
259 | (0, _helpers.parse)('h1 h2 h3', function (selectors) {
|
---|
260 | var middle = selectors.first.at(1);
|
---|
261 | t.deepEqual(selectors.first.index(middle), 1);
|
---|
262 | });
|
---|
263 | });
|
---|
264 | (0, _ava["default"])('container#length', function (t) {
|
---|
265 | (0, _helpers.parse)('h1, h2, h3', function (selectors) {
|
---|
266 | t.deepEqual(selectors.length, 3);
|
---|
267 | });
|
---|
268 | });
|
---|
269 | (0, _ava["default"])('container#removeChild', function (t) {
|
---|
270 | var out = (0, _helpers.parse)('h1.class h2.class h3.class', function (selectors) {
|
---|
271 | selectors.walk(function (selector) {
|
---|
272 | if (selector.type === 'class') {
|
---|
273 | selector.parent.removeChild(selector);
|
---|
274 | }
|
---|
275 | });
|
---|
276 | });
|
---|
277 | t.deepEqual(out, 'h1 h2 h3');
|
---|
278 | });
|
---|
279 | (0, _ava["default"])('container#removeAll, container#empty', function (t) {
|
---|
280 | var wipe = function wipe(method) {
|
---|
281 | return function (selectors) {
|
---|
282 | return selectors[method]();
|
---|
283 | };
|
---|
284 | };
|
---|
285 |
|
---|
286 | var out1 = (0, _helpers.parse)('h1 h2, h2 h3, h3 h4', wipe('empty'));
|
---|
287 | var out2 = (0, _helpers.parse)('h1 h2, h2 h3, h3 h4', wipe('removeAll'));
|
---|
288 | t.deepEqual(out1, '');
|
---|
289 | t.deepEqual(out2, '');
|
---|
290 | });
|
---|
291 | (0, _ava["default"])('container#insertBefore', function (t) {
|
---|
292 | var out = (0, _helpers.parse)('h2', function (selectors) {
|
---|
293 | var selector = selectors.first;
|
---|
294 | var clone = selector.first.clone({
|
---|
295 | value: 'h1'
|
---|
296 | });
|
---|
297 | selectors.insertBefore(selector, clone);
|
---|
298 | });
|
---|
299 | t.deepEqual(out, 'h1,h2');
|
---|
300 | });
|
---|
301 | (0, _ava["default"])('container#insertBefore and node#remove', function (t) {
|
---|
302 | var out = (0, _helpers.parse)('h2', function (selectors) {
|
---|
303 | var selector = selectors.first;
|
---|
304 |
|
---|
305 | var newSel = _["default"].tag({
|
---|
306 | value: 'h1'
|
---|
307 | });
|
---|
308 |
|
---|
309 | selectors.insertBefore(selector, newSel);
|
---|
310 | newSel.remove();
|
---|
311 | });
|
---|
312 | t.deepEqual(out, 'h2');
|
---|
313 | });
|
---|
314 | (0, _ava["default"])('container#insertAfter', function (t) {
|
---|
315 | var out = (0, _helpers.parse)('h1', function (selectors) {
|
---|
316 | var selector = selectors.first;
|
---|
317 | var clone = selector.first.clone({
|
---|
318 | value: 'h2'
|
---|
319 | });
|
---|
320 | selectors.insertAfter(selector, clone);
|
---|
321 | });
|
---|
322 | t.deepEqual(out, 'h1,h2');
|
---|
323 | });
|
---|
324 | (0, _ava["default"])('container#insertAfter and node#remove', function (t) {
|
---|
325 | var out = (0, _helpers.parse)('h2', function (selectors) {
|
---|
326 | var selector = selectors.first;
|
---|
327 |
|
---|
328 | var newSel = _["default"].tag({
|
---|
329 | value: 'h1'
|
---|
330 | });
|
---|
331 |
|
---|
332 | selectors.insertAfter(selector, newSel);
|
---|
333 | newSel.remove();
|
---|
334 | });
|
---|
335 | t.deepEqual(out, 'h2');
|
---|
336 | });
|
---|
337 | (0, _ava["default"])('container#insertAfter (during iteration)', function (t) {
|
---|
338 | var out = (0, _helpers.parse)('h1, h2, h3', function (selectors) {
|
---|
339 | selectors.walkTags(function (selector) {
|
---|
340 | var attribute = _["default"].attribute({
|
---|
341 | attribute: 'class'
|
---|
342 | });
|
---|
343 |
|
---|
344 | selector.parent.insertAfter(selector, attribute);
|
---|
345 | });
|
---|
346 | });
|
---|
347 | t.deepEqual(out, 'h1[class], h2[class], h3[class]');
|
---|
348 | });
|
---|
349 | (0, _ava["default"])('Container#atPosition first pseudo', function (t) {
|
---|
350 | (0, _helpers.parse)(':not(.foo),\n#foo > :matches(ol, ul)', function (root) {
|
---|
351 | var node = root.atPosition(1, 1);
|
---|
352 | t.deepEqual(node.type, "pseudo");
|
---|
353 | t.deepEqual(node.toString(), ":not(.foo)");
|
---|
354 | });
|
---|
355 | });
|
---|
356 | (0, _ava["default"])('Container#atPosition class in pseudo', function (t) {
|
---|
357 | (0, _helpers.parse)(':not(.foo),\n#foo > :matches(ol, ul)', function (root) {
|
---|
358 | var node = root.atPosition(1, 6);
|
---|
359 | t.deepEqual(node.type, "class");
|
---|
360 | t.deepEqual(node.toString(), ".foo");
|
---|
361 | });
|
---|
362 | });
|
---|
363 | (0, _ava["default"])('Container#atPosition id in second selector', function (t) {
|
---|
364 | (0, _helpers.parse)(':not(.foo),\n#foo > :matches(ol, ul)', function (root) {
|
---|
365 | var node = root.atPosition(2, 1);
|
---|
366 | t.deepEqual(node.type, "id");
|
---|
367 | t.deepEqual(node.toString(), "\n#foo");
|
---|
368 | });
|
---|
369 | });
|
---|
370 | (0, _ava["default"])('Container#atPosition combinator in second selector', function (t) {
|
---|
371 | (0, _helpers.parse)(':not(.foo),\n#foo > :matches(ol, ul)', function (root) {
|
---|
372 | var node = root.atPosition(2, 6);
|
---|
373 | t.deepEqual(node.type, "combinator");
|
---|
374 | t.deepEqual(node.toString(), " > ");
|
---|
375 | var nodeSpace = root.atPosition(2, 5);
|
---|
376 | t.deepEqual(nodeSpace.type, "selector");
|
---|
377 | t.deepEqual(nodeSpace.toString(), "\n#foo > :matches(ol, ul)");
|
---|
378 | });
|
---|
379 | });
|
---|
380 | (0, _ava["default"])('Container#atPosition tag in second selector pseudo', function (t) {
|
---|
381 | (0, _helpers.parse)(':not(.foo),\n#foo > :matches(ol, ul)', function (root) {
|
---|
382 | var node = root.atPosition(2, 17);
|
---|
383 | t.deepEqual(node.type, "tag");
|
---|
384 | t.deepEqual(node.toString(), "ol");
|
---|
385 | });
|
---|
386 | });
|
---|
387 | (0, _ava["default"])('Container#atPosition comma in second selector pseudo', function (t) {
|
---|
388 | (0, _helpers.parse)(':not(.foo),\n#foo > :matches(ol, ul)', function (root) {
|
---|
389 | var node = root.atPosition(2, 19);
|
---|
390 | t.deepEqual(node.type, "pseudo");
|
---|
391 | t.deepEqual(node.toString(), ":matches(ol, ul)");
|
---|
392 | });
|
---|
393 | }); |
---|