UglifyJS/test/strict-mode-mangler.js

78 lines
2.3 KiB
JavaScript
Raw Normal View History

2016-02-28 12:05:57 +00:00
var UglifyJS = require("..");
var assert = require("assert");
var alphabet = "abcdefghijklmnop".split("");
var perms = [];
var linesOfCode = [];
var startTime = new Date().getTime();
console.log("--- Strict mode mangling tests");
function permute(text) {
perms.push(text);
if(text.length < 4) {
for(var i = 0; i < alphabet.length; i++) {
permute(text + alphabet[i]);
}
}
}
permute("");
var permuteTime = new Date().getTime() - startTime;
console.log(" - Generated perms in " + permuteTime + "ms")
console.log(" - Testing with " + perms.length + " identifiers");
console.log(" - Mangling (this will take some time)...");
function getCode(withStrictMode) {
linesOfCode = " function outer() {\n";
if (!!withStrictMode) {
linesOfCode += " \"use strict\";\n";
}
for (var i in perms) {
linesOfCode += " var _" + perms[i] + " = 1;\n"
}
linesOfCode += " function inner() {\n";
for (var i in perms) {
linesOfCode += " _" + perms[i] + "++;\n";
}
linesOfCode += " }\n";
linesOfCode += " }\n";
return linesOfCode;
}
module.exports = function () {
var startManglingTime = new Date().getTime();
var mangled_code = mangle(getCode(false));
console.log(" - Found 'var let' at char: " + mangled_code.indexOf('var let'));
console.log(" - Mangled code with no strict mode in " + Math.floor((new Date().getTime() - startManglingTime)/ 1000) + "s");
assert(mangled_code.indexOf('var let') >= 0, "No 'var let' produced in the mangled code outside strict mode.");
startManglingTime = new Date().getTime();
var mangled_strict_code = mangle(getCode(true));
console.log(" - This should be -1: " + mangled_strict_code.indexOf('var let'));
console.log(" - Mangled code with strict mode in " + Math.floor((new Date().getTime() - startManglingTime)/ 1000) + "s");
assert(mangled_strict_code.indexOf('var let') === -1, "A 'var let' statement was produced inside strict mode.");
}
function mangle(js) {
var stream = UglifyJS.OutputStream();
var parsed = UglifyJS.parse(js);
parsed.figure_out_scope();
parsed.mangle_names();
parsed.print(stream);
return stream.toString();
}
// Run standalone
if (module.parent === null) {
module.exports();
}