aboutsummaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorAlex Lam S.L <alexlamsl@gmail.com>2017-05-06 16:15:43 +0800
committerGitHub <noreply@github.com>2017-05-06 16:15:43 +0800
commitdee5a27516cb574dda5fc3d23a64344f0ea654b6 (patch)
tree3a5d014836971d6f4d6dad26a83d8f8c6e728cfd /test
parent5a25d24b56067e99ea9e5edc890a66eecbacdd7c (diff)
downloadtracifyjs-dee5a27516cb574dda5fc3d23a64344f0ea654b6.tar.gz
tracifyjs-dee5a27516cb574dda5fc3d23a64344f0ea654b6.zip
enhance `collapse_vars` (#1862)
- extend expression types - `a++` - `a=x;` - extend scan range - `for(init;;);` - `switch(expr){case expr:}` - `a = x; a = a || y;` - terminate upon `debugger;` closes #1821 fixes #27 fixes #315 fixes #1858
Diffstat (limited to 'test')
-rw-r--r--test/compress/collapse_vars.js527
-rw-r--r--test/compress/drop-unused.js33
-rw-r--r--test/compress/issue-1609.js9
3 files changed, 554 insertions, 15 deletions
diff --git a/test/compress/collapse_vars.js b/test/compress/collapse_vars.js
index a4c1f9e6..4215cebe 100644
--- a/test/compress/collapse_vars.js
+++ b/test/compress/collapse_vars.js
@@ -68,11 +68,10 @@ collapse_vars_side_effects_1: {
log(x, s.charAt(i++), y, 7);
}
function f4() {
- var log = console.log.bind(console),
- i = 10,
+ var i = 10,
x = i += 2,
y = i += 3;
- log(x, i += 4, y, i);
+ console.log.bind(console)(x, i += 4, y, i);
}
f1(), f2(), f3(), f4();
}
@@ -671,8 +670,8 @@ collapse_vars_lvalues: {
function f4(x) { var a = (x -= 3); return x + a; }
function f5(x) { var w = e1(), v = e2(), c = v = --x; return (w = x) - c; }
function f6(x) { var w = e1(), v = e2(); return (v = --x) - (w = x); }
- function f7(x) { var w = e1(), c = e2() - x; return (w = x) - c; }
- function f8(x) { var w = e1(), v = e2(); return (w = x) - (v - x); }
+ function f7(x) { var w = e1(); return (w = x) - (e2() - x); }
+ function f8(x) { var w = e1(); return (w = x) - (e2() - x); }
function f9(x) { var w = e1(); return e2() - x - (w = x); }
}
}
@@ -703,8 +702,8 @@ collapse_vars_lvalues_drop_assign: {
function f4(x) { var a = (x -= 3); return x + a; }
function f5(x) { e1(); var v = e2(), c = v = --x; return x - c; }
function f6(x) { e1(), e2(); return --x - x; }
- function f7(x) { e1(); var c = e2() - x; return x - c; }
- function f8(x) { e1(); var v = e2(); return x - (v - x); }
+ function f7(x) { e1(); return x - (e2() - x); }
+ function f8(x) { e1(); return x - (e2() - x); }
function f9(x) { e1(); return e2() - x - x; }
}
}
@@ -1047,10 +1046,9 @@ collapse_vars_object: {
}
expect: {
function f0(x, y) {
- var z = x + y;
return {
get b() { return 7; },
- r: z
+ r: x + y
};
}
function f1(x, y) {
@@ -1677,3 +1675,514 @@ var_defs: {
}
expect_stdout: "97"
}
+
+assignment: {
+ options = {
+ collapse_vars: true,
+ unused: true,
+ }
+ input: {
+ function f() {
+ var a;
+ a = x;
+ return a;
+ }
+ }
+ expect: {
+ function f() {
+ return x;
+ }
+ }
+}
+
+for_init: {
+ options = {
+ collapse_vars: true,
+ unused: true,
+ }
+ input: {
+ function f(x, y) {
+ var a = x;
+ var b = y;
+ for (a; b;);
+ }
+ }
+ expect: {
+ function f(x, y) {
+ var b = y;
+ for (x; b;);
+ }
+ }
+}
+
+switch_case: {
+ options = {
+ collapse_vars: true,
+ unused: true,
+ }
+ input: {
+ function f(x, y, z) {
+ var a = x();
+ var b = y();
+ var c = z;
+ switch (a) {
+ default: d();
+ case b: e();
+ case c: f();
+ }
+ }
+ }
+ expect: {
+ function f(x, y, z) {
+ var c = z;
+ switch (x()) {
+ default: d();
+ case y(): e();
+ case c: f();
+ }
+ }
+ }
+}
+
+issue_27: {
+ options = {
+ collapse_vars: true,
+ unused: true,
+ }
+ input: {
+ (function(jQuery) {
+ var $;
+ $ = jQuery;
+ $("body").addClass("foo");
+ })(jQuery);
+ }
+ expect: {
+ (function(jQuery) {
+ jQuery("body").addClass("foo");
+ })(jQuery);
+ }
+}
+
+modified: {
+ options = {
+ collapse_vars: true,
+ unused: true,
+ }
+ input: {
+ function f1(b) {
+ var a = b;
+ return b + a;
+ }
+ function f2(b) {
+ var a = b;
+ return b++ + a;
+ }
+ function f3(b) {
+ var a = b++;
+ return b + a;
+ }
+ function f4(b) {
+ var a = b++;
+ return b++ + a;
+ }
+ function f5(b) {
+ var a = function() {
+ return b;
+ }();
+ return b++ + a;
+ }
+ console.log(f1(1), f2(1), f3(1), f4(1), f5(1));
+ }
+ expect: {
+ function f1(b) {
+ return b + b;
+ }
+ function f2(b) {
+ var a = b;
+ return b++ + a;
+ }
+ function f3(b) {
+ var a = b++;
+ return b + a;
+ }
+ function f4(b) {
+ var a = b++;
+ return b++ + a;
+ }
+ function f5(b) {
+ var a = function() {
+ return b;
+ }();
+ return b++ + a;
+ }
+ console.log(f1(1), f2(1), f3(1), f4(1), f5(1));
+ }
+ expect_stdout: "2 2 3 3 2"
+}
+
+issue_1858: {
+ options = {
+ collapse_vars: true,
+ pure_getters: true,
+ unused: true,
+ }
+ input: {
+ console.log(function(x) {
+ var a = {}, b = a.b = x;
+ return a.b + b;
+ }(1));
+ }
+ expect: {
+ console.log(function(x) {
+ var a = {}, b = a.b = x;
+ return a.b + b;
+ }(1));
+ }
+ expect_stdout: "2"
+}
+
+anonymous_function: {
+ options = {
+ collapse_vars: true,
+ }
+ input: {
+ console.log(function f(a) {
+ f ^= 0;
+ return f * a;
+ }(1));
+ }
+ expect: {
+ console.log(function f(a) {
+ f ^= 0;
+ return f * a;
+ }(1));
+ }
+ expect_stdout: true
+}
+
+side_effects_property: {
+ options = {
+ collapse_vars: true,
+ }
+ input: {
+ var a = [];
+ var b = 0;
+ a[b++] = function() { return 42;};
+ var c = a[b++]();
+ console.log(c);
+ }
+ expect: {
+ var a = [];
+ var b = 0;
+ a[b++] = function() { return 42;};
+ var c = a[b++]();
+ console.log(c);
+ }
+ expect_stdout: true
+}
+
+undeclared: {
+ options = {
+ collapse_vars: true,
+ unused: true,
+ }
+ input: {
+ function f(x, y) {
+ var a;
+ a = x;
+ b = y;
+ return b + a;
+ }
+ }
+ expect: {
+ function f(x, y) {
+ var a;
+ a = x;
+ b = y;
+ return b + a;
+ }
+ }
+}
+
+ref_scope: {
+ options = {
+ collapse_vars: true,
+ unused: true,
+ }
+ input: {
+ console.log(function() {
+ var a = 1, b = 2, c = 3;
+ var a = c++, b = b /= a;
+ return function() {
+ return a;
+ }() + b;
+ }());
+ }
+ expect: {
+ console.log(function() {
+ var a = 1, b = 2, c = 3;
+ b = b /= a = c++;
+ return function() {
+ return a;
+ }() + b;
+ }());
+ }
+ expect_stdout: true
+}
+
+chained_1: {
+ options = {
+ collapse_vars: true,
+ }
+ input: {
+ var a = 2;
+ var a = 3 / a;
+ console.log(a);
+ }
+ expect: {
+ var a = 3 / (a = 2);
+ console.log(a);
+ }
+ expect_stdout: true
+}
+
+chained_2: {
+ options = {
+ collapse_vars: true,
+ }
+ input: {
+ var a;
+ var a = 2;
+ a = 3 / a;
+ console.log(a);
+ }
+ expect: {
+ var a;
+ a = 3 / (a = 2);
+ console.log(a);
+ }
+ expect_stdout: true
+}
+
+chained_3: {
+ options = {
+ collapse_vars: true,
+ unused: true,
+ }
+ input: {
+ console.log(function(a, b) {
+ var c = a, c = b;
+ b++;
+ return c;
+ }(1, 2));
+ }
+ expect: {
+ console.log(function(a, b) {
+ var c = a, c = b;
+ b++;
+ return c;
+ }(1, 2));
+ }
+ expect_stdout: "2"
+}
+
+boolean_binary_1: {
+ options = {
+ collapse_vars: true,
+ }
+ input: {
+ var a = 1;
+ a++;
+ (function() {} || a || 3).toString();
+ console.log(a);
+ }
+ expect: {
+ var a = 1;
+ a++;
+ (function() {} || a || 3).toString();
+ console.log(a);
+ }
+ expect_stdout: true
+}
+
+boolean_binary_2: {
+ options = {
+ collapse_vars: true,
+ }
+ input: {
+ var c = 0;
+ c += 1;
+ (function() {
+ c = 1 + c;
+ } || 9).toString();
+ console.log(c);
+ }
+ expect: {
+ var c = 0;
+ c += 1;
+ (function() {
+ c = 1 + c;
+ } || 9).toString();
+ console.log(c);
+ }
+ expect_stdout: true
+}
+
+inner_lvalues: {
+ options = {
+ collapse_vars: true,
+ unused: true,
+ }
+ input: {
+ var a, b = 10;
+ var a = (--b || a || 3).toString(), c = --b + -a;
+ console.log(null, a, b);
+ }
+ expect: {
+ var a, b = 10;
+ var a = (--b || a || 3).toString(), c = --b + -a;
+ console.log(null, a, b);
+ }
+ expect_stdout: true
+}
+
+double_def: {
+ options = {
+ collapse_vars: true,
+ }
+ input: {
+ var a = x, a = a && y;
+ a();
+ }
+ expect: {
+ var a = x;
+ (a = a && y)();
+ }
+}
+
+toplevel_single_reference: {
+ options = {
+ collapse_vars: true,
+ }
+ input: {
+ var a;
+ for (var b in x) {
+ var a = b;
+ b(a);
+ }
+ }
+ expect: {
+ var a;
+ for (var b in x)
+ b(a = b);
+ }
+}
+
+unused_orig: {
+ options = {
+ collapse_vars: true,
+ passes: 2,
+ reduce_vars: true,
+ unused: true,
+ }
+ input: {
+ var a = 1;
+ console.log(function(b) {
+ var a;
+ var c = b;
+ for (var d in c) {
+ var a = c[0];
+ return --b + a;
+ }
+ try {
+ } catch (e) {
+ --b + a;
+ }
+ a && a.NaN;
+ }([2]), a);
+ }
+ expect: {
+ var a = 1;
+ console.log(function(b) {
+ var c = b;
+ for (var d in c) {
+ var a = c[0];
+ return --b + a;
+ }
+ a && a.NaN;
+ }([2]), a);
+ }
+ expect_stdout: "3 1"
+}
+
+issue_315: {
+ options = {
+ collapse_vars: true,
+ evaluate: true,
+ keep_fargs: false,
+ reduce_vars: true,
+ sequences: true,
+ unused: true,
+ }
+ input: {
+ console.log(function(s) {
+ var w, _i, _len, _ref, _results;
+ _ref = s.trim().split(" ");
+ _results = [];
+ for (_i = 0, _len = _ref.length; _i < _len; _i++) {
+ w = _ref[_i];
+ _results.push(w.toLowerCase());
+ }
+ return _results;
+ }("test"));
+ }
+ expect: {
+ console.log(function() {
+ var w, _i, _len, _ref, _results;
+ for (_results = [], _i = 0, _len = (_ref = "test".trim().split(" ")).length; _i < _len ; _i++)
+ w = _ref[_i], _results.push(w.toLowerCase());
+ return _results;
+ }());
+ }
+ expect_stdout: true
+}
+
+lvalues_def: {
+ options = {
+ collapse_vars: true,
+ side_effects: true,
+ unused: true,
+ }
+ input: {
+ var a = 0, b = 1;
+ var a = b++, b = +function() {}();
+ a && a[a++];
+ console.log(a, b);
+ }
+ expect: {
+ var a = 0, b = 1;
+ var a = b++, b = +void 0;
+ a && a[a++];
+ console.log(a, b);
+ }
+ expect_stdout: true
+}
+
+compound_assignment: {
+ options = {
+ collapse_vars: true,
+ }
+ input: {
+ var a;
+ a = 1;
+ a += a + 2;
+ console.log(a);
+ }
+ expect: {
+ var a;
+ a = 1;
+ a += a + 2;
+ console.log(a);
+ }
+ expect_stdout: "4"
+}
diff --git a/test/compress/drop-unused.js b/test/compress/drop-unused.js
index c702cfaf..ddf90bfa 100644
--- a/test/compress/drop-unused.js
+++ b/test/compress/drop-unused.js
@@ -1114,3 +1114,36 @@ issue_1838: {
"}",
]
}
+
+var_catch_toplevel: {
+ options = {
+ conditionals: true,
+ negate_iife: true,
+ reduce_vars: true,
+ side_effects: true,
+ toplevel: true,
+ unused: true,
+ }
+ input: {
+ function f() {
+ a--;
+ try {
+ a++;
+ } catch(a) {
+ if (a) var a;
+ var a = 10;
+ }
+ }
+ f();
+ }
+ expect: {
+ !function() {
+ a--;
+ try {
+ a++;
+ } catch(a) {
+ var a;
+ }
+ }();
+ }
+}
diff --git a/test/compress/issue-1609.js b/test/compress/issue-1609.js
index da4b54a2..dffa54a5 100644
--- a/test/compress/issue-1609.js
+++ b/test/compress/issue-1609.js
@@ -18,9 +18,7 @@ chained_evaluation_1: {
expect: {
(function() {
(function() {
- var c;
- c = f(1);
- c.bar = 1;
+ f(1).bar = 1;
})();
})();
}
@@ -46,9 +44,8 @@ chained_evaluation_2: {
expect: {
(function() {
(function() {
- var c, b = "long piece of string";
- c = f(b);
- c.bar = b;
+ var b = "long piece of string";
+ f(b).bar = b;
})();
})();
}