toolkit/components/workerloader/tests/worker_test_loading.js

Wed, 31 Dec 2014 06:09:35 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Wed, 31 Dec 2014 06:09:35 +0100
changeset 0
6474c204b198
permissions
-rw-r--r--

Cloned upstream origin tor-browser at tor-browser-31.3.0esr-4.5-1-build1
revision ID fc1c9ff7c1b2defdbc039f12214767608f46423f for hacking purpose.

     1 /* Any copyright is dedicated to the Public Domain.
     2    http://creativecommons.org/publicdomain/zero/1.0/ */
     4 "use strict";
     6 importScripts("utils_worker.js"); // Test suite code
     7 info("Test suite configured");
     9 importScripts("resource://gre/modules/workers/require.js");
    10 info("Loader imported");
    12 let PATH = "chrome://mochitests/content/chrome/toolkit/components/workerloader/tests/";
    13 let tests = [];
    14 let add_test = function(test) {
    15   tests.push(test);
    16 };
    18 add_test(function test_setup() {
    19   ok(typeof require != "undefined", "Function |require| is defined");
    20 });
    22 // Test simple loading (moduleA-depends.js requires moduleB-dependency.js)
    23 add_test(function test_load() {
    24   let A = require(PATH + "moduleA-depends.js");
    25   ok(true, "Opened module A");
    27   is(A.A, true, "Module A exported value A");
    28   ok(!("B" in A), "Module A did not export value B");
    29   is(A.importedFoo, "foo", "Module A re-exported B.foo");
    31   // re-evaluating moduleB-dependency.js would cause an error, but re-requiring it shouldn't
    32   let B = require(PATH + "moduleB-dependency.js");
    33   ok(true, "Managed to re-require module B");
    34   is(B.B, true, "Module B exported value B");
    35   is(B.foo, "foo", "Module B exported value foo");
    36 });
    38 // Test simple circular loading (moduleC-circular.js and moduleD-circular.js require each other)
    39 add_test(function test_circular() {
    40   let C = require(PATH + "moduleC-circular.js");
    41   ok(true, "Loaded circular modules C and D");
    42   is(C.copiedFromD.copiedFromC.enteredC, true, "Properties exported by C before requiring D can be seen by D immediately");
    44   let D = require(PATH + "moduleD-circular.js");
    45   is(D.exportedFromC.finishedC, true, "Properties exported by C after requiring D can be seen by D eventually");
    46 });
    48 // Testing error cases
    49 add_test(function test_exceptions() {
    50   let should_throw = function(f) {
    51     try {
    52       f();
    53       return null;
    54     } catch (ex) {
    55       return ex;
    56     }
    57   };
    59   let exn = should_throw(() => require(PATH + "this module doesn't exist"));
    60   ok(!!exn, "Attempting to load a module that doesn't exist raises an error");
    62   exn = should_throw(() => require(PATH + "moduleE-throws-during-require.js"));
    63   ok(!!exn, "Attempting to load a module that throws at toplevel raises an error");
    64   is(exn.moduleName, PATH + "moduleE-throws-during-require.js",
    65     "moduleName is correct");
    66   isnot(exn.moduleStack.indexOf("moduleE-throws-during-require.js"), -1,
    67     "moduleStack contains the name of the module");
    68   is(exn.lineNumber, 10, "The error comes with the right line number");
    70   exn = should_throw(() => require(PATH + "moduleF-syntaxerror.xml"));
    71   ok(!!exn, "Attempting to load a non-well formatted module raises an error");
    73   exn = should_throw(() => require(PATH + "moduleG-throws-later.js").doThrow());
    74   ok(!!exn, "G.doThrow() has raised an error");
    75   info(exn);
    76   ok(exn.toString().startsWith("TypeError"), "The exception is a TypeError.");
    77   is(exn.moduleName, PATH + "moduleG-throws-later.js", "The name of the module is correct");
    78   isnot(exn.moduleStack.indexOf("moduleG-throws-later.js"), -1,
    79     "The name of the right file appears somewhere in the stack");
    80   is(exn.lineNumber, 11, "The error comes with the right line number");
    81 });
    83 function get_exn(f) {
    84   try {
    85     f();
    86     return undefined;
    87   } catch (ex) {
    88     return ex;
    89   }
    90 }
    92 // Test module.exports
    93 add_test(function test_module_dot_exports() {
    94   let H = require(PATH + "moduleH-module-dot-exports.js");
    95   is(H.key, "value", "module.exports worked");
    96   let H2 = require(PATH + "moduleH-module-dot-exports.js");
    97   is(H2.key, "value", "module.exports returned the same key");
    98   ok(H2 === H, "module.exports returned the same module the second time");
    99   let exn = get_exn(() => H.key = "this should not be accepted");
   100   ok(exn instanceof TypeError, "Cannot alter value in module.exports after export");
   101   exn = get_exn(() => H.key2 = "this should not be accepted, either");
   102   ok(exn instanceof TypeError, "Cannot add value to module.exports after export");
   103 });
   105 self.onmessage = function(message) {
   106   for (let test of tests) {
   107     info("Entering " + test.name);
   108     try {
   109       test();
   110     } catch (ex) {
   111       ok(false, "Test " + test.name + " failed");
   112       info(ex);
   113       info(ex.stack);
   114     }
   115     info("Leaving " + test.name);
   116   }
   117   finish();
   118 };

mercurial