From d2e7c4af20d8a5bf51de324927221e64423a4791 Mon Sep 17 00:00:00 2001 From: "Alex Lam S.L" Date: Mon, 6 Dec 2021 14:42:45 +0000 Subject: [PATCH] improve testing compatibility with Node.js (#5204) --- test/compress/bigint.js | 12 +++++----- test/compress/default-values.js | 10 ++++---- test/compress/destructured.js | 4 ++-- test/compress/exponentiation.js | 2 +- test/compress/rests.js | 30 +++++++++++------------ test/compress/spreads.js | 42 ++++++++++++++++----------------- test/compress/templates.js | 4 ++-- test/compress/yields.js | 2 +- test/sandbox.js | 7 ++++-- 9 files changed, 58 insertions(+), 55 deletions(-) diff --git a/test/compress/bigint.js b/test/compress/bigint.js index b417268c..aab50ca9 100644 --- a/test/compress/bigint.js +++ b/test/compress/bigint.js @@ -4,7 +4,7 @@ arithmetic: { } expect_exact: "console.log((1n+0x2n)*(0o3n- -4n)>>5n-6n);" expect_stdout: "42n" - node_version: ">=10" + node_version: ">=10.4.0" } minus_dot: { @@ -13,7 +13,7 @@ minus_dot: { } expect_exact: "console.log(typeof-42n.toString(),typeof(-42n).toString());" expect_stdout: "number string" - node_version: ">=10" + node_version: ">=10.4.0" } evaluate: { @@ -28,7 +28,7 @@ evaluate: { console.log(0xdeadbeefn.toString(16)); } expect_stdout: "deadbeef" - node_version: ">=10" + node_version: ">=10.4.0" } Number: { @@ -42,7 +42,7 @@ Number: { console.log(+("" + -0xfeed_dead_beef_badn)); } expect_stdout: "-1148098955808013200" - node_version: ">=10" + node_version: ">=10.4.0" } issue_4590: { @@ -58,7 +58,7 @@ issue_4590: { 0n || console.log("PASS"); } expect_stdout: "PASS" - node_version: ">=10" + node_version: ">=10.4.0" } issue_4801: { @@ -88,5 +88,5 @@ issue_4801: { } } expect_stdout: "PASS" - node_version: ">=10" + node_version: ">=10.4.0" } diff --git a/test/compress/default-values.js b/test/compress/default-values.js index a7c0ed27..260a35d4 100644 --- a/test/compress/default-values.js +++ b/test/compress/default-values.js @@ -1037,7 +1037,7 @@ mangle_arrow_1: { }); } expect_stdout: "PASS" - node_version: ">=6" + node_version: ">=6.9.3" } mangle_arrow_1_toplevel: { @@ -1073,7 +1073,7 @@ mangle_arrow_1_toplevel: { }); } expect_stdout: "PASS" - node_version: ">=6" + node_version: ">=6.9.3" } mangle_arrow_2: { @@ -1109,7 +1109,7 @@ mangle_arrow_2: { }); } expect_stdout: "PASS" - node_version: ">=6" + node_version: ">=6.9.3" } mangle_arrow_2_toplevel: { @@ -1145,7 +1145,7 @@ mangle_arrow_2_toplevel: { }); } expect_stdout: "PASS" - node_version: ">=6" + node_version: ">=6.9.3" } issue_4444: { @@ -1587,7 +1587,7 @@ issue_4510_2: { }; } expect_stdout: "PASS" - node_version: ">=8" + node_version: ">=8.3.0" } issue_4523: { diff --git a/test/compress/destructured.js b/test/compress/destructured.js index 04067484..5acc7f69 100644 --- a/test/compress/destructured.js +++ b/test/compress/destructured.js @@ -220,7 +220,7 @@ funarg_side_effects_2: { } } expect_stdout: "PASS" - node_version: ">=6" + node_version: ">=6.9.2" } funarg_side_effects_3: { @@ -254,7 +254,7 @@ funarg_side_effects_3: { } } expect_stdout: "PASS" - node_version: ">=6" + node_version: ">=6.9.2" } funarg_unused_1: { diff --git a/test/compress/exponentiation.js b/test/compress/exponentiation.js index 084e005b..702add8c 100644 --- a/test/compress/exponentiation.js +++ b/test/compress/exponentiation.js @@ -62,7 +62,7 @@ assignment_2: { } expect_exact: "var a=8n;a**=a;console.log(a);" expect_stdout: "16777216n" - node_version: ">=10" + node_version: ">=10.4.0" } evaluate: { diff --git a/test/compress/rests.js b/test/compress/rests.js index 1a557bcb..f377f637 100644 --- a/test/compress/rests.js +++ b/test/compress/rests.js @@ -51,7 +51,7 @@ arrow_destructured_object_1: { } expect_exact: "var f=({...a})=>a,o=f({PASS:42});for(var k in o)console.log(k,o[k]);" expect_stdout: "PASS 42" - node_version: ">=8" + node_version: ">=8.3.0" } arrow_destructured_object_2: { @@ -62,7 +62,7 @@ arrow_destructured_object_2: { } expect_exact: "var f=({FAIL:a,...b})=>b,o=f({PASS:42,FAIL:null});for(var k in o)console.log(k,o[k]);" expect_stdout: "PASS 42" - node_version: ">=8" + node_version: ">=8.3.0" } arrow_destructured_object_3: { @@ -79,7 +79,7 @@ arrow_destructured_object_3: { "2 S", "3 S", ] - node_version: ">=8" + node_version: ">=8.3.0" } funarg_1: { @@ -131,7 +131,7 @@ destructured_object_1: { } expect_exact: 'var{...a}=["FAIL","PASS",42];console.log(a[1],a[2]);' expect_stdout: "PASS 42" - node_version: ">=8" + node_version: ">=8.3.0" } destructured_object_2: { @@ -141,7 +141,7 @@ destructured_object_2: { } expect_exact: 'var{0:a,...b}=["FAIL","PASS",42];console.log(b[1],b[2]);' expect_stdout: "PASS 42" - node_version: ">=8" + node_version: ">=8.3.0" } drop_fargs: { @@ -231,7 +231,7 @@ reduce_destructured_object: { console.log(a[0]); } expect_stdout: "PASS" - node_version: ">=8" + node_version: ">=8.3.0" } retain_destructured_array: { @@ -270,7 +270,7 @@ retain_destructured_object_1: { "1 PASS", "2 42", ] - node_version: ">=8" + node_version: ">=8.3.0" } retain_destructured_object_2: { @@ -292,7 +292,7 @@ retain_destructured_object_2: { "bar PASS", "baz 42", ] - node_version: ">=8" + node_version: ">=8.3.0" } retain_funarg_destructured_array_1: { @@ -344,7 +344,7 @@ retain_funarg_destructured_object_1: { console.log((({ ...a }) => a)([ "PASS" ])[0]); } expect_stdout: "PASS" - node_version: ">=8" + node_version: ">=8.3.0" } retain_funarg_destructured_object_2: { @@ -362,7 +362,7 @@ retain_funarg_destructured_object_2: { }({ p: "FAIL" }).p || "PASS"); } expect_stdout: "PASS" - node_version: ">=8" + node_version: ">=8.3.0" } drop_unused_call_args_1: { @@ -482,7 +482,7 @@ merge_funarg_destructured_object: { })([ "PASS" ]); } expect_stdout: "PASS" - node_version: ">=8" + node_version: ">=8.3.0" } keep_arguments: { @@ -992,7 +992,7 @@ issue_5089_1: { console.log(o.p); } expect_stdout: "undefined" - node_version: ">=8" + node_version: ">=8.3.0" } issue_5089_2: { @@ -1019,7 +1019,7 @@ issue_5089_2: { console.log(o.p); } expect_stdout: "undefined" - node_version: ">=8" + node_version: ">=8.3.0" } issue_5100_1: { @@ -1054,7 +1054,7 @@ issue_5100_1: { console.log(a.r); } expect_stdout: "PASS" - node_version: ">=8" + node_version: ">=8.3.0" } issue_5100_2: { @@ -1085,7 +1085,7 @@ issue_5100_2: { } ][0]); } expect_stdout: "PASS" - node_version: ">=10" + node_version: ">=10.22.0" } issue_5108: { diff --git a/test/compress/spreads.js b/test/compress/spreads.js index 3b1ec461..8c34a0da 100644 --- a/test/compress/spreads.js +++ b/test/compress/spreads.js @@ -341,7 +341,7 @@ convert_setter: { console.log(k, o[k]); } expect_stdout: "PASS undefined" - node_version: ">=8" + node_version: ">=8.3.0" } keep_getter_1: { @@ -370,7 +370,7 @@ keep_getter_1: { }); } expect_stdout: "PASS" - node_version: ">=8" + node_version: ">=8.3.0" } keep_getter_2: { @@ -399,7 +399,7 @@ keep_getter_2: { "foo", "bar", ] - node_version: ">=8" + node_version: ">=8.3.0" } keep_getter_3: { @@ -429,7 +429,7 @@ keep_getter_3: { }); } expect_stdout: "PASS" - node_version: ">=8" + node_version: ">=8.3.0" } keep_getter_4: { @@ -460,7 +460,7 @@ keep_getter_4: { }); } expect_stdout: "PASS" - node_version: ">=8" + node_version: ">=8.3.0" } keep_accessor: { @@ -508,7 +508,7 @@ keep_accessor: { "q undefined", "r null", ] - node_version: ">=8" + node_version: ">=8.3.0" } object_key_order_1: { @@ -538,7 +538,7 @@ object_key_order_1: { "a 3", "b 2", ] - node_version: ">=8 <=10" + node_version: ">=8.3.0 <=10" } object_key_order_2: { @@ -568,7 +568,7 @@ object_key_order_2: { "a 3", "b 2", ] - node_version: ">=8" + node_version: ">=8.3.0" } object_key_order_3: { @@ -598,7 +598,7 @@ object_key_order_3: { "a 3", "b 2", ] - node_version: ">=8" + node_version: ">=8.3.0" } object_key_order_4: { @@ -628,7 +628,7 @@ object_key_order_4: { "a 3", "b 2", ] - node_version: ">=8" + node_version: ">=8.3.0" } object_spread_array: { @@ -654,7 +654,7 @@ object_spread_array: { "0 foo", "1 bar", ] - node_version: ">=8" + node_version: ">=8.3.0" } object_spread_string: { @@ -681,7 +681,7 @@ object_spread_string: { "1 o", "2 o", ] - node_version: ">=8" + node_version: ">=8.3.0" } unused_var_side_effects: { @@ -711,7 +711,7 @@ unused_var_side_effects: { }); } expect_stdout: "PASS" - node_version: ">=8" + node_version: ">=8.3.0" } unsafe_join_1: { @@ -793,7 +793,7 @@ issue_4329: { }[0]); } expect_stdout: "PASS" - node_version: ">=8" + node_version: ">=8.3.0" } issue_4331: { @@ -871,7 +871,7 @@ issue_4345: { }[42]); } expect_stdout: "PASS" - node_version: ">=8" + node_version: ">=8.3.0" } issue_4361: { @@ -901,7 +901,7 @@ issue_4361: { "foo", "undefined", ] - node_version: ">=8" + node_version: ">=8.3.0" } issue_4363: { @@ -922,7 +922,7 @@ issue_4363: { }); } expect_stdout: "PASS" - node_version: ">=8" + node_version: ">=8.3.0" } issue_4556: { @@ -994,7 +994,7 @@ issue_4849: { }())); } expect_stdout: "object" - node_version: ">=8" + node_version: ">=8.3.0" } issue_4882_1: { @@ -1026,7 +1026,7 @@ issue_4882_1: { "PASS", "undefined", ] - node_version: ">=8" + node_version: ">=8.3.0" } issue_4882_2: { @@ -1052,7 +1052,7 @@ issue_4882_2: { "42", "PASS", ] - node_version: ">=8" + node_version: ">=8.3.0" } issue_4882_3: { @@ -1082,7 +1082,7 @@ issue_4882_3: { "PASS", "42", ] - node_version: ">=8" + node_version: ">=8.3.0" } issue_5006: { diff --git a/test/compress/templates.js b/test/compress/templates.js index a50470df..db3ab203 100644 --- a/test/compress/templates.js +++ b/test/compress/templates.js @@ -337,7 +337,7 @@ malformed_evaluate_4: { console.log("\\u00b5"); } expect_stdout: "\\u00b5" - node_version: ">=8" + node_version: ">=8.10.0" } unsafe_evaluate: { @@ -353,7 +353,7 @@ unsafe_evaluate: { console.log("\\uFo"); } expect_stdout: "\\uFo" - node_version: ">=8" + node_version: ">=8.10.0" } side_effects_1: { diff --git a/test/compress/yields.js b/test/compress/yields.js index d10321e2..f0ffded3 100644 --- a/test/compress/yields.js +++ b/test/compress/yields.js @@ -970,7 +970,7 @@ issue_4639_1: { }().next().value()); } expect_stdout: "PASS" - node_version: ">=4" + node_version: ">=4 <7 || >=8.7.0" } issue_4639_2: { diff --git a/test/sandbox.js b/test/sandbox.js index 355b9c0a..79b98a23 100644 --- a/test/sandbox.js +++ b/test/sandbox.js @@ -253,7 +253,10 @@ function run_code_vm(code, toplevel, timeout) { // for Node.js v6 vm.runInContext(setup_code, ctx); vm.runInContext(toplevel ? "(function(){" + code + "})();" : code, ctx, { timeout: timeout }); - return strip_color_codes(stdout); + // for Node.js v4 + return strip_color_codes(stdout.replace(/\b(Array \[|Object {)/g, function(match) { + return match.slice(-1); + })); } catch (ex) { return ex; } finally { @@ -292,7 +295,7 @@ function run_code_exec(code, toplevel, timeout) { } catch (e) {} } var match = /\n([^:\s]*Error)(?:: ([\s\S]+?))?\n( at [\s\S]+)\n$/.exec(msg); - if (!match) return details; + if (!match) return details || new Error(msg); var ex = new global[match[1]](match[2]); ex.stack = ex.stack.slice(0, ex.stack.indexOf(" at ")) + match[3]; if (typeof details == "object") {