diff options
Diffstat (limited to 'js/xpconnect/tests/unit/test_scriptable_nsIClassInfo.js')
-rw-r--r-- | js/xpconnect/tests/unit/test_scriptable_nsIClassInfo.js | 41 |
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"); +}); |