diff options
Diffstat (limited to 'test/mocha/parentheses.js')
-rw-r--r-- | test/mocha/parentheses.js | 105 |
1 files changed, 105 insertions, 0 deletions
diff --git a/test/mocha/parentheses.js b/test/mocha/parentheses.js new file mode 100644 index 00000000..a3ef8604 --- /dev/null +++ b/test/mocha/parentheses.js @@ -0,0 +1,105 @@ +var assert = require("assert"); +var uglify = require("../../"); + +describe("parentheses", function() { + it("Should add trailing parentheses for new expressions with zero arguments in beautify mode", function() { + var tests = [ + "new x(1);", + "new x;", + "new new x;", + "new (function(foo){this.foo=foo;})(1);", + "new (function(foo){this.foo=foo;})();", + "new (function test(foo){this.foo=foo;})(1);", + "new (function test(foo){this.foo=foo;})();", + "new true;", + "new (0);", + "new (!0);", + "new (bar = function(foo) {this.foo=foo;})(123);", + "new (bar = function(foo) {this.foo=foo;})();" + ]; + var expected = [ + "new x(1);", + "new x();", + "new new x()();", + "new function(foo) {\n this.foo = foo;\n}(1);", + "new function(foo) {\n this.foo = foo;\n}();", + "new function test(foo) {\n this.foo = foo;\n}(1);", + "new function test(foo) {\n this.foo = foo;\n}();", + "new true();", + "new 0();", + "new (!0)();", + "new (bar = function(foo) {\n this.foo = foo;\n})(123);", + "new (bar = function(foo) {\n this.foo = foo;\n})();" + ]; + for (var i = 0; i < tests.length; i++) { + assert.strictEqual( + uglify.minify(tests[i], { + output: {beautify: true}, + compress: false, + mangle: false + }).code, + expected[i] + ); + } + }); + + it("Should not add trailing parentheses for new expressions with zero arguments in non-beautify mode", function() { + var tests = [ + "new x(1);", + "new x;", + "new new x;", + "new (function(foo){this.foo=foo;})(1);", + "new (function(foo){this.foo=foo;})();", + "new (function test(foo){this.foo=foo;})(1);", + "new (function test(foo){this.foo=foo;})();", + "new true;", + "new (0);", + "new (!0);", + "new (bar = function(foo) {this.foo=foo;})(123);", + "new (bar = function(foo) {this.foo=foo;})();" + ]; + var expected = [ + "new x(1);", + "new x;", + "new(new x);", + "new function(foo){this.foo=foo}(1);", + "new function(foo){this.foo=foo};", + "new function test(foo){this.foo=foo}(1);", + "new function test(foo){this.foo=foo};", + "new true;", + "new 0;", + "new(!0);", + "new(bar=function(foo){this.foo=foo})(123);", + "new(bar=function(foo){this.foo=foo});" + ]; + for (var i = 0; i < tests.length; i++) { + assert.strictEqual( + uglify.minify(tests[i], { + output: {beautify: false}, + compress: false, + mangle: false + }).code, + expected[i] + ); + } + }); + + it("Should compress leading parenthesis with reasonable performance", function() { + this.timeout(30000); + var code = [ + "({}?0:1)&&x();", + "(function(){}).name;", + ]; + for (var i = 16; --i >= 0;) { + [].push.apply(code, code); + } + code = code.join(""); + var result = uglify.minify(code, { + compress: false, + mangle: false, + }); + if (result.error) throw result.error; + // Dismal performance for `assert.strictEqual()` in Node.js 6 + assert.ok(result.code === code); + }); +}); |