From: Alex Lam S.L Date: Wed, 10 Jun 2020 14:51:00 +0000 (+0100) Subject: fix corner case in `--reduce-test` (#3985) X-Git-Url: https://git.ndcode.org/public/gitweb.cgi?a=commitdiff_plain;h=ed69adedcd7140fd93d888d6b9dd46a6153adc7f;p=UglifyJS.git fix corner case in `--reduce-test` (#3985) --- diff --git a/test/input/reduce/diff_error.js b/test/input/reduce/diff_error.js new file mode 100644 index 00000000..ba267c5c --- /dev/null +++ b/test/input/reduce/diff_error.js @@ -0,0 +1,5 @@ +(function f(a) { + do { + console.log(f.length); + } while (console.log(f += 0)); +})(); diff --git a/test/input/reduce/diff_error.reduced.js b/test/input/reduce/diff_error.reduced.js new file mode 100644 index 00000000..a76e3d94 --- /dev/null +++ b/test/input/reduce/diff_error.reduced.js @@ -0,0 +1,19 @@ +// (beautified) +(function f(a) { + do { + console.log(f.length); + } while (console.log(f += 0)); +})(); +// output: 1 +// function(){}0 +// +// minify: 0 +// function(){}0 +// +// options: { +// "compress": { +// "keep_fargs": false, +// "unsafe": true +// }, +// "mangle": false +// } \ No newline at end of file diff --git a/test/mocha/reduce.js b/test/mocha/reduce.js index 271358be..c1864735 100644 --- a/test/mocha/reduce.js +++ b/test/mocha/reduce.js @@ -296,4 +296,18 @@ describe("test/reduce.js", function() { "// }", ]).join("\n")); }); + it("Should handle corner cases when intermediate case differs only in Error.message", function() { + if (semver.satisfies(process.version, "<=0.10")) return; + var result = reduce_test(read("test/input/reduce/diff_error.js"), { + compress: { + keep_fargs: false, + unsafe: true, + }, + mangle: false, + }, { + verbose: false, + }); + if (result.error) throw result.error; + assert.strictEqual(result.code, read("test/input/reduce/diff_error.reduced.js")); + }); }); diff --git a/test/reduce.js b/test/reduce.js index ff2f787c..7f37ea25 100644 --- a/test/reduce.js +++ b/test/reduce.js @@ -438,7 +438,8 @@ module.exports = function reduce_test(testcase, minify_options, reduce_options) } })); var code = testcase_ast.print_to_string(); - if (diff = test_for_diff(code, minify_options, result_cache, max_timeout)) { + var diff = test_for_diff(code, minify_options, result_cache, max_timeout); + if (diff && !diff.timed_out && !diff.error) { testcase = code; differs = diff; } else {