/* 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/. */
"use strict";
function standardMutator() {
return Cc[
"@mozilla.org/network/standard-url-mutator;1"].createInstance(
Ci.nsIURIMutator
);
}
add_task(async
function test_simple_setter_chaining() {
let uri = standardMutator()
.setSpec(
"http://example.com/")
.setQuery(
"hello")
.setRef(
"bla")
.setScheme(
"ftp")
.finalize();
equal(uri.spec,
"ftp://example.com/?hello#bla");
});
add_task(async
function test_qi_behaviour() {
let uri = standardMutator()
.setSpec(
"http://example.com/")
.QueryInterface(Ci.nsIURI);
equal(uri.spec,
"http://example.com/");
Assert.
throws(
() => {
uri = standardMutator().QueryInterface(Ci.nsIURI);
},
/NS_NOINTERFACE/,
"mutator doesn't QI if it holds no URI"
);
let mutator = standardMutator().setSpec(
"http://example.com/path");
uri = mutator.QueryInterface(Ci.nsIURI);
equal(uri.spec,
"http://example.com/path");
Assert.
throws(
() => {
uri = mutator.QueryInterface(Ci.nsIURI);
},
/NS_NOINTERFACE/,
"Second QueryInterface should fail"
);
});