twreporter-react
Version:
React-Redux site for The Reporter Foundation in Taiwan
131 lines (112 loc) • 4.7 kB
JavaScript
var assert = require("assert");
var path = require("path");
var fixtures = path.resolve("test/fixtures");
var files = {
'a.scss': path.join(fixtures, 'a.scss'),
'b.scss': path.join(fixtures, 'b.scss'),
'_c.scss': path.join(fixtures, '_c.scss'),
'd.scss': path.join(fixtures, 'd.scss'),
'_e.scss': path.join(fixtures, 'components/_e.scss'),
'f.scss': path.join(fixtures, 'f.scss'),
'g.scss': path.join(fixtures, 'g.scss'),
'_h.scss': path.join(fixtures, 'nested/_h.scss'),
'_i.scss': path.join(fixtures, 'nested/_i.scss'),
'i.scss': path.join(fixtures, '_i.scss'),
'j.scss': path.join(fixtures, 'j.scss'),
'k.l.scss': path.join(fixtures, 'components/k.l.scss'),
'm.scss': path.join(fixtures, 'm.scss'),
'_n.scss': path.join(fixtures, 'compass/_n.scss'),
'_p.scss': path.join(fixtures, '_o.scss/_p.scss'),
'r.scss': path.join(fixtures, 'r.scss'),
'_s.scss': path.join(fixtures, 'components/_q.scss/_s.scss'),
'_compass.scss': path.join(fixtures, 'components/_compass.scss')
}
describe('sass-graph', function(){
var sassGraph = require('../sass-graph');
describe('parsing a graph of all scss files', function(){
var graph = sassGraph.parseDir(fixtures, {loadPaths: [fixtures + '/components']});
it('should have all files', function(){
assert.equal(Object.keys(files).length, Object.keys(graph.index).length);
})
it('should have the correct imports for a.scss', function() {
assert.deepEqual([files['b.scss']], graph.index[files['a.scss']].imports);
});
it('should have the correct importedBy for _c.scss', function() {
assert.deepEqual([files['b.scss']], graph.index[files['_c.scss']].importedBy);
});
it('should have the correct (nested) imports for g.scss', function() {
var expectedDescendents = [files['_h.scss'], files['_i.scss']];
var descendents = [];
graph.visitDescendents(files['g.scss'], function (imp) {
descendents.push(imp);
assert.notEqual(expectedDescendents.indexOf(imp), -1);
});
});
it('should ignore custom imports for m.scss', function() {
assert.deepEqual([files['_compass.scss'] , files['_n.scss']], graph.index[files['m.scss']].imports);
});
it('should ignore folder "_q.scss" which has allowed extensions (but not it’s children), referenced from r.scss', function() {
assert.deepEqual([files['_compass.scss'], files['_s.scss']], graph.index[files['r.scss']].imports);
});
it('should traverse ancestors of _c.scss', function() {
ancestors = [];
graph.visitAncestors(files['_c.scss'], function(k) {
ancestors.push(k);
})
assert.deepEqual([files['b.scss'], files['a.scss']], ancestors);
});
it('should prioritize cwd', function() {
var expectedDescendents = [files['_i.scss']];
var descendents = [];
graph.visitDescendents(files['_h.scss'], function (imp) {
descendents.push(imp);
assert.notEqual(expectedDescendents.indexOf(imp), -1);
});
});
})
describe('parseFile', function () {
it('should parse imports', function () {
var graph = sassGraph.parseFile(files['a.scss']);
var expectedDescendents = [files['b.scss'], files['_c.scss']];
var descendents = [];
graph.visitDescendents(files['a.scss'], function (imp) {
descendents.push(imp);
assert.notEqual(expectedDescendents.indexOf(imp), -1);
});
assert.equal(expectedDescendents.length, descendents.length);
});
});
describe('parseFile', function () {
it('should parse imports with loadPaths', function () {
var graph = sassGraph.parseFile(files['d.scss'], {loadPaths: [fixtures + '/components']} );
var expectedDescendents = [files['_e.scss']];
var descendents = [];
graph.visitDescendents(files['d.scss'], function (imp) {
descendents.push(imp);
assert.notEqual(expectedDescendents.indexOf(imp), -1);
});
assert.equal(expectedDescendents.length, descendents.length);
});
});
describe('parseFile', function () {
it('should thow an error', function () {
try {
var graph = sassGraph.parseFile(files['d.scss']);
} catch (e) {
assert.equal(e, "File to import not found or unreadable: e");
}
});
});
describe('parseFile', function () {
it('should not throw an error for a file with no dependencies with Array having added functions', function () {
try {
Array.prototype.foo = function() {
return false;
}
var graph = sassGraph.parseFile(files['f.scss']);
} catch (e) {
assert.fail("Error: " + e);
}
});
});
});