Skip to content

Commit

Permalink
Add testing
Browse files Browse the repository at this point in the history
- This brings in the flow test suite that contains a ton of JavaScript parsing edge cases
- This creates snapshot tests using the pretty printer for all of them
- If uncomment `RUN_AST_TESTS` line in `tests/run_specs.js`, it checks ast(pretty_print(x)) == ast(x). Right now, "178 failed, 197 passed, 375 of 377 total". So half of the tests are not passing, most of them are crashes and many of the rest are subtle issues.
  • Loading branch information
vjeux committed Dec 23, 2016
1 parent d5b07f5 commit cf45afb
Show file tree
Hide file tree
Showing 1,873 changed files with 93,549 additions and 1 deletion.
15 changes: 14 additions & 1 deletion package.json
Expand Up @@ -11,6 +11,19 @@
"recast": "^0.11.18"
},
"devDependencies": {
"glob": "^7.1.1"
"glob": "^7.1.1",
"jest": "^18.0.0",
"flow-parser": "^0.37.0"
},
"scripts": {
"test": "jest"
},
"jest": {
"setupFiles": [
"<rootDir>/tests_config/run_spec.js"
],
"testRegex": [
"jsfmt\\.spec\\.js$"
]
}
}
127 changes: 127 additions & 0 deletions tests/abnormal/__snapshots__/jsfmt.spec.js.snap
@@ -0,0 +1,127 @@
exports[`test break-continue.js 1`] = `
"function foo() {
while(true) { break; }
}
function bar() {
L: do { continue L; } while(false)
}
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/src/printer.js:925
if (endsWithBrace(doBody))
^
ReferenceError: endsWithBrace is not defined
at genericPrintNoParens (/src/printer.js:925:11)
at genericPrint (/src/printer.js:166:7)
at p (/src/printer.js:111:37)
at exports.printComments (/src/comments.js:327:20)
at printGenerically (/src/printer.js:111:12)
at FastPath.call (/src/fast-path.js:113:16)
at genericPrintNoParens (/src/printer.js:963:14)
at genericPrint (/src/printer.js:166:7)
at p (/src/printer.js:111:37)
at exports.printComments (/src/comments.js:327:20)
"
`;

exports[`test return.js 1`] = `
"function bar(x:number) { }
function foo() {
var x = null;
if (x == null) return;
bar(x);
}
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
function bar(x: number) {
}
function foo() {
var x = null;
if (x == null)
return;
bar(x);
}
"
`;

exports[`test toplevel_break.js 1`] = `
"// @flow
break; // error, illegal
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/node_modules/babylon/lib/index.js:4255
throw err;
^
SyntaxError: Unsyntactic break (3:0)
at Parser.pp$5.raise (/node_modules/babylon/lib/index.js:4252:13)
at Parser.pp$1.parseBreakContinueStatement (/node_modules/babylon/lib/index.js:1843:44)
at Parser.pp$1.parseStatement (/node_modules/babylon/lib/index.js:1703:19)
at Parser.parseStatement (/node_modules/babylon/lib/index.js:5224:22)
at Parser.pp$1.parseBlockBody (/node_modules/babylon/lib/index.js:2139:21)
at Parser.pp$1.parseTopLevel (/node_modules/babylon/lib/index.js:1651:8)
at Parser.parse (/node_modules/babylon/lib/index.js:1543:17)
at Object.parse$1 [as parse] (/node_modules/babylon/lib/index.js:6472:37)
at Object.parse (/index.js:34:26)
at Object.parse (/node_modules/recast/lib/parser.js:26:34)
"
`;

exports[`test toplevel_continue.js 1`] = `
"// @flow
continue; // error, illegal
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/node_modules/babylon/lib/index.js:4255
throw err;
^
SyntaxError: Unsyntactic continue (3:0)
at Parser.pp$5.raise (/node_modules/babylon/lib/index.js:4252:13)
at Parser.pp$1.parseBreakContinueStatement (/node_modules/babylon/lib/index.js:1843:44)
at Parser.pp$1.parseStatement (/node_modules/babylon/lib/index.js:1703:19)
at Parser.parseStatement (/node_modules/babylon/lib/index.js:5224:22)
at Parser.pp$1.parseBlockBody (/node_modules/babylon/lib/index.js:2139:21)
at Parser.pp$1.parseTopLevel (/node_modules/babylon/lib/index.js:1651:8)
at Parser.parse (/node_modules/babylon/lib/index.js:1543:17)
at Object.parse$1 [as parse] (/node_modules/babylon/lib/index.js:6472:37)
at Object.parse (/index.js:34:26)
at Object.parse (/node_modules/recast/lib/parser.js:26:34)
"
`;

exports[`test toplevel_return.js 1`] = `
"// @flow
return; // error, illegal
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/node_modules/babylon/lib/index.js:4255
throw err;
^
SyntaxError: \'return\' outside of function (3:0)
at Parser.pp$5.raise (/node_modules/babylon/lib/index.js:4252:13)
at Parser.pp$1.parseReturnStatement (/node_modules/babylon/lib/index.js:1939:10)
at Parser.pp$1.parseStatement (/node_modules/babylon/lib/index.js:1722:19)
at Parser.parseStatement (/node_modules/babylon/lib/index.js:5224:22)
at Parser.pp$1.parseBlockBody (/node_modules/babylon/lib/index.js:2139:21)
at Parser.pp$1.parseTopLevel (/node_modules/babylon/lib/index.js:1651:8)
at Parser.parse (/node_modules/babylon/lib/index.js:1543:17)
at Object.parse$1 [as parse] (/node_modules/babylon/lib/index.js:6472:37)
at Object.parse (/index.js:34:26)
at Object.parse (/node_modules/recast/lib/parser.js:26:34)
"
`;

exports[`test toplevel_throw.js 1`] = `
"// @flow
throw new Error(\'foo\'); // no error
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// @flow
throw new Error(\"foo\");// no error
"
`;
7 changes: 7 additions & 0 deletions tests/abnormal/break-continue.js
@@ -0,0 +1,7 @@
function foo() {
while(true) { break; }
}

function bar() {
L: do { continue L; } while(false)
}
1 change: 1 addition & 0 deletions tests/abnormal/jsfmt.spec.js
@@ -0,0 +1 @@
run_spec(__dirname);
6 changes: 6 additions & 0 deletions tests/abnormal/return.js
@@ -0,0 +1,6 @@
function bar(x:number) { }
function foo() {
var x = null;
if (x == null) return;
bar(x);
}
3 changes: 3 additions & 0 deletions tests/abnormal/toplevel_break.js
@@ -0,0 +1,3 @@
// @flow

break; // error, illegal
3 changes: 3 additions & 0 deletions tests/abnormal/toplevel_continue.js
@@ -0,0 +1,3 @@
// @flow

continue; // error, illegal
3 changes: 3 additions & 0 deletions tests/abnormal/toplevel_return.js
@@ -0,0 +1,3 @@
// @flow

return; // error, illegal
3 changes: 3 additions & 0 deletions tests/abnormal/toplevel_throw.js
@@ -0,0 +1,3 @@
// @flow

throw new Error('foo'); // no error

0 comments on commit cf45afb

Please sign in to comment.