-dead_code_1: {\r
- options = {\r
- dead_code: true\r
- };\r
- input: {\r
- function f() {\r
- a();\r
- b();\r
- x = 10;\r
- return;\r
- if (x) {\r
- y();\r
- }\r
- }\r
- }\r
- expect: {\r
- function f() {\r
- a();\r
- b();\r
- x = 10;\r
- return;\r
- }\r
- }\r
-}\r
-\r
-dead_code_2_should_warn: {\r
- options = {\r
- dead_code: true\r
- };\r
- input: {\r
- function f() {\r
- g();\r
- x = 10;\r
- throw "foo";\r
- // completely discarding the `if` would introduce some\r
- // bugs. UglifyJS v1 doesn't deal with this issue; in v2\r
- // we copy any declarations to the upper scope.\r
- if (x) {\r
- y();\r
- var x;\r
- function g(){};\r
- // but nested declarations should not be kept.\r
- (function(){\r
- var q;\r
- function y(){};\r
- })();\r
- }\r
- }\r
- }\r
- expect: {\r
- function f() {\r
- g();\r
- x = 10;\r
- throw "foo";\r
- var x;\r
- function g(){};\r
- }\r
- }\r
-}\r
-\r
-dead_code_constant_boolean_should_warn_more: {\r
- options = {\r
- dead_code : true,\r
- loops : true,\r
- booleans : true,\r
- conditionals : true,\r
- evaluate : true\r
- };\r
- input: {\r
- while (!((foo && bar) || (x + "0"))) {\r
- console.log("unreachable");\r
- var foo;\r
- function bar() {}\r
- }\r
- for (var x = 10, y; x && (y || x) && (!typeof x); ++x) {\r
- asdf();\r
- foo();\r
- var moo;\r
- }\r
- }\r
- expect: {\r
- var foo;\r
- function bar() {}\r
- // nothing for the while\r
- // as for the for, it should keep:\r
- var x = 10, y;\r
- var moo;\r
- }\r
-}\r
-\r
-dead_code_const_declaration: {\r
- options = {\r
- dead_code : true,\r
- loops : true,\r
- booleans : true,\r
- conditionals : true,\r
- evaluate : true\r
- };\r
- input: {\r
- var unused;\r
- const CONST_FOO = false;\r
- if (CONST_FOO) {\r
- console.log("unreachable");\r
- var moo;\r
- function bar() {}\r
- }\r
- }\r
- expect: {\r
- var unused;\r
- const CONST_FOO = !1;\r
- var moo;\r
- function bar() {}\r
- }\r
-}\r
-\r
-dead_code_const_annotation: {\r
- options = {\r
- dead_code : true,\r
- loops : true,\r
- booleans : true,\r
- conditionals : true,\r
- evaluate : true\r
- };\r
- input: {\r
- var unused;\r
- /** @const */ var CONST_FOO_ANN = false;\r
- if (CONST_FOO_ANN) {\r
- console.log("unreachable");\r
- var moo;\r
- function bar() {}\r
- }\r
- }\r
- expect: {\r
- var unused;\r
- var CONST_FOO_ANN = !1;\r
- var moo;\r
- function bar() {}\r
- }\r
-}\r
-\r
-dead_code_const_annotation_regex: {\r
- options = {\r
- dead_code : true,\r
- loops : true,\r
- booleans : true,\r
- conditionals : true,\r
- evaluate : true\r
- };\r
- input: {\r
- var unused;\r
- // @constraint this shouldn't be a constant\r
- var CONST_FOO_ANN = false;\r
- if (CONST_FOO_ANN) {\r
- console.log("reachable");\r
- }\r
- }\r
- expect: {\r
- var unused;\r
- var CONST_FOO_ANN = !1;\r
- CONST_FOO_ANN && console.log('reachable');\r
- }\r
-}\r
-\r
-dead_code_const_annotation_complex_scope: {\r
- options = {\r
- dead_code : true,\r
- loops : true,\r
- booleans : true,\r
- conditionals : true,\r
- evaluate : true\r
- };\r
- input: {\r
- var unused_var;\r
- /** @const */ var test = 'test';\r
- // @const\r
- var CONST_FOO_ANN = false;\r
- var unused_var_2;\r
- if (CONST_FOO_ANN) {\r
- console.log("unreachable");\r
- var moo;\r
- function bar() {}\r
- }\r
- if (test === 'test') {\r
- var beef = 'good';\r
- /** @const */ var meat = 'beef';\r
- var pork = 'bad';\r
- if (meat === 'pork') {\r
- console.log('also unreachable');\r
- } else if (pork === 'good') {\r
- console.log('reached, not const');\r
- }\r
- }\r
- }\r
- expect: {\r
- var unused_var;\r
- var test = 'test';\r
- var CONST_FOO_ANN = !1;\r
- var unused_var_2;\r
- var moo;\r
- function bar() {}\r
- var beef = 'good';\r
- var meat = 'beef';\r
- var pork = 'bad';\r
- 'good' === pork && console.log('reached, not const');\r
- }\r
-}\r
+dead_code_1: {
+ options = {
+ dead_code: true
+ };
+ input: {
+ function f() {
+ a();
+ b();
+ x = 10;
+ return;
+ if (x) {
+ y();
+ }
+ }
+ }
+ expect: {
+ function f() {
+ a();
+ b();
+ x = 10;
+ return;
+ }
+ }
+}
+
+dead_code_2_should_warn: {
+ options = {
+ dead_code: true
+ };
+ input: {
+ function f() {
+ g();
+ x = 10;
+ throw "foo";
+ // completely discarding the `if` would introduce some
+ // bugs. UglifyJS v1 doesn't deal with this issue; in v2
+ // we copy any declarations to the upper scope.
+ if (x) {
+ y();
+ var x;
+ function g(){};
+ // but nested declarations should not be kept.
+ (function(){
+ var q;
+ function y(){};
+ })();
+ }
+ }
+ }
+ expect: {
+ function f() {
+ g();
+ x = 10;
+ throw "foo";
+ var x;
+ function g(){};
+ }
+ }
+}
+
+dead_code_constant_boolean_should_warn_more: {
+ options = {
+ dead_code : true,
+ loops : true,
+ booleans : true,
+ conditionals : true,
+ evaluate : true
+ };
+ input: {
+ while (!((foo && bar) || (x + "0"))) {
+ console.log("unreachable");
+ var foo;
+ function bar() {}
+ }
+ for (var x = 10, y; x && (y || x) && (!typeof x); ++x) {
+ asdf();
+ foo();
+ var moo;
+ }
+ }
+ expect: {
+ var foo;
+ function bar() {}
+ // nothing for the while
+ // as for the for, it should keep:
+ var x = 10, y;
+ var moo;
+ }
+}
+
+dead_code_const_declaration: {
+ options = {
+ dead_code : true,
+ loops : true,
+ booleans : true,
+ conditionals : true,
+ evaluate : true
+ };
+ input: {
+ var unused;
+ const CONST_FOO = false;
+ if (CONST_FOO) {
+ console.log("unreachable");
+ var moo;
+ function bar() {}
+ }
+ }
+ expect: {
+ var unused;
+ const CONST_FOO = !1;
+ var moo;
+ function bar() {}
+ }
+}
+
+dead_code_const_annotation: {
+ options = {
+ dead_code : true,
+ loops : true,
+ booleans : true,
+ conditionals : true,
+ evaluate : true
+ };
+ input: {
+ var unused;
+ /** @const */ var CONST_FOO_ANN = false;
+ if (CONST_FOO_ANN) {
+ console.log("unreachable");
+ var moo;
+ function bar() {}
+ }
+ }
+ expect: {
+ var unused;
+ var CONST_FOO_ANN = !1;
+ var moo;
+ function bar() {}
+ }
+}
+
+dead_code_const_annotation_regex: {
+ options = {
+ dead_code : true,
+ loops : true,
+ booleans : true,
+ conditionals : true,
+ evaluate : 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;
+ CONST_FOO_ANN && console.log('reachable');
+ }
+}
+
+dead_code_const_annotation_complex_scope: {
+ options = {
+ dead_code : true,
+ loops : true,
+ booleans : true,
+ conditionals : true,
+ evaluate : true
+ };
+ input: {
+ var unused_var;
+ /** @const */ var test = 'test';
+ // @const
+ var CONST_FOO_ANN = false;
+ var unused_var_2;
+ if (CONST_FOO_ANN) {
+ console.log("unreachable");
+ var moo;
+ function bar() {}
+ }
+ if (test === 'test') {
+ var beef = 'good';
+ /** @const */ var meat = 'beef';
+ var pork = 'bad';
+ if (meat === 'pork') {
+ console.log('also unreachable');
+ } else if (pork === 'good') {
+ console.log('reached, not const');
+ }
+ }
+ }
+ expect: {
+ var unused_var;
+ var test = 'test';
+ var CONST_FOO_ANN = !1;
+ var unused_var_2;
+ var moo;
+ function bar() {}
+ var beef = 'good';
+ var meat = 'beef';
+ var pork = 'bad';
+ 'good' === pork && console.log('reached, not const');
+ }
+}