summaryrefslogtreecommitdiffstats
path: root/devtools/platform/tests/xpcshell
diff options
context:
space:
mode:
Diffstat (limited to 'devtools/platform/tests/xpcshell')
-rw-r--r--devtools/platform/tests/xpcshell/.eslintrc.js19
-rw-r--r--devtools/platform/tests/xpcshell/test_nsjsinspector.js66
-rw-r--r--devtools/platform/tests/xpcshell/xpcshell.ini6
3 files changed, 91 insertions, 0 deletions
diff --git a/devtools/platform/tests/xpcshell/.eslintrc.js b/devtools/platform/tests/xpcshell/.eslintrc.js
new file mode 100644
index 0000000000..dc7f2c85c4
--- /dev/null
+++ b/devtools/platform/tests/xpcshell/.eslintrc.js
@@ -0,0 +1,19 @@
+"use strict";
+
+// Parent config file for all devtools xpcshell files.
+module.exports = {
+ extends: ["plugin:mozilla/xpcshell-test"],
+ rules: {
+ // Allow non-camelcase so that run_test doesn't produce a warning.
+ camelcase: "off",
+ // Allow using undefined variables so that tests can refer to functions
+ // and variables defined in head.js files, without having to maintain a
+ // list of globals in each .eslintrc file.
+ // Note that bug 1168340 will eventually help auto-registering globals
+ // from head.js files.
+ "no-undef": "off",
+ "block-scoped-var": "off",
+ // Tests can always import anything.
+ "mozilla/reject-some-requires": "off",
+ },
+};
diff --git a/devtools/platform/tests/xpcshell/test_nsjsinspector.js b/devtools/platform/tests/xpcshell/test_nsjsinspector.js
new file mode 100644
index 0000000000..a5e63c0cdf
--- /dev/null
+++ b/devtools/platform/tests/xpcshell/test_nsjsinspector.js
@@ -0,0 +1,66 @@
+/* Any copyright is dedicated to the Public Domain.
+ http://creativecommons.org/publicdomain/zero/1.0/ */
+
+"use strict";
+
+// Test the basic functionality of the nsIJSInspector component.
+var gCount = 0;
+const MAX = 10;
+
+const { Services } = ChromeUtils.import("resource://gre/modules/Services.jsm");
+var inspector = Cc["@mozilla.org/jsinspector;1"].getService(Ci.nsIJSInspector);
+
+// Emulate 10 simultaneously-debugged windows from 3 separate client connections.
+var requestor = count => ({
+ url: "http://foo/bar/" + count,
+ connection: "conn" + (count % 3),
+});
+
+function run_test() {
+ test_nesting();
+}
+
+function test_nesting() {
+ Assert.equal(inspector.eventLoopNestLevel, 0);
+
+ Services.tm.dispatchToMainThread({ run: enterEventLoop });
+
+ Assert.equal(inspector.enterNestedEventLoop(requestor(gCount)), 0);
+ Assert.equal(inspector.eventLoopNestLevel, 0);
+ Assert.equal(inspector.lastNestRequestor, null);
+}
+
+function enterEventLoop() {
+ if (gCount++ < MAX) {
+ Services.tm.dispatchToMainThread({ run: enterEventLoop });
+
+ Object.create(requestor(gCount));
+
+ Assert.equal(inspector.eventLoopNestLevel, gCount);
+ Assert.equal(inspector.lastNestRequestor.url, requestor(gCount - 1).url);
+ Assert.equal(
+ inspector.lastNestRequestor.connection,
+ requestor(gCount - 1).connection
+ );
+ Assert.equal(inspector.enterNestedEventLoop(requestor(gCount)), gCount);
+ } else {
+ Assert.equal(gCount, MAX + 1);
+ Services.tm.dispatchToMainThread({ run: exitEventLoop });
+ }
+}
+
+function exitEventLoop() {
+ if (inspector.lastNestRequestor != null) {
+ Assert.equal(inspector.lastNestRequestor.url, requestor(gCount - 1).url);
+ Assert.equal(
+ inspector.lastNestRequestor.connection,
+ requestor(gCount - 1).connection
+ );
+ if (gCount-- > 1) {
+ Services.tm.dispatchToMainThread({ run: exitEventLoop });
+ }
+
+ Assert.equal(inspector.exitNestedEventLoop(), gCount);
+ Assert.equal(inspector.eventLoopNestLevel, gCount);
+ }
+}
diff --git a/devtools/platform/tests/xpcshell/xpcshell.ini b/devtools/platform/tests/xpcshell/xpcshell.ini
new file mode 100644
index 0000000000..91430971a7
--- /dev/null
+++ b/devtools/platform/tests/xpcshell/xpcshell.ini
@@ -0,0 +1,6 @@
+[DEFAULT]
+tags = devtools
+firefox-appdir = browser
+skip-if = toolkit == 'android'
+
+[test_nsjsinspector.js]