@@ -1,6 +1,7 @@
|
||||
var assert = require("assert");
|
||||
var readFileSync = require("fs").readFileSync;
|
||||
var run_code = require("../sandbox").run_code;
|
||||
var semver = require("semver");
|
||||
var UglifyJS = require("../..");
|
||||
|
||||
function read(path) {
|
||||
@@ -320,6 +321,24 @@ describe("minify", function() {
|
||||
});
|
||||
});
|
||||
|
||||
describe("module", function() {
|
||||
it("Should not inline `await` variables", function() {
|
||||
if (semver.satisfies(process.version, "<8")) return;
|
||||
var code = [
|
||||
"console.log(function() {",
|
||||
" return typeof await;",
|
||||
"}());",
|
||||
].join("\n");
|
||||
assert.strictEqual(run_code("(async function(){" + code + "})();"), "undefined\n");
|
||||
var result = UglifyJS.minify(code, {
|
||||
module: true,
|
||||
});
|
||||
if (result.error) throw result.error;
|
||||
assert.strictEqual(result.code, "console.log(function(){return typeof await}());");
|
||||
assert.strictEqual(run_code("(async function(){" + result.code + "})();"), "undefined\n");
|
||||
});
|
||||
});
|
||||
|
||||
describe("rename", function() {
|
||||
it("Should be repeatable", function() {
|
||||
var code = "!function(x){return x(x)}(y);";
|
||||
|
||||
@@ -760,9 +760,9 @@ function compare_run_code(code, minify_options, result_cache, max_timeout) {
|
||||
if (minified.error) return minified;
|
||||
|
||||
var toplevel = sandbox.has_toplevel(minify_options);
|
||||
var unminified = run_code(code, toplevel, result_cache, max_timeout);
|
||||
var unminified = run(code, max_timeout);
|
||||
var timeout = Math.min(100 * unminified.elapsed, max_timeout);
|
||||
var minified_result = run_code(minified.code, toplevel, result_cache, timeout).result;
|
||||
var minified_result = run(minified.code, timeout).result;
|
||||
|
||||
if (sandbox.same_stdout(unminified.result, minified_result)) {
|
||||
return is_timed_out(unminified.result) && is_timed_out(minified_result) && {
|
||||
@@ -774,6 +774,11 @@ function compare_run_code(code, minify_options, result_cache, max_timeout) {
|
||||
minified_result: minified_result,
|
||||
elapsed: unminified.elapsed,
|
||||
};
|
||||
|
||||
function run(code, timeout) {
|
||||
if (minify_options.module) code = "(async function(){\n" + code + "\n})();";
|
||||
return run_code(code, toplevel, result_cache, timeout);
|
||||
}
|
||||
}
|
||||
|
||||
function test_minify(code, minify_options) {
|
||||
|
||||
@@ -2517,8 +2517,11 @@ for (var round = 1; round <= num_iterations; round++) {
|
||||
})) continue;
|
||||
minify_options.forEach(function(options) {
|
||||
var o = JSON.parse(options);
|
||||
if (async && has_await) {
|
||||
o.module = true;
|
||||
options = JSON.stringify(o);
|
||||
}
|
||||
var toplevel = sandbox.has_toplevel(o);
|
||||
if (async && has_await) o.parse = { module: true };
|
||||
o.validate = true;
|
||||
uglify_code = UglifyJS.minify(original_code, o);
|
||||
original_result = orig_result[toplevel ? 1 : 0];
|
||||
|
||||
Reference in New Issue
Block a user