canonical
Version:
Canonical code style linter and formatter for JavaScript, SCSS, CSS and JSON.
1,677 lines (1,235 loc) • 35.3 kB
JavaScript
'use strict';
var assert = require('assert'),
helpers = require('../lib/helpers'),
gonzales = require('gonzales-pe');
var haystack = [
{
prop: 'a',
propb: 'b'
},
{
prop: 'c',
propb: 'd'
}
];
var idNode = gonzales.createNode({
type: 'id',
content: [
gonzales.createNode({
type: 'ident',
content: 'header',
syntax: 'scss',
start: {
line: 1,
column: 2
},
end: {
line: 1,
column: 7
}
})
],
syntax: 'scss',
start: {
line: 1,
column: 1
},
end: {
line: 1,
column: 7
}
});
var identNode = gonzales.createNode({
type: 'ident',
content: 'input',
syntax: 'scss',
start: {
line: 1,
column: 1
},
end: {
line: 1,
column: 5
}
});
var classNode = gonzales.createNode({
type: 'class',
content: [
gonzales.createNode({
type: 'ident',
content: 'header',
syntax: 'scss',
start: {
line: 1,
column: 2
},
end: {
line: 1,
column: 7
}
})
],
syntax: 'scss',
start: {
line: 1,
column: 1
},
end: {
line: 1,
column: 7
}
});
var attributeNode = gonzales.createNode({
type: 'attribute',
content: [
gonzales.createNode({
type: 'ident',
content: 'type',
syntax: 'scss',
start: {
line: 1,
column: 7
},
end: {
line: 1,
column: 10
}
}),
gonzales.createNode({
type: 'attributeSelector',
content: '=',
syntax: 'scss',
start: {
line: 1,
column: 11
},
end: {
line: 1,
column: 11
}
}),
gonzales.createNode({
type: 'ident',
content: 'radio',
syntax: 'scss',
start: {
line: 1,
column: 12
},
end: {
line: 1,
column: 16
}
})
],
syntax: 'scss',
start: {
line: 1,
column: 6
},
end: {
line: 1,
column: 17
}
});
var pseudoNode = gonzales.createNode({
type: 'pseudoClass',
content: [
gonzales.createNode({
type: 'ident',
content: 'last-child',
syntax: 'scss',
start: {
line: 1,
column: 3
},
end: {
line: 1,
column: 12
}
})
],
syntax: 'scss',
start: {
line: 1,
column: 2
},
end: {
line: 1,
column: 12
}
});
var pseudoElementNode = gonzales.createNode({
type: 'pseudoElement',
content: [
gonzales.createNode({
type: 'ident',
content: 'first-line',
syntax: 'scss',
start: {
line: 1,
column: 3
},
end: {
line: 1,
column: 12
}
})
],
syntax: 'scss',
start: {
line: 1,
column: 2
},
end: {
line: 1,
column: 12
}
});
var nthSelectorNode = gonzales.createNode({
type: 'nthSelector',
content: [
gonzales.createNode({
type: 'ident',
content: 'nth-of-type',
syntax: 'scss',
start: {
line: 1,
column: 3
},
end: {
line: 1,
column: 13
}
}),
gonzales.createNode({
type: 'nth',
content: '2',
syntax: 'scss',
start: {
line: 1,
column: 15
},
end: {
line: 1,
column: 15
}
})
],
syntax: 'scss',
start: {
line: 1,
column: 2
},
end: {
line: 1,
column: 16
}
});
var spaceNode = gonzales.createNode({
type: 'space',
content: ' ',
syntax: 'scss',
start: {
line: 1,
column: 1
},
end: {
line: 1,
column: 1
}
});
var parentSelectorNode = gonzales.createNode({
type: 'parentSelector',
content: '&',
syntax: 'scss',
start: {
line: 1,
column: 1
},
end: {
line: 1,
column: 1
}
});
var combinatorNode = gonzales.createNode({
type: 'combinator',
content: '+',
syntax: 'scss',
start: {
line: 1,
column: 6
},
end: {
line: 1,
column: 6
}
});
var classBlock =
{
type: 'class',
content:
[
{
type: 'ident',
content: 'foo',
syntax: 'scss',
start: { line: 5, column: 2 },
end: { line: 5, column: 4 },
indexHasChanged: [ 0 ]
}
],
syntax: 'scss',
start: { line: 5, column: 1 },
end: { line: 5, column: 4 },
indexHasChanged: [ 0 ]
},
otherClassBlock =
{
type: 'class',
content:
[
{
type: 'ident',
content: 'test',
syntax: 'scss',
start: { line: 9, column: 2 },
end: { line: 9, column: 5 },
indexHasChanged: [ 0 ]
}
],
syntax: 'scss',
start: { line: 9, column: 1 },
end: { line: 9, column: 5 },
indexHasChanged: [ 0 ]
};
var nodeSimpleSelector = {
type: 'simpleSelector',
content:
[
{
type: 'ident',
content: 'h1',
syntax: 'scss',
start: { line: 16, column: 1 },
end: { line: 16, column: 2 },
indexHasChanged: [ 0 ]
}
],
syntax: 'scss',
start: { line: 16, column: 1 },
end: { line: 16, column: 2 },
indexHasChanged: [ 0 ]
},
nodeDelim = {
type: 'delimiter',
content: ',',
syntax: 'scss',
start: { line: 16, column: 3 },
end: { line: 16, column: 3 },
indexHasChanged: [ 0 ]
},
nodeSpace = {
type: 'space',
content: ' ',
syntax: 'scss',
start: { line: 225, column: 5 },
end: { line: 225, column: 5 },
indexHasChanged: [ 0 ]
};
var detectTestA = {
line: 1,
column: 1
},
detectTestB = {
line: 2,
column: 2
},
detectTestC = {
line: 1,
column: 2
};
describe('helpers', function () {
//////////////////////////////
// Helpers is loaded
//////////////////////////////
it('helpers should not be undefined', function (done) {
var loaded = typeof (helpers) === 'object' ? true : false;
assert.equal(true, loaded);
done();
});
//////////////////////////////
// propertySearch
//////////////////////////////
it('propertySearch should not find a property', function (done) {
var needle = 'e',
property = 'prop',
result = helpers.propertySearch(haystack, needle, property);
assert.equal(-1, result);
done();
});
it('propertySearch should find a property', function (done) {
var needle = 'a',
property = 'prop',
result = helpers.propertySearch(haystack, needle, property);
assert.equal(0, result);
done();
});
it('propertySearch should find a deeper property', function (done) {
var needle = 'd',
property = 'propb',
result = helpers.propertySearch(haystack, needle, property);
assert.equal(1, result);
done();
});
//////////////////////////////
// isEqual
//////////////////////////////
it('isEqual should return true', function (done) {
var testBlock =
{
type: 'class',
content:
[
{
type: 'ident',
content: 'foo',
syntax: 'scss',
start: { line: 5, column: 2 },
end: { line: 5, column: 4 },
indexHasChanged: [ 0 ]
}
],
syntax: 'scss',
start: { line: 5, column: 1 },
end: { line: 5, column: 4 },
indexHasChanged: [ 0 ]
},
result = helpers.isEqual(classBlock, testBlock);
assert.equal(true, result);
done();
});
it('isEqual should return false - [objA.type !== objB.type]', function (done) {
var testBlock = {
type: 'block',
start: {line: 5},
end: {line: 5},
content: [1]
},
result = helpers.isEqual(classBlock, testBlock);
assert.equal(false, result);
done();
});
it('isEqual should return false - [objA.start.line !== objB.start.line]', function (done) {
var testBlock = {
type: 'class',
start: {line: 7},
end: {line: 5},
content: [1]
},
result = helpers.isEqual(classBlock, testBlock);
assert.equal(false, result);
done();
});
it('isEqual should return false - [objA.end.line !== objB.end.line]', function (done) {
var testBlock = {
type: 'class',
start: {line: 5},
end: {line: 7},
content: [1]
},
result = helpers.isEqual(classBlock, testBlock);
assert.equal(false, result);
done();
});
it('isEqual should return false - [objA.content.length !== objB.content.length]', function (done) {
var testBlock = {
type: 'class',
start: {line: 5},
end: {line: 5},
content: [1, 2, 3, 4]
},
result = helpers.isEqual(classBlock, testBlock);
assert.equal(false, result);
done();
});
//////////////////////////////
// isUnique
//////////////////////////////
it('isUnique should return false - [objA === objB]', function (done) {
var ledger = [];
ledger.push(classBlock);
var result = helpers.isUnique(ledger, classBlock);
assert.equal(false, result);
done();
});
it('isUnique should return true - [objA !== objB]', function (done) {
var ledger = [];
ledger.push(classBlock);
var result = helpers.isUnique(ledger, otherClassBlock);
assert.equal(false, result);
done();
});
//////////////////////////////
// addUnique
//////////////////////////////
it('addUnique should return a modified results array - [objA !== objB]', function (done) {
var ledger = [];
ledger.push(classBlock);
var result = helpers.addUnique(ledger, otherClassBlock);
ledger.push(otherClassBlock);
assert.equal(ledger, result);
done();
});
it('addUnique should return an unmodified results array - [objA === objB]', function (done) {
var ledger = [];
ledger.push(classBlock);
var result = helpers.addUnique(ledger, classBlock);
assert.equal(ledger, result);
done();
});
//////////////////////////////
// sortDetects
//////////////////////////////
it('sortDetects should return -1 - [a.line < b.line]', function (done) {
var result = helpers.sortDetects(detectTestA, detectTestB);
assert.equal(-1, result);
done();
});
it('sortDetects should return 1 - [a.line > b.line]', function (done) {
var result = helpers.sortDetects(detectTestB, detectTestA);
assert.equal(1, result);
done();
});
it('sortDetects should return 0 - [a === b]', function (done) {
var result = helpers.sortDetects(detectTestA, detectTestA);
assert.equal(0, result);
done();
});
it('sortDetects should return -1 - [a.column < b.column]', function (done) {
var result = helpers.sortDetects(detectTestA, detectTestC);
assert.equal(-1, result);
done();
});
it('sortDetects should return 1 - [a.column > b.column]', function (done) {
var result = helpers.sortDetects(detectTestC, detectTestA);
assert.equal(1, result);
done();
});
//////////////////////////////
// isNumber
//////////////////////////////
it('isNumber - [10 - true]', function (done) {
var result = helpers.isNumber(10);
assert.equal(true, result);
done();
});
it('isNumber - [\'10\' - true]', function (done) {
var result = helpers.isNumber('10');
assert.equal(true, result);
done();
});
it('isNumber - [\'ten\' - false]', function (done) {
var result = helpers.isNumber('ten');
assert.equal(false, result);
done();
});
it('isNumber - [\'ff00ff\' - false]', function (done) {
var result = helpers.isNumber('ff00ff');
assert.equal(false, result);
done();
});
//////////////////////////////
// isUpperCase
//////////////////////////////
it('isUpperCase - [\'TEST\' - true]', function (done) {
var result = helpers.isUpperCase('TEST');
assert.equal(true, result);
done();
});
it('isUpperCase - [\'test\' - false]', function (done) {
var result = helpers.isUpperCase('test');
assert.equal(false, result);
done();
});
it('isUpperCase - [abcDEF - false]', function (done) {
var result = helpers.isUpperCase('abcDEF');
assert.equal(false, result);
done();
});
it('isUpperCase - [\'123\' - false]', function (done) {
var result = helpers.isUpperCase('123');
assert.equal(false, result);
done();
});
//////////////////////////////
// isLowerCase
//////////////////////////////
it('isLowerCase - [\'TEST\' - false]', function (done) {
var result = helpers.isLowerCase('TEST');
assert.equal(false, result);
done();
});
it('isLowerCase - [\'test\' - true]', function (done) {
var result = helpers.isLowerCase('test');
assert.equal(true, result);
done();
});
it('isLowerCase - [abcDEF - false]', function (done) {
var result = helpers.isLowerCase('abcDEF');
assert.equal(false, result);
done();
});
it('isLowerCase - [\'123\' - false]', function (done) {
var result = helpers.isLowerCase('123');
assert.equal(false, result);
done();
});
//////////////////////////////
// isCamelCase
//////////////////////////////
it('isCamelCase - [\'TEST\' - false]', function (done) {
var result = helpers.isCamelCase('TEST');
assert.equal(false, result);
done();
});
it('isCamelCase - [\'test\' - true]', function (done) {
var result = helpers.isCamelCase('test');
assert.equal(true, result);
done();
});
it('isCamelCase - [abcDEF - true]', function (done) {
var result = helpers.isCamelCase('abcDEF');
assert.equal(true, result);
done();
});
it('isCamelCase - [\'123\' - false]', function (done) {
var result = helpers.isCamelCase('123');
assert.equal(false, result);
done();
});
it('isCamelCase - [\'aBcDeF\' - true]', function (done) {
var result = helpers.isCamelCase('aBcDeF');
assert.equal(true, result);
done();
});
//////////////////////////////
// isHyphenatedLowercase
//////////////////////////////
it('isHyphenatedLowercase - [\'abc-def\' - true]', function (done) {
var result = helpers.isHyphenatedLowercase('abc-def');
assert.equal(true, result);
done();
});
it('isHyphenatedLowercase - [\'TEST\' - false]', function (done) {
var result = helpers.isHyphenatedLowercase('TEST');
assert.equal(false, result);
done();
});
it('isHyphenatedLowercase - [\'test\' - true]', function (done) {
var result = helpers.isHyphenatedLowercase('test');
assert.equal(true, result);
done();
});
it('isHyphenatedLowercase - [abcDEF - false]', function (done) {
var result = helpers.isHyphenatedLowercase('abcDEF');
assert.equal(false, result);
done();
});
it('isHyphenatedLowercase - [\'123\' - true]', function (done) {
var result = helpers.isHyphenatedLowercase('123');
assert.equal(true, result);
done();
});
it('isHyphenatedLowercase - [\'aBcDeF\' - false]', function (done) {
var result = helpers.isHyphenatedLowercase('aBcDeF');
assert.equal(false, result);
done();
});
it('isHyphenatedLowercase - [\'abc-\\31\\32\\33\' - false]', function (done) {
var result = helpers.isHyphenatedLowercase('abc-\\31\\32\\33');
assert.equal(false, result);
done();
});
it('isHyphenatedLowercase - [\'abc-\\+\\*\' - false]', function (done) {
var result = helpers.isHyphenatedLowercase('abc-\\+\\*');
assert.equal(false, result);
done();
});
//////////////////////////////
// isSnakeCase
//////////////////////////////
it('isSnakeCase - [\'TEST\' - false]', function (done) {
var result = helpers.isSnakeCase('TEST');
assert.equal(false, result);
done();
});
it('isSnakeCase - [\'test\' - true]', function (done) {
var result = helpers.isSnakeCase('test');
assert.equal(true, result);
done();
});
it('isSnakeCase - [abcDEF - false]', function (done) {
var result = helpers.isSnakeCase('abcDEF');
assert.equal(false, result);
done();
});
it('isSnakeCase - [\'123\' - true]', function (done) {
var result = helpers.isSnakeCase('123');
assert.equal(true, result);
done();
});
it('isSnakeCase - [\'ab_cd_ef\' - true]', function (done) {
var result = helpers.isSnakeCase('ab_cd_ef');
assert.equal(true, result);
done();
});
it('isSnakeCase - [\'ab_cd-ef\' - false]', function (done) {
var result = helpers.isSnakeCase('ab_cd-ef');
assert.equal(false, result);
done();
});
//////////////////////////////
// isHyphenatedBEM
//////////////////////////////
it('isHyphenatedBEM - [\'TEST\' - false]', function (done) {
var result = helpers.isHyphenatedBEM('TEST');
assert.equal(false, result);
done();
});
it('isHyphenatedBEM - [\'test\' - true]', function (done) {
var result = helpers.isHyphenatedBEM('test');
assert.equal(true, result);
done();
});
it('isHyphenatedBEM - [abcDEF - false]', function (done) {
var result = helpers.isHyphenatedBEM('abcDEF');
assert.equal(false, result);
done();
});
it('isHyphenatedBEM - [\'abc---def\' - false]', function (done) {
var result = helpers.isHyphenatedBEM('abc---def');
assert.equal(false, result);
done();
});
it('isHyphenatedBEM - [\'abc___def\' - false]', function (done) {
var result = helpers.isHyphenatedBEM('abc___def');
assert.equal(false, result);
done();
});
it('isHyphenatedBEM - [\'ab__cd__ef\' - true]', function (done) {
var result = helpers.isHyphenatedBEM('ab__cd__ef');
assert.equal(true, result);
done();
});
it('isHyphenatedBEM - [\'ab__cd--ef\' - true]', function (done) {
var result = helpers.isHyphenatedBEM('ab__cd--ef');
assert.equal(true, result);
done();
});
it('isHyphenatedBEM - [\'abc_def\' - false]', function (done) {
var result = helpers.isHyphenatedBEM('abc_def');
assert.equal(false, result);
done();
});
it('isHyphenatedBEM - [\'abc-def\' - true]', function (done) {
var result = helpers.isHyphenatedBEM('abc-def');
assert.equal(true, result);
done();
});
it('isHyphenatedBEM - [\'ab-cd__ef\' - true]', function (done) {
var result = helpers.isHyphenatedBEM('ab-cd__ef');
assert.equal(true, result);
done();
});
//////////////////////////////
// isStrictBEM
//////////////////////////////
it('isStrictBEM - [\'TEST\' - false]', function (done) {
var result = helpers.isStrictBEM('TEST');
assert.equal(false, result);
done();
});
it('isStrictBEM - [\'test\' - true]', function (done) {
var result = helpers.isStrictBEM('test');
assert.equal(true, result);
done();
});
it('isStrictBEM - [abcDEF - false]', function (done) {
var result = helpers.isStrictBEM('abcDEF');
assert.equal(false, result);
done();
});
it('isStrictBEM - [\'abc---def\' - false]', function (done) {
var result = helpers.isStrictBEM('abc---def');
assert.equal(false, result);
done();
});
it('isStrictBEM - [\'abc___def\' - false]', function (done) {
var result = helpers.isStrictBEM('abc___def');
assert.equal(false, result);
done();
});
it('isStrictBEM - [\'ab__cd__ef\' - false]', function (done) {
var result = helpers.isStrictBEM('ab__cd__ef');
assert.equal(false, result);
done();
});
it('isStrictBEM - [\'ab__cd--ef\' - false]', function (done) {
var result = helpers.isStrictBEM('ab__cd--ef');
assert.equal(false, result);
done();
});
it('isStrictBEM - [\'ab__cd_ef_gh\' - true]', function (done) {
var result = helpers.isStrictBEM('ab__cd_ef_gh');
assert.equal(true, result);
done();
});
it('isStrictBEM - [\'ab-cd-ef__gh-ij-kl_mn-op-qr_st-uv-wx\' - true]', function (done) {
var result = helpers.isStrictBEM('ab-cd-ef__gh-ij-kl_mn-op-qr_st-uv-wx');
assert.equal(true, result);
done();
});
it('isStrictBEM - [\'ab__cd_ef_gh_ij\' - false]', function (done) {
var result = helpers.isStrictBEM('ab__cd_ef_gh_ij');
assert.equal(false, result);
done();
});
it('isStrictBEM - [\'abc_def\' - false]', function (done) {
var result = helpers.isStrictBEM('abc_def');
assert.equal(false, result);
done();
});
it('isStrictBEM - [\'abc-def\' - true]', function (done) {
var result = helpers.isStrictBEM('abc-def');
assert.equal(true, result);
done();
});
it('isStrictBEM - [\'ab-cd__ef\' - true]', function (done) {
var result = helpers.isStrictBEM('ab-cd__ef');
assert.equal(true, result);
done();
});
//////////////////////////////
// isValidHex
//////////////////////////////
it('isValidHex - [\'abcdef\' - true]', function (done) {
var result = helpers.isValidHex('abcdef');
assert.equal(true, result);
done();
});
it('isValidHex - [\'ABCDEF\' - true]', function (done) {
var result = helpers.isValidHex('ABCDEF');
assert.equal(true, result);
done();
});
it('isValidHex - [\'123456\' - true]', function (done) {
var result = helpers.isValidHex('123456');
assert.equal(true, result);
done();
});
it('isValidHex - [\'ABC123\' - true]', function (done) {
var result = helpers.isValidHex('ABC123');
assert.equal(true, result);
done();
});
it('isValidHex - [\'abc123\' - true]', function (done) {
var result = helpers.isValidHex('abc123');
assert.equal(true, result);
done();
});
it('isValidHex - [\'fff\' - true]', function (done) {
var result = helpers.isValidHex('fff');
assert.equal(true, result);
done();
});
it('isValidHex - [\'123\' - true]', function (done) {
var result = helpers.isValidHex('123');
assert.equal(true, result);
done();
});
it('isValidHex - [\'efghij\' - false]', function (done) {
var result = helpers.isValidHex('efghij');
assert.equal(false, result);
done();
});
it('isValidHex - [\'thj\' - false]', function (done) {
var result = helpers.isValidHex('thj');
assert.equal(false, result);
done();
});
it('isValidHex - [\'ab\' - false]', function (done) {
var result = helpers.isValidHex('ab');
assert.equal(false, result);
done();
});
it('isValidHex - [\'12\' - false]', function (done) {
var result = helpers.isValidHex('12');
assert.equal(false, result);
done();
});
it('isValidHex - [\'1234567\' - false]', function (done) {
var result = helpers.isValidHex('1234567');
assert.equal(false, result);
done();
});
it('isValidHex - [\'abc1234\' - false]', function (done) {
var result = helpers.isValidHex('abc1234');
assert.equal(false, result);
done();
});
//////////////////////////////
// loadConfigFile
//////////////////////////////
it('loadConfigFile', function (done) {
var result = helpers.loadConfigFile('../../tests/testFile.txt'),
expect = 'This is a test file that test\'s the loadConfigFile helper function.';
assert.equal(expect, result);
done();
});
//////////////////////////////
// hasEOL
//////////////////////////////
it('hasEOL - [\'\\n\' - true]', function (done) {
var result = helpers.hasEOL('\n');
assert.equal(true, result);
done();
});
it('hasEOL - [\'\\r\\n\' - true]', function (done) {
var result = helpers.hasEOL('\r\n');
assert.equal(true, result);
done();
});
//////////////////////////////
// isEmptyLine
//////////////////////////////
it('isEmptyLine - [\'\\n\\n\' - true]', function (done) {
var result = helpers.isEmptyLine('\n\n');
assert.equal(true, result);
done();
});
it('isEmptyLine - [\'\\r\\n\\r\\n\' - true]', function (done) {
var result = helpers.isEmptyLine('\r\n\r\n');
assert.equal(true, result);
done();
});
it('isEmptyLine - [\'\\n \\n\' - false]', function (done) {
var result = helpers.isEmptyLine('\n \n');
assert.equal(false, result);
done();
});
it('isEmptyLine - [\'\\r\\nabc\\r\\n\' - false]', function (done) {
var result = helpers.isEmptyLine('\r\nabc\r\n');
assert.equal(false, result);
done();
});
//////////////////////////////
// Strip quotes
//////////////////////////////
it('stripQuotes - [double quotes]', function (done) {
var result = helpers.stripQuotes('"This is a string"'),
expect = 'This is a string';
assert.equal(expect, result);
done();
});
it('stripQuotes - [single quotes]', function (done) {
var result = helpers.stripQuotes('\'This is a string\''),
expect = 'This is a string';
assert.equal(expect, result);
done();
});
//////////////////////////////
// stripPrefix
//////////////////////////////
it('stripPrefix - [-webkit-transition - transition]', function (done) {
var result = helpers.stripPrefix('-webkit-transition');
assert.equal('transition', result);
done();
});
it('stripPrefix - [-moz-transition - transition]', function (done) {
var result = helpers.stripPrefix('-moz-transition');
assert.equal('transition', result);
done();
});
it('stripPrefix - [-webkit-border-color - border-color]', function (done) {
var result = helpers.stripPrefix('-webkit-border-color');
assert.equal('border-color', result);
done();
});
//////////////////////////////
// stripLastSpace
//////////////////////////////
it('stripLastSpace - [\'selector \']', function (done) {
var result = helpers.stripLastSpace('selector ');
assert.equal('selector', result);
done();
});
it('stripLastSpace - [\'selector test \']', function (done) {
var result = helpers.stripLastSpace('selector test');
assert.equal('selector test', result);
done();
});
it('stripLastSpace - [\'selector\']', function (done) {
var result = helpers.stripLastSpace('selector');
assert.equal('selector', result);
done();
});
it('stripLastSpace - [\'selector test\']', function (done) {
var result = helpers.stripLastSpace('selector test');
assert.equal('selector test', result);
done();
});
//////////////////////////////
// mapDelims
//////////////////////////////
it('mapDelims - selector', function (done) {
var result = helpers.mapDelims(nodeSimpleSelector);
assert.equal('s', result);
done();
});
it('mapDelims - delim', function (done) {
var result = helpers.mapDelims(nodeDelim);
assert.equal('d', result);
done();
});
it('mapDelims - space', function (done) {
var result = helpers.mapDelims(nodeSpace);
assert.equal(false, result);
done();
});
//////////////////////////////
// isNestable
//////////////////////////////
it('isNestable - nest attribute in selector', function (done) {
var elements = ['selector', 'class', 'id', 'attribute'],
nestable = ['class', 'selector', 'attribute'],
previous = 'selector',
current = 'attribute';
var result = helpers.isNestable(current, previous, elements, nestable);
assert.equal(true, result);
done();
});
it('isNestable - nest id in class', function (done) {
var elements = ['selector', 'class', 'id', 'attribute'],
nestable = ['class', 'selector', 'attribute'],
previous = 'class',
current = 'id';
var result = helpers.isNestable(current, previous, elements, nestable);
assert.equal(false, result);
done();
});
//////////////////////////////
// constructSelector
//////////////////////////////
it('constructSelector - id node - [#header]', function (done) {
var result = helpers.constructSelector(idNode),
expect = '#header';
assert.equal(expect, result.content);
done();
});
it('constructSelector - id node - [id]', function (done) {
var result = helpers.constructSelector(idNode),
expect = 'id';
assert.equal(expect, result.type);
done();
});
it('constructSelector - class node - [.header]', function (done) {
var result = helpers.constructSelector(classNode),
expect = '.header';
assert.equal(expect, result.content);
done();
});
it('constructSelector - class node - [class]', function (done) {
var result = helpers.constructSelector(classNode),
expect = 'class';
assert.equal(expect, result.type);
done();
});
it('constructSelector - ident node - [input]', function (done) {
var result = helpers.constructSelector(identNode),
expect = 'input';
assert.equal(expect, result.content);
done();
});
it('constructSelector - ident node - [selector]', function (done) {
var result = helpers.constructSelector(identNode),
expect = 'selector';
assert.equal(expect, result.type);
done();
});
it('constructSelector - attribute node - [type=radio]', function (done) {
var result = helpers.constructSelector(attributeNode),
expect = '[type=radio]';
assert.equal(expect, result.content);
done();
});
it('constructSelector - attribute node - [attribute]', function (done) {
var result = helpers.constructSelector(attributeNode),
expect = 'attribute';
assert.equal(expect, result.type);
done();
});
it('constructSelector - pseudo node - [:last-child]', function (done) {
var result = helpers.constructSelector(pseudoNode),
expect = ':last-child';
assert.equal(expect, result.content);
done();
});
it('constructSelector - pseudo node - [pseudoClass]', function (done) {
var result = helpers.constructSelector(pseudoNode),
expect = 'pseudoClass';
assert.equal(expect, result.type);
done();
});
it('constructSelector - pseudo element node - [::first-line]', function (done) {
var result = helpers.constructSelector(pseudoElementNode),
expect = '::first-line';
assert.equal(expect, result.content);
done();
});
it('constructSelector - pseudo element node - [pseudoElement]', function (done) {
var result = helpers.constructSelector(pseudoElementNode),
expect = 'pseudoElement';
assert.equal(expect, result.type);
done();
});
it('constructSelector - nthSelector node - [:nth-of-type(2)]', function (done) {
var result = helpers.constructSelector(nthSelectorNode),
expect = ':nth-of-type(2)';
assert.equal(expect, result.content);
done();
});
it('constructSelector - nthSelector node - [nthSelector]', function (done) {
var result = helpers.constructSelector(nthSelectorNode),
expect = 'nthSelector';
assert.equal(expect, result.type);
done();
});
it('constructSelector - space node - [ ]', function (done) {
var result = helpers.constructSelector(spaceNode),
expect = ' ';
assert.equal(expect, result.content);
done();
});
it('constructSelector - space node - []', function (done) {
var result = helpers.constructSelector(spaceNode),
expect = '';
assert.equal(expect, result.type);
done();
});
it('constructSelector - parent selector node - [&]', function (done) {
var result = helpers.constructSelector(parentSelectorNode),
expect = '&';
assert.equal(expect, result.content);
done();
});
it('constructSelector - parent selector node - [parentSelector]', function (done) {
var result = helpers.constructSelector(parentSelectorNode),
expect = 'parentSelector';
assert.equal(expect, result.type);
done();
});
it('constructSelector - combinator node - [+]', function (done) {
var result = helpers.constructSelector(combinatorNode),
expect = '+';
assert.equal(expect, result.content);
done();
});
it('constructSelector - combinator node - [combinator]', function (done) {
var result = helpers.constructSelector(combinatorNode),
expect = 'combinator';
assert.equal(expect, result.type);
done();
});
//////////////////////////////
// attemptTraversal
//////////////////////////////
it('attemptTraversal - collect all nodes', function () {
var stylesheet = gonzales.parse(['',
'.a {',
' .b {',
' color: red;',
' }',
' .c {',
' color: blue;',
' }',
' .d {',
' color: green;',
' }',
'}'].join('\n'), { syntax: 'scss' });
assert.deepEqual(
helpers.attemptTraversal(stylesheet, ['ruleset', 'block', 'ruleset', 'block', 'declaration', 'property', 'ident'])
.map(function (node) {
return node.content;
}),
['color', 'color', 'color']
);
});
it('attemptTraversal - empty array when traversal fails', function () {
var stylesheet = gonzales.parse(['',
'.a {',
' color: red;',
'}'].join('\n'), { syntax: 'scss' });
assert.equal(
helpers.attemptTraversal(stylesheet, ['ruleset', 'block', 'ruleset', 'block']).length,
0
);
});
//////////////////////////////
// collectSuffixExtensions
//////////////////////////////
it('collectSuffixExtensions - no extensions', function () {
var ruleset = gonzales.parse(['',
'.a {',
' .b {',
' .c {',
' width: 2px;',
' }',
' }',
'}'].join('\n'), { syntax: 'scss' })
.first('ruleset');
assert.deepEqual(
helpers.collectSuffixExtensions(ruleset, 'class').map(function (node) {
return node.content;
}),
['a']
);
});
it('collectSuffixExtensions - BEM example', function () {
var ruleset = gonzales.parse(['',
'.block {',
' &__element {',
' &--modifier {',
' width: 2px;',
' }',
' }',
'}'].join('\n'), { syntax: 'scss' })
.first('ruleset');
assert.deepEqual(
helpers.collectSuffixExtensions(ruleset, 'class').map(function (node) {
return node.content;
}),
['block', 'block__element', 'block__element--modifier']
);
});
it('collectSuffixExtensions - many parents and children', function () {
var ruleset = gonzales.parse(['',
'.a,',
'.b {',
' &c,',
' &d {',
' &e,',
' &f {',
' width: 2px;',
' }',
' }',
'}'].join('\n'), { syntax: 'scss' })
.first('ruleset');
assert.deepEqual(
helpers.collectSuffixExtensions(ruleset, 'class').map(function (node) {
return node.content;
}),
['a', 'b', 'ac', 'bc', 'ad', 'bd', 'ace', 'bce', 'ade', 'bde', 'acf', 'bcf', 'adf', 'bdf']
);
});
});