aboutsummaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorAlex Lam S.L <alexlamsl@gmail.com>2017-03-03 18:13:07 +0800
committerGitHub <noreply@github.com>2017-03-03 18:13:07 +0800
commit07accd2fbb78ddbdb427774b3b5287a16fa95b5f (patch)
treeb1c07129a02b3e595af25e5e9daf8a3024d44fa3 /test
parent18059cc94fdc037e296a1cb1b08143d5e3aae570 (diff)
downloadtracifyjs-07accd2fbb78ddbdb427774b3b5287a16fa95b5f.tar.gz
tracifyjs-07accd2fbb78ddbdb427774b3b5287a16fa95b5f.zip
process code with implicit return statement (#1522)
Bookmarklet for instance implicitedly assumes a "completion value" without using `return`. The `expression` option now supports such use cases. Optimisations on IIFEs also enhanced. fixes #354 fixes #543 fixes #625 fixes #628 fixes #640 closes #1293
Diffstat (limited to 'test')
-rw-r--r--test/compress/drop-unused.js2
-rw-r--r--test/compress/evaluate.js8
-rw-r--r--test/compress/functions.js8
-rw-r--r--test/compress/issue-640.js317
-rw-r--r--test/compress/negate-iife.js87
-rw-r--r--test/compress/sequences.js2
6 files changed, 412 insertions, 12 deletions
diff --git a/test/compress/drop-unused.js b/test/compress/drop-unused.js
index 4b613181..20dab3b9 100644
--- a/test/compress/drop-unused.js
+++ b/test/compress/drop-unused.js
@@ -632,7 +632,7 @@ iife: {
}
expect: {
function f() {
- ~function() {}(b);
+ b;
}
}
}
diff --git a/test/compress/evaluate.js b/test/compress/evaluate.js
index 26b6e489..68739503 100644
--- a/test/compress/evaluate.js
+++ b/test/compress/evaluate.js
@@ -640,9 +640,7 @@ call_args: {
expect: {
const a = 1;
console.log(1);
- +function(a) {
- return 1;
- }(1);
+ +(1, 1);
}
}
@@ -663,9 +661,7 @@ call_args_drop_param: {
expect: {
const a = 1;
console.log(1);
- +function() {
- return 1;
- }(b);
+ +(b, 1);
}
}
diff --git a/test/compress/functions.js b/test/compress/functions.js
index d3d99b57..18505a18 100644
--- a/test/compress/functions.js
+++ b/test/compress/functions.js
@@ -35,9 +35,9 @@ iifes_returning_constants_keep_fargs_true: {
console.log("okay");
console.log(123);
console.log(void 0);
- console.log(function(x,y,z){return 2}(1,2,3));
- console.log(function(x,y){return 6}(2,3));
- console.log(function(x, y){return 6}(2,3,a(),b()));
+ console.log(2);
+ console.log(6);
+ console.log((a(), b(), 6));
}
}
@@ -71,6 +71,6 @@ iifes_returning_constants_keep_fargs_false: {
console.log(void 0);
console.log(2);
console.log(6);
- console.log(function(){return 6}(a(),b()));
+ console.log((a(), b(), 6));
}
}
diff --git a/test/compress/issue-640.js b/test/compress/issue-640.js
new file mode 100644
index 00000000..dd3f3f21
--- /dev/null
+++ b/test/compress/issue-640.js
@@ -0,0 +1,317 @@
+cond_5: {
+ options = {
+ conditionals: true,
+ expression: true,
+ }
+ input: {
+ if (some_condition()) {
+ if (some_other_condition()) {
+ do_something();
+ } else {
+ alternate();
+ }
+ } else {
+ alternate();
+ }
+
+ if (some_condition()) {
+ if (some_other_condition()) {
+ do_something();
+ }
+ }
+ }
+ expect: {
+ some_condition() && some_other_condition() ? do_something() : alternate();
+ if (some_condition() && some_other_condition()) do_something();
+ }
+}
+
+dead_code_const_annotation_regex: {
+ options = {
+ booleans : true,
+ conditionals : true,
+ dead_code : true,
+ evaluate : true,
+ expression : true,
+ loops : true,
+ }
+ input: {
+ var unused;
+ // @constraint this shouldn't be a constant
+ var CONST_FOO_ANN = false;
+ if (CONST_FOO_ANN) {
+ console.log("reachable");
+ }
+ }
+ expect: {
+ var unused;
+ var CONST_FOO_ANN = !1;
+ if (CONST_FOO_ANN) console.log('reachable');
+ }
+}
+
+drop_console_2: {
+ options = {
+ drop_console: true,
+ expression: true,
+ }
+ input: {
+ console.log('foo');
+ console.log.apply(console, arguments);
+ }
+ expect: {
+ // with regular compression these will be stripped out as well
+ void 0;
+ void 0;
+ }
+}
+
+drop_value: {
+ options = {
+ expression: true,
+ side_effects: true,
+ }
+ input: {
+ (1, [2, foo()], 3, {a:1, b:bar()});
+ }
+ expect: {
+ foo(), {a:1, b:bar()};
+ }
+}
+
+wrongly_optimized: {
+ options = {
+ conditionals: true,
+ booleans: true,
+ evaluate: true,
+ expression: true,
+ }
+ input: {
+ function func() {
+ foo();
+ }
+ if (func() || true) {
+ bar();
+ }
+ }
+ expect: {
+ function func() {
+ foo();
+ }
+ // TODO: optimize to `func(), bar()`
+ if (func(), !0) bar();
+ }
+}
+
+negate_iife_1: {
+ options = {
+ expression: true,
+ negate_iife: true,
+ }
+ input: {
+ (function(){ stuff() })();
+ }
+ expect: {
+ (function(){ stuff() })();
+ }
+}
+
+negate_iife_3: {
+ options = {
+ conditionals: true,
+ expression: true,
+ negate_iife: true,
+ }
+ input: {
+ (function(){ return t })() ? console.log(true) : console.log(false);
+ }
+ expect: {
+ (function(){ return t })() ? console.log(true) : console.log(false);
+ }
+}
+
+negate_iife_3_off: {
+ options = {
+ conditionals: true,
+ expression: true,
+ negate_iife: false,
+ }
+ input: {
+ (function(){ return t })() ? console.log(true) : console.log(false);
+ }
+ expect: {
+ (function(){ return t })() ? console.log(true) : console.log(false);
+ }
+}
+
+negate_iife_4: {
+ options = {
+ conditionals: true,
+ expression: true,
+ negate_iife: true,
+ sequences: true,
+ }
+ input: {
+ (function(){ return t })() ? console.log(true) : console.log(false);
+ (function(){
+ console.log("something");
+ })();
+ }
+ expect: {
+ (function(){ return t })() ? console.log(true) : console.log(false), function(){
+ console.log("something");
+ }();
+ }
+}
+
+negate_iife_5: {
+ options = {
+ conditionals: true,
+ expression: true,
+ negate_iife: true,
+ sequences: true,
+ }
+ input: {
+ if ((function(){ return t })()) {
+ foo(true);
+ } else {
+ bar(false);
+ }
+ (function(){
+ console.log("something");
+ })();
+ }
+ expect: {
+ (function(){ return t })() ? foo(true) : bar(false), function(){
+ console.log("something");
+ }();
+ }
+}
+
+negate_iife_5_off: {
+ options = {
+ conditionals: true,
+ expression: true,
+ negate_iife: false,
+ sequences: true,
+ };
+ input: {
+ if ((function(){ return t })()) {
+ foo(true);
+ } else {
+ bar(false);
+ }
+ (function(){
+ console.log("something");
+ })();
+ }
+ expect: {
+ (function(){ return t })() ? foo(true) : bar(false), function(){
+ console.log("something");
+ }();
+ }
+}
+
+issue_1254_negate_iife_true: {
+ options = {
+ expression: true,
+ negate_iife: true,
+ }
+ input: {
+ (function() {
+ return function() {
+ console.log('test')
+ };
+ })()();
+ }
+ expect_exact: '(function(){return function(){console.log("test")}})()();'
+}
+
+issue_1254_negate_iife_nested: {
+ options = {
+ expression: true,
+ negate_iife: true,
+ }
+ input: {
+ (function() {
+ return function() {
+ console.log('test')
+ };
+ })()()()()();
+ }
+ expect_exact: '(function(){return function(){console.log("test")}})()()()()();'
+}
+
+conditional: {
+ options = {
+ expression: true,
+ pure_funcs: [ "pure" ],
+ side_effects: true,
+ }
+ input: {
+ pure(1 | a() ? 2 & b() : 7 ^ c());
+ pure(1 | a() ? 2 & b() : 5);
+ pure(1 | a() ? 4 : 7 ^ c());
+ pure(1 | a() ? 4 : 5);
+ pure(3 ? 2 & b() : 7 ^ c());
+ pure(3 ? 2 & b() : 5);
+ pure(3 ? 4 : 7 ^ c());
+ pure(3 ? 4 : 5);
+ }
+ expect: {
+ 1 | a() ? b() : c();
+ 1 | a() && b();
+ 1 | a() || c();
+ a();
+ 3 ? b() : c();
+ 3 && b();
+ 3 || c();
+ pure(3 ? 4 : 5);
+ }
+}
+
+limit_1: {
+ options = {
+ expression: true,
+ sequences: 3,
+ }
+ input: {
+ a;
+ b;
+ c;
+ d;
+ e;
+ f;
+ g;
+ h;
+ i;
+ j;
+ k;
+ }
+ expect: {
+ // Turned into a single return statement
+ // so it can no longer be split into lines
+ a,b,c,d,e,f,g,h,i,j,k;
+ }
+}
+
+iife: {
+ options = {
+ expression: true,
+ sequences: true,
+ }
+ input: {
+ x = 42;
+ (function a() {})();
+ !function b() {}();
+ ~function c() {}();
+ +function d() {}();
+ -function e() {}();
+ void function f() {}();
+ typeof function g() {}();
+ }
+ expect: {
+ x = 42, function a() {}(), function b() {}(), function c() {}(),
+ function d() {}(), function e() {}(), function f() {}(), typeof function g() {}();
+ }
+}
diff --git a/test/compress/negate-iife.js b/test/compress/negate-iife.js
index f17ae206..9a0b5a46 100644
--- a/test/compress/negate-iife.js
+++ b/test/compress/negate-iife.js
@@ -32,6 +32,19 @@ negate_iife_2: {
}
}
+negate_iife_2_side_effects: {
+ options = {
+ negate_iife: true,
+ side_effects: true,
+ }
+ input: {
+ (function(){ return {} })().x = 10; // should not transform this one
+ }
+ expect: {
+ (function(){ return {} })().x = 10;
+ }
+}
+
negate_iife_3: {
options = {
negate_iife: true,
@@ -45,6 +58,34 @@ negate_iife_3: {
}
}
+negate_iife_3_evaluate: {
+ options = {
+ conditionals: true,
+ evaluate: true,
+ negate_iife: true,
+ }
+ input: {
+ (function(){ return true })() ? console.log(true) : console.log(false);
+ }
+ expect: {
+ console.log(true);
+ }
+}
+
+negate_iife_3_side_effects: {
+ options = {
+ conditionals: true,
+ negate_iife: true,
+ side_effects: true,
+ }
+ input: {
+ (function(){ return t })() ? console.log(true) : console.log(false);
+ }
+ expect: {
+ !function(){ return t }() ? console.log(false) : console.log(true);
+ }
+}
+
negate_iife_3_off: {
options = {
negate_iife: false,
@@ -58,6 +99,20 @@ negate_iife_3_off: {
}
}
+negate_iife_3_off_evaluate: {
+ options = {
+ conditionals: true,
+ evaluate: true,
+ negate_iife: false,
+ }
+ input: {
+ (function(){ return true })() ? console.log(true) : console.log(false);
+ }
+ expect: {
+ console.log(true);
+ }
+}
+
negate_iife_4: {
options = {
negate_iife: true,
@@ -320,3 +375,35 @@ issue_1288: {
}(0);
}
}
+
+issue_1288_side_effects: {
+ options = {
+ conditionals: true,
+ negate_iife: true,
+ side_effects: true,
+ }
+ input: {
+ if (w) ;
+ else {
+ (function f() {})();
+ }
+ if (!x) {
+ (function() {
+ x = {};
+ })();
+ }
+ if (y)
+ (function() {})();
+ else
+ (function(z) {
+ return z;
+ })(0);
+ }
+ expect: {
+ w;
+ x || function() {
+ x = {};
+ }();
+ y;
+ }
+}
diff --git a/test/compress/sequences.js b/test/compress/sequences.js
index d93f5237..7bb274cb 100644
--- a/test/compress/sequences.js
+++ b/test/compress/sequences.js
@@ -248,6 +248,6 @@ iife: {
}
expect: {
x = 42, function a() {}(), function b() {}(), function c() {}(),
- function d() {}(), function e() {}(), function f() {}(), function g() {}()
+ function d() {}(), function e() {}(), function f() {}(), function g() {}();
}
}