1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92
|
var test = require('tape');
var parser = require('..');
test('ValueParser', function (tp) {
tp.test('i/o', function (t) {
var tests = [
' rgba( 34 , 45 , 54, .5 ) ',
'w1 w2 w6 \n f(4) ( ) () \t "s\'t" \'st\\"2\''
];
t.plan(tests.length);
tests.forEach(function (item) {
t.equal(item, parser(item).walk(function () {}).toString(), JSON.stringify(item));
});
});
tp.test('walk', function (t) {
t.plan(4);
var result;
result = [];
parser('fn( ) fn2( fn3())').walk(function (node) {
if (node.type === 'function') {
result.push(node);
}
});
t.deepEqual(result, [
{ type: 'function', sourceIndex: 0, value: 'fn', before: ' ', after: '', nodes: [] },
{ type: 'function', sourceIndex: 6, value: 'fn2', before: ' ', after: '', nodes: [
{ type: 'function', sourceIndex: 11, value: 'fn3', before: '', after: '', nodes: [] }
] },
{ type: 'function', sourceIndex: 11, value: 'fn3', before: '', after: '', nodes: [] }
], 'should process all functions');
result = [];
parser('fn( ) fn2( fn3())').walk(function (node) {
if (node.type === 'function') {
result.push(node);
if (node.value === 'fn2') {
return false;
}
}
return true;
});
t.deepEqual(result, [
{ type: 'function', sourceIndex: 0, value: 'fn', before: ' ', after: '', nodes: [] },
{ type: 'function', sourceIndex: 6, value: 'fn2', before: ' ', after: '', nodes: [
{ type: 'function', sourceIndex: 11, value: 'fn3', before: '', after: '', nodes: [] }
] }
], 'shouldn\'t process functions after falsy callback');
result = [];
parser('fn( ) fn2( fn3())').walk(function (node) {
if (node.type === 'function' && node.value === 'fn2') {
node.type = 'word';
}
result.push(node);
});
t.deepEqual(result, [
{ type: 'function', sourceIndex: 0, value: 'fn', before: ' ', after: '', nodes: [] },
{ type: 'space', sourceIndex: 5, value: ' ' },
{ type: 'word', sourceIndex: 6, value: 'fn2', before: ' ', after: '', nodes: [
{ type: 'function', sourceIndex: 11, value: 'fn3', before: '', after: '', nodes: [] }
] }
], 'shouldn\'t process nodes with defined non-function type');
result = [];
parser('fn2( fn3())').walk(function (node) {
if (node.type === 'function') {
result.push(node);
}
}, true);
t.deepEqual(result, [
{ type: 'function', sourceIndex: 5, value: 'fn3', before: '', after: '', nodes: [] },
{ type: 'function', sourceIndex: 0, value: 'fn2', before: ' ', after: '', nodes: [
{ type: 'function', sourceIndex: 5, value: 'fn3', before: '', after: '', nodes: [] }
] }
], 'should process all functions with reverse mode');
});
});
|