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);
});
|