summaryrefslogtreecommitdiffstats
path: root/xpcom/tests/unit/test_notxpcom_scriptable.js
diff options
context:
space:
mode:
Diffstat (limited to 'xpcom/tests/unit/test_notxpcom_scriptable.js')
-rw-r--r--xpcom/tests/unit/test_notxpcom_scriptable.js70
1 files changed, 70 insertions, 0 deletions
diff --git a/xpcom/tests/unit/test_notxpcom_scriptable.js b/xpcom/tests/unit/test_notxpcom_scriptable.js
new file mode 100644
index 0000000000..d9f1452c53
--- /dev/null
+++ b/xpcom/tests/unit/test_notxpcom_scriptable.js
@@ -0,0 +1,70 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*-
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+const kCID = Components.ID("{1f9f7181-e6c5-4f4c-8f71-08005cec8468}");
+const kContract = "@testing/notxpcomtest";
+
+function run_test() {
+ let registrar = Components.manager.QueryInterface(Ci.nsIComponentRegistrar);
+
+ ok(Ci.nsIScriptableWithNotXPCOM);
+
+ let method1Called = false;
+
+ let testObject = {
+ QueryInterface: ChromeUtils.generateQI([
+ "nsIScriptableOK",
+ "nsIScriptableWithNotXPCOM",
+ ]),
+
+ method1() {
+ method1Called = true;
+ },
+
+ method2() {
+ ok(false, "method2 should not have been called!");
+ },
+
+ method3() {
+ ok(false, "mehod3 should not have been called!");
+ },
+
+ jsonly: true,
+ };
+
+ let factory = {
+ QueryInterface: ChromeUtils.generateQI(["nsIFactory"]),
+
+ createInstance(outer, iid) {
+ if (outer) {
+ throw Components.Exception("", Cr.NS_ERROR_NO_AGGREGATION);
+ }
+ return testObject.QueryInterface(iid);
+ },
+ };
+
+ registrar.registerFactory(kCID, null, kContract, factory);
+
+ let xpcomObject = Cc[kContract].createInstance();
+ ok(xpcomObject);
+ strictEqual(xpcomObject.jsonly, undefined);
+
+ xpcomObject.QueryInterface(Ci.nsIScriptableOK);
+
+ xpcomObject.method1();
+ ok(method1Called);
+
+ try {
+ xpcomObject.QueryInterface(Ci.nsIScriptableWithNotXPCOM);
+ ok(false, "Should not have implemented nsIScriptableWithNotXPCOM");
+ } catch (e) {
+ ok(
+ true,
+ "Should not have implemented nsIScriptableWithNotXPCOM. Correctly threw error: " +
+ e
+ );
+ }
+ strictEqual(xpcomObject.method2, undefined);
+}