diff --git a/packages/minifier-js/tests/minifier-tests.js b/packages/minifier-js/tests/minifier-tests.js index 69016adca1..eedf002870 100644 --- a/packages/minifier-js/tests/minifier-tests.js +++ b/packages/minifier-js/tests/minifier-tests.js @@ -1,61 +1,79 @@ -Tinytest.add('minifier-js - verify JS minification', (test) => { - const checkMinified = (js, expected, desc) => { - const result = meteorJsMinify(js); - console.log(result.code); - test.equal(result.code, expected, desc); - }; - checkMinified( - 'function add(first,second){return first + second; }\n', - 'function add(n,d){return n+d}', - 'simple name mangling check', - ); - checkMinified( - 'const person = {};person["name"] = "brian";person["age"] = 100; function printName(person){console.log(person["name"])};printName(person);\n', - 'const person={};function printName(n){console.log(n.name)}person.name="brian",person.age=100,printName(person);', - 'property access converted to use dot notation check', - ); - checkMinified( - 'var name = "meteor"; var website = "www.meteor.com";var memberCount = 56;\n', - 'var name="meteor",website="www.meteor.com",memberCount=56;', - 'join consecutive var variable declarations and assignments into one statement check', - ); - checkMinified( - 'let name = "meteor"; let website = "www.meteor.com";let memberCount = 56;\n', - 'let name="meteor",website="www.meteor.com",memberCount=56;', - 'join consecutive let variable declarations and assignments into one statement check', - ); - checkMinified( - 'const name = "meteor"; const website = "www.meteor.com";const memberCount = 56;\n', - 'const name="meteor",website="www.meteor.com",memberCount=56;', - 'join consecutive const variable declarations and assignments into one statement check', - ); - checkMinified( - 'let foo;if (typeof foo == "undefined") { console.log("undefined variable"); }\n', - 'let foo;void 0===foo&&console.log("undefined variable");', - 'converting typeof operator into an equality with void 0 check', - ); - checkMinified( - 'let a = 10 + 20 + 30;\n', - 'let a=60;', - 'simple math evaluation check', - ); - checkMinified( - 'if (false) { console.log("hi"); }\n', - '0;', - 'unreachable code elimination check', - ); - checkMinified( - 'function a(z) { let returnValue = z == 10; return returnValue; }\n', - 'function a(n){let t;return 10==n}', - 'uneeded variable that returns a computed value being replaced with a statement that directly returns that computed value check', - ); - checkMinified( - 'let name = "meteor"; debugger; let age = 100;\n', - 'let name="meteor";debugger;let age=100;', - 'debugger statements will be left in the source check', - ); +Tinytest.add('minifier-js - verify simple JS minifications work', (test) => { + + let result = meteorJsMinify('function add(first,second){return first + second; }\n'); + test.equal(result.code, 'function add(n,d){return n+d}'); + + result = meteorJsMinify('let foo;if (typeof foo == "undefined") { console.log("undefined variable"); }\n'); + test.equal(result.code, 'let foo;void 0===foo&&console.log("undefined variable");'); + + result = meteorJsMinify('function a(z) { let returnValue = z == 10; return returnValue; }\n'); + test.equal(result.code,'function a(n){let t;return 10==n}'); }); +// properties -- default(true) +Tinytest.add('minifier-js - verify properties setting', (test) => { + let result = meteorJsMinify('const person = {};person["name"] = "brian";person["age"] = 100; function printName(person){console.log(person["name"])};printName(person);\n'); + test.equal(result.code, 'const person={};function printName(n){console.log(n.name)}person.name="brian",person.age=100,printName(person);'); + +}); + +// evaluate -- default(true) +Tinytest.add('minifier-js - verify evaluate setting', (test) => { + let result = meteorJsMinify('let a = 10 + 20 + 30;\n'); + test.equal(result.code, 'let a=60;'); +}); + +// sequences -- default(true) +Tinytest.add('minifier-js - verify sequences setting', (test) => { + let result = meteorJsMinify('var name = "meteor"; var website = "www.meteor.com";var memberCount = 56;\n'); + test.equal(result.code, 'var name="meteor",website="www.meteor.com",memberCount=56;'); + + result = meteorJsMinify('let name = "meteor"; let website = "www.meteor.com";let memberCount = 56;\n'); + test.equal(result.code, 'let name="meteor",website="www.meteor.com",memberCount=56;'); + + result = meteorJsMinify('const name = "meteor"; const website = "www.meteor.com";const memberCount = 56;\n'); + test.equal(result.code, 'const name="meteor",website="www.meteor.com",memberCount=56;'); +}); + +// dead_code -- default(true) +Tinytest.add('minifier-js - verify dead_code setting', (test) => { + + let result = meteorJsMinify('function f() {a();b();x = 10;return;if (x) {y();}}\n'); + test.equal(result.code, 'function f(){a(),b(),x=10}'); + + result = meteorJsMinify('if (false) { console.log("hi"); }\n'); + test.equal(result.code,'0;'); +}); + +//keep_numbers -- default(false) +Tinytest.add('minifier-js - verify keep_numbers setting', (test) => { + + let result = meteorJsMinify('let number = 1_000_000_000_000;\n'); + test.equal(result.code, 'let number=1e12;'); + + result = meteorJsMinify('let number = 0.000_000_000_001;\n'); + test.equal(result.code,'let number=1e-12;'); +}); + + +// unused -- default(true) +Tinytest.add('minifier-js - verify unused setting', (test) => { + + let result = meteorJsMinify('function foo(){let name = "ron";let firstName = "roger";console.log(firstName)};function bar(){let name = "ron";let firstName = "roger";console.log(firstName)};foo()\n'); + test.equal(result.code, 'function foo(){let o="ron",r="roger";console.log("roger")}function bar(){let o="ron",r="roger";console.log("roger")}foo();'); + +}); + +// drop_debugger -- default(true) +Tinytest.add('minifier-js - verify drop_debugger setting', (test) => { + + let result = meteorJsMinify('let name = "meteor"; debugger; let age = 100;\n'); + test.equal(result.code, 'let name="meteor";debugger;let age=100;'); + + result = meteorJsMinify('let name = "meteor";debugger;let age = 100;function printStatement(name) { console.log("hello QA developers " + name); debugger; };printStatement("brian");\n'); + test.equal(result.code, 'let name="meteor";debugger;let age=100;function printStatement(e){console.log("hello QA developers "+e);debugger}printStatement("brian");'); + +}); \ No newline at end of file