improve --reduce-test (#3719)

- cover missing cases when eliminating unreferenced labels
- format multi-line outputs correctly
This commit is contained in:
Alex Lam S.L
2020-02-14 02:47:20 +00:00
committed by GitHub
parent c01ff76288
commit f01f580d6c
6 changed files with 112 additions and 20 deletions

View File

@@ -8,9 +8,9 @@ function read(path) {
}
describe("test/reduce.js", function() {
this.timeout(60000);
it("Should reduce test case", function() {
this.timeout(60000);
var result = reduce_test(read("test/input/reduce/input.js"), {
var result = reduce_test(read("test/input/reduce/unsafe_math.js"), {
compress: {
unsafe_math: true,
},
@@ -19,7 +19,16 @@ describe("test/reduce.js", function() {
verbose: false,
});
if (result.error) throw result.error;
assert.strictEqual(result.code, read("test/input/reduce/output.js"));
assert.strictEqual(result.code, read("test/input/reduce/unsafe_math.reduced.js"));
});
it("Should eliminate unreferenced labels", function() {
var result = reduce_test(read("test/input/reduce/label.js"), {
mangle: false,
}, {
verbose: false,
});
if (result.error) throw result.error;
assert.strictEqual(result.code, read("test/input/reduce/label.reduced.js"));
});
it("Should handle test cases with --toplevel", function() {
var result = reduce_test([
@@ -31,7 +40,9 @@ describe("test/reduce.js", function() {
if (result.error) throw result.error;
assert.strictEqual(result.code, [
"// Can't reproduce test failure with minify options provided:",
'// {"toplevel":true}',
"// {",
'// "toplevel": true',
"// }",
"",
].join("\n"));
});
@@ -40,7 +51,10 @@ describe("test/reduce.js", function() {
if (result.error) throw result.error;
assert.strictEqual(result.code, [
"// Can't reproduce test failure with minify options provided:",
'// {"compress":{},"mangle":false}',
"// {",
'// "compress": {},',
'// "mangle": false',
"// }",
"",
].join("\n"));
});
@@ -61,8 +75,15 @@ describe("test/reduce.js", function() {
" return f.length;",
"}());",
"// output: 1",
"// ",
"// minify: 0",
'// options: {"compress":{"keep_fargs":false},"mangle":false}',
"// ",
"// options: {",
'// "compress": {',
'// "keep_fargs": false',
"// },",
'// "mangle": false',
"// }",
].join("\n"));
});
it("Should fail when invalid option is supplied", function() {
@@ -81,4 +102,38 @@ describe("test/reduce.js", function() {
assert.ok(err instanceof Error);
assert.strictEqual(err.stack.split(/\n/)[0], "SyntaxError: Name expected");
});
it("Should format multi-line output correctly", function() {
var code = [
"var a = 0;",
"",
"for (var b in [ 1, 2, 3 ]) {",
" a = +a + 1 - .2;",
" console.log(a);",
"}",
].join("\n");
var result = reduce_test(code, {
compress: {
unsafe_math: true,
},
mangle: false,
});
if (result.error) throw result.error;
assert.strictEqual(result.code, [
code,
"// output: 0.8",
"// 1.6",
"// 2.4",
"// ",
"// minify: 0.8",
"// 1.6",
"// 2.4000000000000004",
"// ",
"// options: {",
'// "compress": {',
'// "unsafe_math": true',
"// },",
'// "mangle": false',
"// }",
].join("\n"));
});
});