diff --git a/lib/gonzales.cssp.node.js b/lib/gonzales.cssp.node.js index d0b6d2a..ef815eb 100644 --- a/lib/gonzales.cssp.node.js +++ b/lib/gonzales.cssp.node.js @@ -107,6 +107,8 @@ var getTokens = (function() { if (!s) return []; tokens = []; + tn = 0; + ln = 1; var c, cn; @@ -125,7 +127,7 @@ var getTokens = (function() { parseSpaces(s) } else if (c in Punctuation) { pushToken(Punctuation[c], c); - if (c === '\n' || c === '\r') ln++; + if (c === '\n' || c === '\r' && cn !== '\n') ln++; if (c === ')') urlMode = false; if (c === '{') blockMode++; if (c === '}') blockMode--; diff --git a/src/tokenizer.shared.js b/src/tokenizer.shared.js index fd1c37b..69de39b 100644 --- a/src/tokenizer.shared.js +++ b/src/tokenizer.shared.js @@ -106,6 +106,8 @@ var getTokens = (function() { if (!s) return []; tokens = []; + tn = 0; + ln = 1; var c, cn; @@ -124,7 +126,7 @@ var getTokens = (function() { parseSpaces(s) } else if (c in Punctuation) { pushToken(Punctuation[c], c); - if (c === '\n' || c === '\r') ln++; + if (c === '\n' || c === '\r' && cn !== '\n') ln++; if (c === ')') urlMode = false; if (c === '{') blockMode++; if (c === '}') blockMode--; diff --git a/test/cssp/data/test_endOfLine/test.js b/test/cssp/data/test_endOfLine/test.js new file mode 100644 index 0000000..b5de6de --- /dev/null +++ b/test/cssp/data/test_endOfLine/test.js @@ -0,0 +1,71 @@ +/** + * test: end of line + * + * @author dovyden + */ + +var gonzales, + system = { + nix: '\n', + mac: '\r', + win: '\r\n' + }, + file = ['.rule1{}', '.rule2{}', '.rule3{}']; + +/** + * test + * + * @param {Object} gonzales + * @param {function} gonzales.srcToCSSP + * @param {function} gonzales.csspToSrc + */ +function main (gonzales) { + var eol, + css, + ast, + result = true; + + for (eol in system) { + css = file.join(system[eol]); + ast = gonzales.srcToCSSP(css, undefined, true); + + // ast: + // [ + // { ln: 1 }, + // 'stylesheet', + // [ + // { ln: 1 }, + // 'ruleset', + // [ { ln: 1 }, 'selector', [ <.rule1> ], + // [ { ln: 1 }, 'block' ] + // ], + // ... + // [ + // { ln: 2 }, 's', '\n' + // ], + // [ + // { ln: 3 }, + // 'ruleset', + // [ { ln: 3 }, 'selector', [ <.rule3> ], + // [ { ln: 3 }, 'block' ] + // ] + // ] + result = result && (ast[6][0].ln === 3); + } + + return result; +} + + +exports.test = main; + +if (require.main === module) { + gonzales = require('./../../../../lib/gonzales.cssp.node'); + + console.log( + main({ + srcToCSSP: gonzales.srcToCSSP, + csspToSrc: gonzales.srcToCSSP + }) ? 'PASS' : 'FAIL' + ); +} diff --git a/test/cssp/test.js b/test/cssp/test.js index 7a68e0e..a38030a 100644 --- a/test/cssp/test.js +++ b/test/cssp/test.js @@ -23,32 +23,42 @@ d_list.forEach(function(rule_dir) { files = {}, k, a, b, c, src, t, r; - list.forEach(function(f) { - var i = f.lastIndexOf('.'); - - if (i !== -1) { - ext = f.substring(i + 1); - k = f.substring(0, i); - if (!(k in files)) files[k] = {}; - files[k][ext] = 1; - } - }); - - for (k in files) { - if (files[k].css) { - src = readFile(path + k + '.css').trim(); - t = '\'' + rule + '\' / \'' + k + '.'; - for (a in funcs) { - if (a in files[k]) { - total++; - r = (((b = funcs[a](src, rule)) == (c = readFile(path + k + '.' + a).trim()))); - r && okn++; - if (!r) { - console.log('FAIL: ' + t + a); - console.log('======= expected'); - console.log(c); - console.log('======= result'); - console.log(b); + if (fs.existsSync(path + 'test.js')) { + r = require(path + 'test.js').test({ + csspToSrc: csspToSrc, + srcToCSSP: srcToCSSP + }); + + total++; + r ? okn++ : console.log('FAIL: ' + rule); + } else { + list.forEach(function(f) { + var i = f.lastIndexOf('.'); + + if (i !== -1) { + ext = f.substring(i + 1); + k = f.substring(0, i); + if (!(k in files)) files[k] = {}; + files[k][ext] = 1; + } + }); + + for (k in files) { + if (files[k].css) { + src = readFile(path + k + '.css').trim(); + t = '\'' + rule + '\' / \'' + k + '.'; + for (a in funcs) { + if (a in files[k]) { + total++; + r = (((b = funcs[a](src, rule)) == (c = readFile(path + k + '.' + a).trim()))); + r && okn++; + if (!r) { + console.log('FAIL: ' + t + a); + console.log('======= expected'); + console.log(c); + console.log('======= result'); + console.log(b); + } } } } diff --git a/web/gonzales.cssp.web.js b/web/gonzales.cssp.web.js index 1e4dabc..5ec3d41 100644 --- a/web/gonzales.cssp.web.js +++ b/web/gonzales.cssp.web.js @@ -107,6 +107,8 @@ var getTokens = (function() { if (!s) return []; tokens = []; + tn = 0; + ln = 1; var c, cn; @@ -125,7 +127,7 @@ var getTokens = (function() { parseSpaces(s) } else if (c in Punctuation) { pushToken(Punctuation[c], c); - if (c === '\n' || c === '\r') ln++; + if (c === '\n' || c === '\r' && cn !== '\n') ln++; if (c === ')') urlMode = false; if (c === '{') blockMode++; if (c === '}') blockMode--;