[6a3a178] | 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 | }); |
---|