A few basic tests.

This commit is contained in:
Pablo Cubico 2016-02-28 09:05:57 -03:00
parent 0d1cff40ec
commit 1aa26cdef1
2 changed files with 175 additions and 0 deletions

View File

@ -0,0 +1,98 @@
keep_non_reserved_in_non_strict_mode: {
input: {
function outer() {
var implements = 1;
var interface = 1;
var let = 1;
var package = 1;
var private = 1;
var protected = 1;
var public = 1;
var static = 1;
function inner() {
implements++;
interface++;
let++;
package++;
private++;
protected++;
public++;
static++;
}
}
}
expect: {
function outer() {
var implements = 1;
var interface = 1;
var let = 1;
var package = 1;
var private = 1;
var protected = 1;
var public = 1;
var static = 1;
function inner() {
implements++;
interface++;
let++;
package++;
private++;
protected++;
public++;
static++;
}
}
}
}
mangle_non_reserved_in_non_strict_mode: {
mangle = {}
input: {
function outer() {
var implements = 1;
var interface = 1;
var let = 1;
var package = 1;
var private = 1;
var protected = 1;
var public = 1;
var static = 1;
function inner() {
implements++;
interface++;
let++;
package++;
private++;
protected++;
public++;
static++;
}
}
}
expect: {
function outer() {
var r=1;
var a=1;
var v=1;
var n=1;
var o=1;
var t=1;
var u=1;
var c=1;
function f() {
r++;
a++;
v++;
n++;
o++;
t++;
u++;
c++
}
}
}
}

View File

@ -0,0 +1,77 @@
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();
}