summaryrefslogtreecommitdiff
path: root/browser/devtools/shared/test/browser_require_basic.js
diff options
context:
space:
mode:
Diffstat (limited to 'browser/devtools/shared/test/browser_require_basic.js')
-rw-r--r--browser/devtools/shared/test/browser_require_basic.js140
1 files changed, 140 insertions, 0 deletions
diff --git a/browser/devtools/shared/test/browser_require_basic.js b/browser/devtools/shared/test/browser_require_basic.js
new file mode 100644
index 000000000..f86974df4
--- /dev/null
+++ b/browser/devtools/shared/test/browser_require_basic.js
@@ -0,0 +1,140 @@
+/* Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/publicdomain/zero/1.0/ */
+
+// Tests that source URLs in the Web Console can be clicked to display the
+// standard View Source window.
+
+let [ define, require ] = (function() {
+ let tempScope = {};
+ Components.utils.import("resource://gre/modules/devtools/Require.jsm", tempScope);
+ return [ tempScope.define, tempScope.require ];
+})();
+
+function test() {
+ addTab("about:blank", function() {
+ info("Starting Require Tests");
+ setup();
+
+ testWorking();
+ testDomains();
+ testLeakage();
+ testMultiImport();
+ testRecursive();
+ testUncompilable();
+ testFirebug();
+
+ shutdown();
+ });
+}
+
+function setup() {
+ define('gclitest/requirable', [ 'require', 'exports', 'module' ], function(require, exports, module) {
+ exports.thing1 = 'thing1';
+ exports.thing2 = 2;
+
+ let status = 'initial';
+ exports.setStatus = function(aStatus) { status = aStatus; };
+ exports.getStatus = function() { return status; };
+ });
+
+ define('gclitest/unrequirable', [ 'require', 'exports', 'module' ], function(require, exports, module) {
+ null.throwNPE();
+ });
+
+ define('gclitest/recurse', [ 'require', 'exports', 'module', 'gclitest/recurse' ], function(require, exports, module) {
+ require('gclitest/recurse');
+ });
+
+ define('gclitest/firebug', [ 'gclitest/requirable' ], function(requirable) {
+ return { requirable: requirable, fb: true };
+ });
+}
+
+function shutdown() {
+ delete define.modules['gclitest/requirable'];
+ delete define.globalDomain.modules['gclitest/requirable'];
+ delete define.modules['gclitest/unrequirable'];
+ delete define.globalDomain.modules['gclitest/unrequirable'];
+ delete define.modules['gclitest/recurse'];
+ delete define.globalDomain.modules['gclitest/recurse'];
+ delete define.modules['gclitest/firebug'];
+ delete define.globalDomain.modules['gclitest/firebug'];
+
+ define = undefined;
+ require = undefined;
+
+ finish();
+}
+
+function testWorking() {
+ // There are lots of requirement tests that we could be doing here
+ // The fact that we can get anything at all working is a testament to
+ // require doing what it should - we don't need to test the
+ let requireable = require('gclitest/requirable');
+ is('thing1', requireable.thing1, 'thing1 was required');
+ is(2, requireable.thing2, 'thing2 was required');
+ is(requireable.thing3, undefined, 'thing3 was not required');
+}
+
+function testDomains() {
+ let requireable = require('gclitest/requirable');
+ is(requireable.status, undefined, 'requirable has no status');
+ requireable.setStatus(null);
+ is(null, requireable.getStatus(), 'requirable.getStatus changed to null');
+ is(requireable.status, undefined, 'requirable still has no status');
+ requireable.setStatus('42');
+ is('42', requireable.getStatus(), 'requirable.getStatus changed to 42');
+ is(requireable.status, undefined, 'requirable *still* has no status');
+
+ let domain = new define.Domain();
+ let requireable2 = domain.require('gclitest/requirable');
+ is(requireable2.status, undefined, 'requirable2 has no status');
+ is('initial', requireable2.getStatus(), 'requirable2.getStatus is initial');
+ requireable2.setStatus(999);
+ is(999, requireable2.getStatus(), 'requirable2.getStatus changed to 999');
+ is(requireable2.status, undefined, 'requirable2 still has no status');
+
+ is('42', requireable.getStatus(), 'status 42');
+ ok(requireable.status === undefined, 'requirable has no status (as expected)');
+
+ delete domain.modules['gclitest/requirable'];
+}
+
+function testLeakage() {
+ let requireable = require('gclitest/requirable');
+ is(requireable.setup, null, 'leakage of setup');
+ is(requireable.shutdown, null, 'leakage of shutdown');
+ is(requireable.testWorking, null, 'leakage of testWorking');
+}
+
+function testMultiImport() {
+ let r1 = require('gclitest/requirable');
+ let r2 = require('gclitest/requirable');
+ is(r1, r2, 'double require was strict equal');
+}
+
+function testUncompilable() {
+ // It's not totally clear how a module loader should perform with unusable
+ // modules, however at least it should go into a flat spin ...
+ // GCLI mini_require reports an error as it should
+ try {
+ let unrequireable = require('gclitest/unrequirable');
+ fail();
+ }
+ catch (ex) {
+ // an exception is expected
+ }
+}
+
+function testRecursive() {
+ // See Bug 658583
+ // require('gclitest/recurse');
+ // Also see the comments in the testRecursive() function
+}
+
+function testFirebug() {
+ let requirable = require('gclitest/requirable');
+ let firebug = require('gclitest/firebug');
+ ok(firebug.fb, 'firebug.fb is true');
+ is(requirable, firebug.requirable, 'requirable pass-through');
+}