UNPKG

@sencha/cmd-linux-64

Version:

Productivity and performance optimization tool for building applications with Sencha Ext JS

148 lines (126 loc) 5.26 kB
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); });