Description
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

4 years ago
"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)");
});
});