123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259 |
- "use strict";
- var _ava = _interopRequireDefault(require("ava"));
- var _index = _interopRequireDefault(require("../index"));
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
- // Node creation
- var nodeTypes = [['attribute', '[href]', {
- attribute: 'href'
- }], ['className', '.classy', {
- value: 'classy'
- }], ['combinator', ' >> ', {
- value: '>>',
- spaces: {
- before: ' ',
- after: ' '
- }
- }], ['comment', '/* comment */', {
- value: '/* comment */'
- }], ['id', '#test', {
- value: 'test'
- }], ['nesting', '&'], ['pseudo', '::before', {
- value: '::before'
- }], ['string', '"wow"', {
- value: '"wow"'
- }], ['tag', 'button', {
- value: 'button'
- }], ['universal', '*']];
- nodeTypes.forEach(function (type) {
- (0, _ava["default"])("parser#" + type[0], function (t) {
- var node = _index["default"][type[0]](type[2] || {});
- t.deepEqual(String(node), type[1]);
- });
- });
- (0, _ava["default"])('string constants', function (t) {
- t.truthy(_index["default"].TAG);
- t.truthy(_index["default"].STRING);
- t.truthy(_index["default"].SELECTOR);
- t.truthy(_index["default"].ROOT);
- t.truthy(_index["default"].PSEUDO);
- t.truthy(_index["default"].NESTING);
- t.truthy(_index["default"].ID);
- t.truthy(_index["default"].COMMENT);
- t.truthy(_index["default"].COMBINATOR);
- t.truthy(_index["default"].CLASS);
- t.truthy(_index["default"].ATTRIBUTE);
- t.truthy(_index["default"].UNIVERSAL);
- });
- (0, _ava["default"])('construct a whole tree', function (t) {
- var root = _index["default"].root();
- var selector = _index["default"].selector();
- selector.append(_index["default"].id({
- value: 'tree'
- }));
- root.append(selector);
- t.deepEqual(String(root), '#tree');
- });
- (0, _ava["default"])('no operation', function (t) {
- t.notThrows(function () {
- return (0, _index["default"])().processSync('h1 h2 h3');
- });
- });
- (0, _ava["default"])('empty selector string', function (t) {
- t.notThrows(function () {
- return (0, _index["default"])(function (selectors) {
- selectors.walk(function (selector) {
- selector.type = 'tag';
- });
- }).processSync('');
- });
- });
- (0, _ava["default"])('async parser', function (t) {
- return (0, _index["default"])(function (selectors) {
- return new Promise(function (res) {
- setTimeout(function () {
- selectors.first.nodes[0].value = 'bar';
- res();
- }, 1);
- });
- }).process('foo').then(function (result) {
- t.deepEqual(result, 'bar');
- });
- });
- (0, _ava["default"])('parse errors with the async parser', function (t) {
- return (0, _index["default"])(function (selectors) {
- return new Promise(function (res) {
- setTimeout(function () {
- selectors.first.nodes[0].value = 'bar';
- res();
- }, 1);
- });
- }).process('a b: c')["catch"](function (err) {
- return t.truthy(err);
- });
- });
- (0, _ava["default"])('parse errors within the async processor', function (t) {
- return (0, _index["default"])(function (selectors) {
- return new Promise(function (res, rej) {
- setTimeout(function () {
- rej(selectors.error("async error"));
- }, 1);
- });
- }).process('.foo')["catch"](function (err) {
- return t.truthy(err);
- });
- });
- (0, _ava["default"])('parse errors within the async processor before the promise returns', function (t) {
- return (0, _index["default"])(function (selectors) {
- throw selectors.error("async error");
- }).process('.foo')["catch"](function (err) {
- return t.truthy(err);
- });
- });
- (0, _ava["default"])('returning a promise to the sync processor fails', function (t) {
- t["throws"](function () {
- return (0, _index["default"])(function () {
- return new Promise(function (res) {
- setTimeout(function () {
- res();
- }, 1);
- });
- }).processSync('.foo');
- });
- });
- (0, _ava["default"])('Passing a rule works async', function (t) {
- var rule = {
- selector: '.foo'
- };
- return (0, _index["default"])(function (root) {
- return new Promise(function (res) {
- setTimeout(function () {
- root.walkClasses(function (node) {
- node.value = "bar";
- });
- res();
- }, 1);
- });
- }).process(rule).then(function (newSel) {
- t.deepEqual(newSel, ".bar");
- t.deepEqual(rule.selector, ".bar");
- });
- });
- (0, _ava["default"])('Passing a rule with mutation disabled works async', function (t) {
- var rule = {
- selector: '.foo'
- };
- return (0, _index["default"])(function (root) {
- return new Promise(function (res) {
- setTimeout(function () {
- root.walkClasses(function (node) {
- node.value = "bar";
- });
- res();
- }, 1);
- });
- }).process(rule, {
- updateSelector: false
- }).then(function (newSel) {
- t.deepEqual(newSel, ".bar");
- t.deepEqual(rule.selector, ".foo");
- });
- });
- (0, _ava["default"])('Passing a rule with mutation works sync', function (t) {
- var rule = {
- selector: '.foo'
- };
- var newSel = (0, _index["default"])(function (root) {
- root.walkClasses(function (node) {
- node.value = "bar";
- });
- }).processSync(rule, {
- updateSelector: true
- });
- t.deepEqual(newSel, ".bar");
- t.deepEqual(rule.selector, ".bar");
- });
- (0, _ava["default"])('Transform a selector synchronously', function (t) {
- var rule = {
- selector: '.foo'
- };
- var count = (0, _index["default"])(function (root) {
- var classCount = 0;
- root.walkClasses(function (node) {
- classCount++;
- node.value = "bar";
- });
- return classCount;
- }).transformSync(rule, {
- updateSelector: true
- });
- t.deepEqual(count, 1);
- t.deepEqual(rule.selector, ".bar");
- });
- (0, _ava["default"])('Transform a selector asynchronously', function (t) {
- var rule = {
- selector: '.foo'
- };
- return (0, _index["default"])(function (root) {
- return new Promise(function (res) {
- setTimeout(function () {
- var classCount = 0;
- root.walkClasses(function (node) {
- classCount++;
- node.value = "bar";
- });
- res(classCount);
- }, 1);
- });
- }).transform(rule, {
- updateSelector: true
- }).then(function (count) {
- t.deepEqual(count, 1);
- t.deepEqual(rule.selector, ".bar");
- });
- });
- (0, _ava["default"])('get AST of a selector synchronously', function (t) {
- var rule = {
- selector: '.foo'
- };
- var ast = (0, _index["default"])(function (root) {
- var classCount = 0;
- root.walkClasses(function (node) {
- classCount++;
- node.value = "bar";
- });
- return classCount;
- }).astSync(rule, {
- updateSelector: true
- });
- t.deepEqual(ast.nodes[0].nodes[0].value, "bar");
- t.deepEqual(rule.selector, ".bar");
- });
- (0, _ava["default"])('get AST a selector asynchronously', function (t) {
- var rule = {
- selector: '.foo'
- };
- return (0, _index["default"])(function (root) {
- return new Promise(function (res) {
- setTimeout(function () {
- var classCount = 0;
- root.walkClasses(function (node) {
- classCount++;
- node.value = "bar";
- });
- res(classCount);
- }, 1);
- });
- }).ast(rule, {
- updateSelector: true
- }).then(function (ast) {
- t.deepEqual(ast.nodes[0].nodes[0].value, "bar");
- t.deepEqual(rule.selector, ".bar");
- });
- });
|