You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
393 lines
12 KiB
393 lines
12 KiB
"use strict";
|
|
|
|
var _ava = _interopRequireDefault(require("ava"));
|
|
|
|
var _ = _interopRequireDefault(require(".."));
|
|
|
|
var _helpers = require("./util/helpers");
|
|
|
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
|
|
(0, _ava.default)('container#append', function (t) {
|
|
var out = (0, _helpers.parse)('h1', function (selectors) {
|
|
var selector = selectors.first;
|
|
var clone = selector.first.clone({
|
|
value: 'h2'
|
|
});
|
|
selectors.append(clone);
|
|
});
|
|
t.deepEqual(out, 'h1,h2');
|
|
});
|
|
(0, _ava.default)('container#prepend', function (t) {
|
|
var out = (0, _helpers.parse)('h2', function (selectors) {
|
|
var selector = selectors.first;
|
|
var clone = selector.first.clone({
|
|
value: 'h1'
|
|
});
|
|
selectors.prepend(clone);
|
|
});
|
|
t.deepEqual(out, 'h1,h2');
|
|
});
|
|
(0, _ava.default)('container#each', function (t) {
|
|
var str = '';
|
|
(0, _helpers.parse)('h1, h2:not(h3, h4)', function (selectors) {
|
|
selectors.each(function (selector) {
|
|
if (selector.first.type === 'tag') {
|
|
str += selector.first.value;
|
|
}
|
|
});
|
|
});
|
|
t.deepEqual(str, 'h1h2');
|
|
});
|
|
(0, _ava.default)('container#each (safe iteration)', function (t) {
|
|
var out = (0, _helpers.parse)('.x, .y', function (selectors) {
|
|
selectors.each(function (selector) {
|
|
selector.parent.insertBefore(selector, _.default.className({
|
|
value: 'b'
|
|
}));
|
|
selector.parent.insertAfter(selector, _.default.className({
|
|
value: 'a'
|
|
}));
|
|
});
|
|
});
|
|
t.deepEqual(out, '.b,.x,.a,.b, .y,.a');
|
|
});
|
|
(0, _ava.default)('container#each (early exit)', function (t) {
|
|
var str = '';
|
|
(0, _helpers.parse)('h1, h2, h3, h4', function (selectors) {
|
|
var eachReturn = selectors.each(function (selector) {
|
|
var tag = selector.first.value;
|
|
str += tag;
|
|
return tag !== 'h2';
|
|
});
|
|
t.false(eachReturn);
|
|
});
|
|
t.deepEqual(str, 'h1h2');
|
|
});
|
|
(0, _ava.default)('container#walk', function (t) {
|
|
var str = '';
|
|
(0, _helpers.parse)('h1, h2:not(h3, h4)', function (selectors) {
|
|
selectors.walk(function (selector) {
|
|
if (selector.type === 'tag') {
|
|
str += selector.value;
|
|
}
|
|
});
|
|
});
|
|
t.deepEqual(str, 'h1h2h3h4');
|
|
});
|
|
(0, _ava.default)('container#walk (safe iteration)', function (t) {
|
|
var out = (0, _helpers.parse)('[class] + *[href] *:not(*.green)', function (selectors) {
|
|
selectors.walkUniversals(function (selector) {
|
|
var next = selector.next();
|
|
|
|
if (next && next.type !== 'combinator') {
|
|
selector.remove();
|
|
}
|
|
});
|
|
});
|
|
t.deepEqual(out, '[class] + [href] :not(.green)');
|
|
});
|
|
(0, _ava.default)('container#walk (early exit)', function (t) {
|
|
var str = '';
|
|
(0, _helpers.parse)('h1, h2:not(h3, h4)', function (selectors) {
|
|
var walkReturn = selectors.walk(function (selector) {
|
|
if (selector.type === 'tag') {
|
|
var tag = selector.value;
|
|
str += tag;
|
|
return tag !== 'h3';
|
|
}
|
|
});
|
|
t.false(walkReturn);
|
|
});
|
|
t.deepEqual(str, 'h1h2h3');
|
|
});
|
|
(0, _ava.default)('container#walkAttribute', function (t) {
|
|
var out = (0, _helpers.parse)('[href][class].class', function (selectors) {
|
|
selectors.walkAttributes(function (attr) {
|
|
if (attr.attribute === 'class') {
|
|
attr.remove();
|
|
}
|
|
});
|
|
});
|
|
t.deepEqual(out, '[href].class');
|
|
});
|
|
(0, _ava.default)('container#walkClass', function (t) {
|
|
var out = (0, _helpers.parse)('.one, .two, .three:not(.four, .five)', function (selectors) {
|
|
selectors.walkClasses(function (className) {
|
|
className.value = className.value.slice(0, 1);
|
|
});
|
|
});
|
|
t.deepEqual(out, '.o, .t, .t:not(.f, .f)');
|
|
});
|
|
(0, _ava.default)('container#walkCombinator', function (t) {
|
|
var out = (0, _helpers.parse)('h1 h2 h3 h4', function (selectors) {
|
|
selectors.walkCombinators(function (comment) {
|
|
comment.remove();
|
|
});
|
|
});
|
|
t.deepEqual(out, 'h1h2h3h4');
|
|
});
|
|
(0, _ava.default)('container#walkComment', function (t) {
|
|
var out = (0, _helpers.parse)('.one/*test*/.two', function (selectors) {
|
|
selectors.walkComments(function (comment) {
|
|
comment.remove();
|
|
});
|
|
});
|
|
t.deepEqual(out, '.one.two');
|
|
});
|
|
(0, _ava.default)('container#walkId', function (t) {
|
|
var out = (0, _helpers.parse)('h1#one, h2#two', function (selectors) {
|
|
selectors.walkIds(function (id) {
|
|
id.value = id.value.slice(0, 1);
|
|
});
|
|
});
|
|
t.deepEqual(out, 'h1#o, h2#t');
|
|
});
|
|
(0, _ava.default)('container#walkNesting', function (t) {
|
|
var out = (0, _helpers.parse)('& h1', function (selectors) {
|
|
selectors.walkNesting(function (node) {
|
|
node.replaceWith(_.default.tag({
|
|
value: 'body'
|
|
}));
|
|
});
|
|
});
|
|
t.deepEqual(out, 'body h1');
|
|
});
|
|
(0, _ava.default)('container#walkPseudo', function (t) {
|
|
var out = (0, _helpers.parse)('a:before, a:after', function (selectors) {
|
|
selectors.walkPseudos(function (pseudo) {
|
|
pseudo.value = pseudo.value.slice(0, 2);
|
|
});
|
|
});
|
|
t.deepEqual(out, 'a:b, a:a');
|
|
});
|
|
(0, _ava.default)('container#walkTag', function (t) {
|
|
var out = (0, _helpers.parse)('1 2 3', function (selectors) {
|
|
selectors.walkTags(function (tag) {
|
|
tag.value = 'h' + tag.value;
|
|
});
|
|
});
|
|
t.deepEqual(out, 'h1 h2 h3');
|
|
});
|
|
(0, _ava.default)('container#walkUniversal', function (t) {
|
|
var out = (0, _helpers.parse)('*.class,*.class,*.class', function (selectors) {
|
|
selectors.walkUniversals(function (universal) {
|
|
universal.remove();
|
|
});
|
|
});
|
|
t.deepEqual(out, '.class,.class,.class');
|
|
});
|
|
(0, _ava.default)('container#map', function (t) {
|
|
(0, _helpers.parse)('1 2 3', function (selectors) {
|
|
var arr = selectors.first.map(function (selector) {
|
|
if (/[0-9]/.test(selector.value)) {
|
|
return 'h' + selector.value;
|
|
}
|
|
|
|
return selector.value;
|
|
});
|
|
t.deepEqual(arr, ['h1', ' ', 'h2', ' ', 'h3']);
|
|
});
|
|
});
|
|
(0, _ava.default)('container#every', function (t) {
|
|
(0, _helpers.parse)('.one.two.three', function (selectors) {
|
|
var allClasses = selectors.first.every(function (selector) {
|
|
return selector.type === 'class';
|
|
});
|
|
t.truthy(allClasses);
|
|
});
|
|
});
|
|
(0, _ava.default)('container#some', function (t) {
|
|
(0, _helpers.parse)('one#two.three', function (selectors) {
|
|
var someClasses = selectors.first.some(function (selector) {
|
|
return selector.type === 'class';
|
|
});
|
|
t.truthy(someClasses);
|
|
});
|
|
});
|
|
(0, _ava.default)('container#reduce', function (t) {
|
|
(0, _helpers.parse)('h1, h2, h3, h4', function (selectors) {
|
|
var str = selectors.reduce(function (memo, selector) {
|
|
if (selector.first.type === 'tag') {
|
|
memo += selector.first.value;
|
|
}
|
|
|
|
return memo;
|
|
}, '');
|
|
t.deepEqual(str, 'h1h2h3h4');
|
|
});
|
|
});
|
|
(0, _ava.default)('container#filter', function (t) {
|
|
(0, _helpers.parse)('h1, h2, c1, c2', function (selectors) {
|
|
var ast = selectors.filter(function (selector) {
|
|
return ~selector.first.value.indexOf('h');
|
|
});
|
|
t.deepEqual(String(ast), 'h1, h2');
|
|
});
|
|
});
|
|
(0, _ava.default)('container#split', function (t) {
|
|
(0, _helpers.parse)('h1 h2 >> h3', function (selectors) {
|
|
var list = selectors.first.split(function (selector) {
|
|
return selector.value === '>>';
|
|
}).map(function (group) {
|
|
return group.map(String);
|
|
});
|
|
t.deepEqual(list, [['h1', ' ', 'h2', ' >> '], ['h3']]);
|
|
t.deepEqual(list.length, 2);
|
|
});
|
|
});
|
|
(0, _ava.default)('container#sort', function (t) {
|
|
var out = (0, _helpers.parse)('h2,h3,h1,h4', function (selectors) {
|
|
selectors.sort(function (a, b) {
|
|
return a.first.value.slice(-1) - b.first.value.slice(-1);
|
|
});
|
|
});
|
|
t.deepEqual(out, 'h1,h2,h3,h4');
|
|
});
|
|
(0, _ava.default)('container#at', function (t) {
|
|
(0, _helpers.parse)('h1, h2, h3', function (selectors) {
|
|
t.deepEqual(selectors.at(1).first.value, 'h2');
|
|
});
|
|
});
|
|
(0, _ava.default)('container#first, container#last', function (t) {
|
|
(0, _helpers.parse)('h1, h2, h3, h4', function (selectors) {
|
|
t.deepEqual(selectors.first.first.value, 'h1');
|
|
t.deepEqual(selectors.last.last.value, 'h4');
|
|
});
|
|
});
|
|
(0, _ava.default)('container#index', function (t) {
|
|
(0, _helpers.parse)('h1 h2 h3', function (selectors) {
|
|
var middle = selectors.first.at(1);
|
|
t.deepEqual(selectors.first.index(middle), 1);
|
|
});
|
|
});
|
|
(0, _ava.default)('container#length', function (t) {
|
|
(0, _helpers.parse)('h1, h2, h3', function (selectors) {
|
|
t.deepEqual(selectors.length, 3);
|
|
});
|
|
});
|
|
(0, _ava.default)('container#removeChild', function (t) {
|
|
var out = (0, _helpers.parse)('h1.class h2.class h3.class', function (selectors) {
|
|
selectors.walk(function (selector) {
|
|
if (selector.type === 'class') {
|
|
selector.parent.removeChild(selector);
|
|
}
|
|
});
|
|
});
|
|
t.deepEqual(out, 'h1 h2 h3');
|
|
});
|
|
(0, _ava.default)('container#removeAll, container#empty', function (t) {
|
|
var wipe = function wipe(method) {
|
|
return function (selectors) {
|
|
return selectors[method]();
|
|
};
|
|
};
|
|
|
|
var out1 = (0, _helpers.parse)('h1 h2, h2 h3, h3 h4', wipe('empty'));
|
|
var out2 = (0, _helpers.parse)('h1 h2, h2 h3, h3 h4', wipe('removeAll'));
|
|
t.deepEqual(out1, '');
|
|
t.deepEqual(out2, '');
|
|
});
|
|
(0, _ava.default)('container#insertBefore', function (t) {
|
|
var out = (0, _helpers.parse)('h2', function (selectors) {
|
|
var selector = selectors.first;
|
|
var clone = selector.first.clone({
|
|
value: 'h1'
|
|
});
|
|
selectors.insertBefore(selector, clone);
|
|
});
|
|
t.deepEqual(out, 'h1,h2');
|
|
});
|
|
(0, _ava.default)('container#insertBefore and node#remove', function (t) {
|
|
var out = (0, _helpers.parse)('h2', function (selectors) {
|
|
var selector = selectors.first;
|
|
|
|
var newSel = _.default.tag({
|
|
value: 'h1'
|
|
});
|
|
|
|
selectors.insertBefore(selector, newSel);
|
|
newSel.remove();
|
|
});
|
|
t.deepEqual(out, 'h2');
|
|
});
|
|
(0, _ava.default)('container#insertAfter', function (t) {
|
|
var out = (0, _helpers.parse)('h1', function (selectors) {
|
|
var selector = selectors.first;
|
|
var clone = selector.first.clone({
|
|
value: 'h2'
|
|
});
|
|
selectors.insertAfter(selector, clone);
|
|
});
|
|
t.deepEqual(out, 'h1,h2');
|
|
});
|
|
(0, _ava.default)('container#insertAfter and node#remove', function (t) {
|
|
var out = (0, _helpers.parse)('h2', function (selectors) {
|
|
var selector = selectors.first;
|
|
|
|
var newSel = _.default.tag({
|
|
value: 'h1'
|
|
});
|
|
|
|
selectors.insertAfter(selector, newSel);
|
|
newSel.remove();
|
|
});
|
|
t.deepEqual(out, 'h2');
|
|
});
|
|
(0, _ava.default)('container#insertAfter (during iteration)', function (t) {
|
|
var out = (0, _helpers.parse)('h1, h2, h3', function (selectors) {
|
|
selectors.walkTags(function (selector) {
|
|
var attribute = _.default.attribute({
|
|
attribute: 'class'
|
|
});
|
|
|
|
selector.parent.insertAfter(selector, attribute);
|
|
});
|
|
});
|
|
t.deepEqual(out, 'h1[class], h2[class], h3[class]');
|
|
});
|
|
(0, _ava.default)('Container#atPosition first pseudo', function (t) {
|
|
(0, _helpers.parse)(':not(.foo),\n#foo > :matches(ol, ul)', function (root) {
|
|
var node = root.atPosition(1, 1);
|
|
t.deepEqual(node.type, "pseudo");
|
|
t.deepEqual(node.toString(), ":not(.foo)");
|
|
});
|
|
});
|
|
(0, _ava.default)('Container#atPosition class in pseudo', function (t) {
|
|
(0, _helpers.parse)(':not(.foo),\n#foo > :matches(ol, ul)', function (root) {
|
|
var node = root.atPosition(1, 6);
|
|
t.deepEqual(node.type, "class");
|
|
t.deepEqual(node.toString(), ".foo");
|
|
});
|
|
});
|
|
(0, _ava.default)('Container#atPosition id in second selector', function (t) {
|
|
(0, _helpers.parse)(':not(.foo),\n#foo > :matches(ol, ul)', function (root) {
|
|
var node = root.atPosition(2, 1);
|
|
t.deepEqual(node.type, "id");
|
|
t.deepEqual(node.toString(), "\n#foo");
|
|
});
|
|
});
|
|
(0, _ava.default)('Container#atPosition combinator in second selector', function (t) {
|
|
(0, _helpers.parse)(':not(.foo),\n#foo > :matches(ol, ul)', function (root) {
|
|
var node = root.atPosition(2, 6);
|
|
t.deepEqual(node.type, "combinator");
|
|
t.deepEqual(node.toString(), " > ");
|
|
var nodeSpace = root.atPosition(2, 5);
|
|
t.deepEqual(nodeSpace.type, "selector");
|
|
t.deepEqual(nodeSpace.toString(), "\n#foo > :matches(ol, ul)");
|
|
});
|
|
});
|
|
(0, _ava.default)('Container#atPosition tag in second selector pseudo', function (t) {
|
|
(0, _helpers.parse)(':not(.foo),\n#foo > :matches(ol, ul)', function (root) {
|
|
var node = root.atPosition(2, 17);
|
|
t.deepEqual(node.type, "tag");
|
|
t.deepEqual(node.toString(), "ol");
|
|
});
|
|
});
|
|
(0, _ava.default)('Container#atPosition comma in second selector pseudo', function (t) {
|
|
(0, _helpers.parse)(':not(.foo),\n#foo > :matches(ol, ul)', function (root) {
|
|
var node = root.atPosition(2, 19);
|
|
t.deepEqual(node.type, "pseudo");
|
|
t.deepEqual(node.toString(), ":matches(ol, ul)");
|
|
});
|
|
});
|