@sencha/cmd-linux-64
Version:
Productivity and performance optimization tool for building applications with Sencha Ext JS
148 lines (126 loc) • 5.26 kB
JavaScript
var Fashion = require('../../index.js');
var assert = require('assert'),
fs = require('fs'),
Path = require('path');
var beautifier = require('js-beautify').css;
describe("sass-compatibility", function(){
var rxMap = {};
function getRx(str) {
if(!rxMap[str]) {
rxMap[str] = new RegExp(str, 'g');
}
return rxMap[str];
}
function normalizeContent(content) {
var cleaned = content
.replace(/@charset.*?\n/gm, '')
.replace(/(?:\/\*(?:[\s\S]*?)\*\/)|(?:([\s;])+\/\/(?:.*)$)/gm, '$1')
.replace(/^\s*[\r\n]/gm, '')
.replace(/\r\n/g, '\n')
.replace(/\r/g, '\n')
.replace(/,[\r\n]/gm, ', ')
.replace(/; }\n/gm, ';\n}\n')
.replace(/\n+/g, '\n')
.replace(/\{\s*}/gm, '{}')
.replace(/ = /g, '=')
.replace(/ \*= /g, '*=')
.replace(/ ]/g, ']')
.replace(/\[ /g, '[')
.replace(/;+/g, ';')
.replace(/ +/g, ' ')
.replace(/\'/g, '"')
.replace(/\((\w*?):\s/g, '($1:')
.replace(/grey/g, 'gray');
var map = Fashion.ColorRGBA.stringifiedMap;
for(var long in map) {
if(long.indexOf('#') === 0) {
var value = map[long];
var rx = getRx(long);
cleaned = cleaned.replace(rx, value);
}
}
var map = Fashion.ColorRGBA.shortFormMap;
for(var long in map) {
if(long.indexOf('#') === 0) {
var value = map[long];
var rx = getRx(long);
cleaned = cleaned.replace(rx, value);
}
}
return cleaned.trim();
}
Fashion.Runtime.allowSetScopedVariables = false;
Fashion.Runtime.allowEmptyRulesets = false;
Fashion.Runtime.uniqueScopesForAllRulesets = false;
Fashion.Runtime.uniqueScopesForGlobalRulesets = true;
Fashion.Runtime.compactSuperSelectors = true;
Fashion.Runtime.fullExtendWeave = true;
Fashion.ColorRGBA.useShortValues = false;
Fashion.ColorRGBA.preserveInputStrings = true;
Fashion.Text.preferDoubleQuotes = true;
var compatPath = Path.resolve(__dirname, 'suite');
function checkFile (file) {
// return file.indexOf('unifi') === -1 &&
// file.indexOf('unify') === -1 &&
// file.indexOf('selector-functions') === -1 &&
// file.indexOf('output_styles') === -1;
return file.indexOf('output_styles') === -1;
}
function scan(dir) {
var files = fs.readdirSync(dir);
for (var f = 0; f < files.length; f++) {
var file = files[f],
fullPath = Path.resolve(dir, file),
stat = fs.statSync(fullPath);
if (stat.isDirectory()) {
describe(file, function(){
scan(fullPath);
});
}
else {
if(file === 'input.scss' && checkFile(fullPath)) {
it('should be compatable', function(done){
this.timeout(10 * 1000);
var expectedDir = Path.dirname(fullPath),
expectedFile = Path.resolve(expectedDir, 'expected_output.css'),
expectedErrorFile = Path.resolve(expectedDir, 'error'),
errorExpected = fs.existsSync(expectedErrorFile) && fs.readFileSync(expectedErrorFile, {
encoding: 'utf8'
}),
expected = fs.readFileSync(expectedFile, {
encoding: 'utf8'
}),
builder = new Fashion.Builder({
indent: ' ',
skipComments: true,
compressed: false
});
try {
builder.build(fullPath, function(content, err) {
setTimeout(function () {
if (err) {
}
else {
content = content.join('');
content = normalizeContent(content);
expected = normalizeContent(expected);
content = beautifier(content, {});
expected = beautifier(expected, {});
if (!errorExpected) {
assert.equal(content, expected);
}
}
done();
});
});
} catch (err) {
assert(err == null);
done();
}
});
}
}
}
}
scan(compatPath);
});