summaryrefslogtreecommitdiffstats
path: root/js/xpconnect/tests/unit/test_scriptable_nsIClassInfo.js
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--js/xpconnect/tests/unit/test_scriptable_nsIClassInfo.js41
1 files changed, 41 insertions, 0 deletions
diff --git a/js/xpconnect/tests/unit/test_scriptable_nsIClassInfo.js b/js/xpconnect/tests/unit/test_scriptable_nsIClassInfo.js
new file mode 100644
index 0000000000..161afcbb9b
--- /dev/null
+++ b/js/xpconnect/tests/unit/test_scriptable_nsIClassInfo.js
@@ -0,0 +1,41 @@
+/* Any copyright is dedicated to the Public Domain.
+https://creativecommons.org/publicdomain/zero/1.0/ */
+
+add_task(function () {
+ class TestClass {
+ QueryInterface = ChromeUtils.generateQI([
+ "nsIXPCTestInterfaceA",
+ "nsIClassInfo",
+ ]);
+
+ interfaces = [Ci.nsIXPCTestInterfaceA, Ci.nsIClassInfo, Ci.nsISupports];
+ contractID = "@mozilla.org/test/class;1";
+ classDescription = "description";
+ classID = Components.ID("{4da556d4-00fa-451a-a280-d2aec7c5f265}");
+ flags = 0;
+
+ name = "this is a test";
+ }
+
+ let instance = new TestClass();
+ Assert.ok(instance, "can create an instance");
+ Assert.ok(instance.QueryInterface(Ci.nsIClassInfo), "can QI to nsIClassInfo");
+
+ let registrar = Components.manager.QueryInterface(Ci.nsIComponentRegistrar);
+ registrar.registerFactory(
+ instance.classID,
+ instance.classDescription,
+ instance.contractID,
+ {
+ createInstance(iid) {
+ return instance.QueryInterface(iid);
+ },
+ }
+ );
+ Assert.ok(true, "successfully registered the factory");
+
+ let otherInstance = Cc["@mozilla.org/test/class;1"].createInstance(
+ Ci.nsIXPCTestInterfaceA
+ );
+ Assert.ok(otherInstance, "can create an instance via xpcom");
+});