UNPKG

dojo-util

Version:

Dojo utilities including build system for optimizing JavaScript application performance, and DOH testing tool

221 lines (177 loc) 7.61 kB
dojo.provide("shrinksafe.tests.module"); // basic helper functions for running multiple tests. shrinksafe.tests.module.getContents = function(path){ // summary: // Load a file from this /tests/ path into a variable path = "../shrinksafe/tests/" + path; return readFile(path); // String }; shrinksafe.tests.module.compress = function(source, stripConsole, escapeUnicode){ // summary: // Shorthand to compress some String version of JS code return new String(Packages.org.dojotoolkit.shrinksafe.Compressor.compressScript(source, 0, 1, escapeUnicode, stripConsole)).toString(); }; shrinksafe.tests.module.loader = function(path, stripConsole, escapeUnicode){ // summary: // Simple function to load and compress some file. Returns and object // with 'original' and 'compressed' members, respectively. var s = shrinksafe.tests.module.getContents(path); return { original: s, compressed: shrinksafe.tests.module.compress(s, stripConsole, escapeUnicode || false) }; }; try{ tests.register("shrinksafe", [ function forwardReference(t){ var src = shrinksafe.tests.module.loader("3241.js", null); t.assertTrue(src.original.length > src.compressed.length); t.assertTrue(src.compressed.indexOf("test") == -1) eval(src.compressed); t.assertEqual("data", result); delete result; }, function nestedReference(t){ var src = shrinksafe.tests.module.loader("5303.js", null); t.assertTrue(src.original.length > src.compressed.length); t.assertTrue(src.compressed.indexOf("say_hello") == -1) t.assertTrue(src.compressed.indexOf("callback") == -1) eval(src.compressed); // make sure it runs to completion t.assertEqual("hello worldhello world", result); // globals must not be renamed t.assertEqual("function", typeof CallMe); delete result; }, function varConflict(t){ // ensuring a shrunken variable won't overwrite an existing variable // name, regardless of scope. var src = shrinksafe.tests.module.loader("8974.js", null); t.assertTrue(src.original.length > src.compressed.length); t.assertTrue(src.compressed.indexOf("variabletwo") == -1) eval(src.compressed); t.assertEqual(-1, result); delete result; }, function varlists(t){ // test to ensure var a, b, c; always works var src = shrinksafe.tests.module.loader("1768.js", null); // ensure the things we expect to hide are hidden t.t(src.compressed.indexOf("superlong") == -1); t.t(src.compressed.indexOf("aFunction") == -1); t.t(src.compressed.indexOf("inList") == -1); // sanity checking: var boo = eval(src.compressed); t.is(4, result); delete result; }, function stripConsoleNormal(t){ var src = shrinksafe.tests.module.loader("stripconsole.js", "normal"); t.assertTrue(src.compressed.indexOf("console.debug(\"debug here!\"") == -1) t.assertTrue(src.compressed.indexOf("console.warn(\"warn here!\")") != -1) t.assertTrue(src.compressed.indexOf("console.error(\"error here!\")") != -1) eval(src.compressed); // make sure expected output occurs. t.assertEqual("WARN: warn here!ERROR: error here!notconsole debug here!notconsole warn here!", result); delete result; }, function stripConsoleWarns(t){ var src = shrinksafe.tests.module.loader("stripconsole.js", "warn"); t.assertTrue(src.original.length > src.compressed.length); t.assertTrue(src.compressed.indexOf("console.debug(\"debug here!\"") == -1) t.assertTrue(src.compressed.indexOf("console.warn(\"warn here!\")") == -1) t.assertTrue(src.compressed.indexOf("console.error(\"error here!\")") != -1) eval(src.compressed); // make sure expected output occurs. t.assertEqual("ERROR: error here!notconsole debug here!notconsole warn here!", result); delete result; }, function stripConsoleAll(t){ var src = shrinksafe.tests.module.loader("stripconsole.js", "all"); t.assertTrue(src.original.length > src.compressed.length); t.assertTrue(src.compressed.indexOf("console.debug(\"debug here!\"") == -1) t.assertTrue(src.compressed.indexOf("console.warn(\"warn here!\")") == -1) t.assertTrue(src.compressed.indexOf("console.error(\"error here!\")") == -1) eval(src.compressed); // make sure expected output occurs. t.assertEqual("notconsole debug here!notconsole warn here!", result); delete result; }, function stripConsoleComplex(t){ var src = shrinksafe.tests.module.loader("stripcomplex.js", "normal"); t.assertTrue(src.original.length > src.compressed.length); eval(src.compressed); // make sure expected output occurs. t.assertEqual("ERROR: wooosome \\ dodgy \" characters *$!?//3-3fn saw arg 'wooo'.ERROR: Error return statement.", result); delete result; }, function debuggerCall(t){ // make sure we don't die when we find a debugger; statement var src = shrinksafe.tests.module.loader("9444.js", null); t.t(src.compressed.indexOf("debugger") > -1); }, function nestedReference(t){ var src = shrinksafe.tests.module.loader("9676.js", null); eval(src.compressed); // will throw on failure t.assertEqual(6, result); delete result; }, function escapeUnicode(t){ var src = shrinksafe.tests.module.loader("escapeunicode.js", null); t.assertTrue(src.compressed.indexOf('"\u03b1";') == 0); t.assertTrue(src.compressed.indexOf('_\\x00_') > 0); t.assertTrue(src.compressed.indexOf('_\ufffd_') > 0); t.assertTrue(src.compressed.indexOf('_\\ufffe_') > 0); t.assertTrue(src.compressed.indexOf('_\\uffff_') > 0); // t.is('"\u03b1 \u03c9";', src.compressed); // extended test isn't working... encoding problem with input? src = shrinksafe.tests.module.loader("escapeunicode.js", null, true); t.assertTrue(src.compressed.indexOf('"\\u03b1";') == 0); t.assertTrue(src.compressed.indexOf('_\\x00_') > 0); t.assertTrue(src.compressed.indexOf('_\\ufffd_') > 0); t.assertTrue(src.compressed.indexOf('_\\ufffe_') > 0); t.assertTrue(src.compressed.indexOf('_\\uffff_') > 0); // t.is('"\\u03b1 \\u03c9";', src.compressed); }, function mungeStrings(t){ // this test is skipped intentionally. You must manually enabled the // code in Compressor.java which enables this functionality. The functionality // is not considered completely "safe" and thus has been disabled. // simply uncomment the block in Compressor.java to reinstate functionality. // original patch came under [ccla]. See bugs.dojotoolkit.org/ticket/8828 return; var src = shrinksafe.tests.module.loader("8828.js"); t.t(src.compressed.indexOf("ab") > -1); // basic test t.t(src.compressed.indexOf('"a"+n') > -1); // basic expected miss t.t(src.compressed.indexOf('thisisatestspanning"+h') > -1); t.t(src.compressed.indexOf("testingmultiplelines") > -1); t.t(src.compressed.indexOf("testingcombined\"+") > -1); var boo = eval(src.compressed); t.is(5, result.length); t.t(result[3].indexOf("TheQuickredFox") > -1); // complex var post eval t.is(result[4], "thisisatestspanning4lines"); // multiline post eval delete result; var expected = [ "testing","testbarsimple", "testingcombinedbarvariables", "test \"+weird syntax", "testbasic", "test \"mixed\"", "testingmultiplelines", "test \"mixed\" andmunge", "test", "tesbart", "\"slightly\"+\"off\"", // fails: "falseb", "falseb", "falseb" ]; var data = string_tests(); data.forEach(function(str, i){ t.is(expected[i], str); }); delete string_tests; } ]); }catch(e){ doh.debug(e); }