summaryrefslogtreecommitdiffstats
path: root/js/xpconnect/tests/unit/test_generateQI.js
blob: d54ed53212bea475e1e5a9541f175ffc54fdec89 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
"use strict";

add_task(async function test_generateQI() {
  function checkQI(interfaces, iface) {
    let obj = {
      QueryInterface: ChromeUtils.generateQI(interfaces),
    };
    equal(obj.QueryInterface(iface), obj,
         `Correct return value for query to ${iface}`);
  }

  // Test success scenarios.
  checkQI([], Ci.nsISupports);

  checkQI([Ci.nsIPropertyBag, "nsIPropertyBag2"], Ci.nsIPropertyBag);
  checkQI([Ci.nsIPropertyBag, "nsIPropertyBag2"], Ci.nsIPropertyBag2);

  checkQI([Ci.nsIPropertyBag, "nsIPropertyBag2", "nsINotARealInterface"], Ci.nsIPropertyBag2);

  // Non-IID values get stringified, and don't cause any errors as long
  // as there isn't a non-IID property with the same name on Ci.
  checkQI([Ci.nsIPropertyBag, "nsIPropertyBag2", null, Object], Ci.nsIPropertyBag2);

  ChromeUtils.generateQI([])(Ci.nsISupports);

  // Test failure scenarios.
  Assert.throws(() => checkQI([], Ci.nsIPropertyBag),
                e => e.result == Cr.NS_ERROR_NO_INTERFACE);
});