From abd7f26862b24195e9cf71960dde544206d6afdb Mon Sep 17 00:00:00 2001 From: dovyden Date: Thu, 10 Oct 2013 23:34:31 +0400 Subject: [PATCH 1/3] fixed a counting of rows for files with windows end of line --- lib/gonzales.cssp.node.js | 2 +- src/tokenizer.shared.js | 2 +- web/gonzales.cssp.web.js | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/gonzales.cssp.node.js b/lib/gonzales.cssp.node.js index d0b6d2a..db75289 100644 --- a/lib/gonzales.cssp.node.js +++ b/lib/gonzales.cssp.node.js @@ -125,7 +125,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..79d716c 100644 --- a/src/tokenizer.shared.js +++ b/src/tokenizer.shared.js @@ -124,7 +124,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/web/gonzales.cssp.web.js b/web/gonzales.cssp.web.js index 1e4dabc..9b06c7f 100644 --- a/web/gonzales.cssp.web.js +++ b/web/gonzales.cssp.web.js @@ -125,7 +125,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--; From a2f0f73cffec13540c091324e88e099b6ae66867 Mon Sep 17 00:00:00 2001 From: dovyden Date: Thu, 17 Oct 2013 22:18:58 +0400 Subject: [PATCH 2/3] added test to count lines in files with different line breaks --- test/cssp/data/test_endOfLine/test.js | 71 +++++++++++++++++++++++++++ test/cssp/test.js | 62 +++++++++++++---------- 2 files changed, 107 insertions(+), 26 deletions(-) create mode 100644 test/cssp/data/test_endOfLine/test.js 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); + } } } } From ae89d1c853ea12f840a33086371ef83492ca5eb0 Mon Sep 17 00:00:00 2001 From: dovyden Date: Thu, 17 Oct 2013 22:20:02 +0400 Subject: [PATCH 3/3] reset global variables at the start of the file parsing --- lib/gonzales.cssp.node.js | 2 ++ src/tokenizer.shared.js | 2 ++ web/gonzales.cssp.web.js | 2 ++ 3 files changed, 6 insertions(+) diff --git a/lib/gonzales.cssp.node.js b/lib/gonzales.cssp.node.js index db75289..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; diff --git a/src/tokenizer.shared.js b/src/tokenizer.shared.js index 79d716c..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; diff --git a/web/gonzales.cssp.web.js b/web/gonzales.cssp.web.js index 9b06c7f..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;