зеркало из https://github.com/mozilla/gecko-dev.git
186 строки
5.6 KiB
JavaScript
186 строки
5.6 KiB
JavaScript
"use strict";
|
|
|
|
function stringToDefaultURI(str) {
|
|
return Cc["@mozilla.org/network/default-uri-mutator;1"]
|
|
.createInstance(Ci.nsIURIMutator)
|
|
.setSpec(str)
|
|
.finalize();
|
|
}
|
|
|
|
add_task(function test_getters() {
|
|
let uri = stringToDefaultURI(
|
|
"proto://user:password@hostname:123/path/to/file?query#hash"
|
|
);
|
|
equal(uri.spec, "proto://user:password@hostname:123/path/to/file?query#hash");
|
|
equal(uri.prePath, "proto://user:password@hostname:123");
|
|
equal(uri.scheme, "proto");
|
|
equal(uri.userPass, "user:password");
|
|
equal(uri.username, "user");
|
|
equal(uri.password, "password");
|
|
equal(uri.hostPort, "hostname:123");
|
|
equal(uri.host, "hostname");
|
|
equal(uri.port, 123);
|
|
equal(uri.pathQueryRef, "/path/to/file?query#hash");
|
|
equal(uri.asciiSpec, uri.spec);
|
|
equal(uri.asciiHostPort, uri.hostPort);
|
|
equal(uri.asciiHost, uri.host);
|
|
equal(uri.ref, "hash");
|
|
equal(
|
|
uri.specIgnoringRef,
|
|
"proto://user:password@hostname:123/path/to/file?query"
|
|
);
|
|
equal(uri.hasRef, true);
|
|
equal(uri.filePath, "/path/to/file");
|
|
equal(uri.query, "query");
|
|
equal(uri.displayHost, uri.host);
|
|
equal(uri.displayHostPort, uri.hostPort);
|
|
equal(uri.displaySpec, uri.spec);
|
|
equal(uri.displayPrePath, uri.prePath);
|
|
});
|
|
|
|
add_task(function test_methods() {
|
|
let uri = stringToDefaultURI(
|
|
"proto://user:password@hostname:123/path/to/file?query#hash"
|
|
);
|
|
let uri_same = stringToDefaultURI(
|
|
"proto://user:password@hostname:123/path/to/file?query#hash"
|
|
);
|
|
let uri_different = stringToDefaultURI(
|
|
"proto://user:password@hostname:123/path/to/file?query"
|
|
);
|
|
let uri_very_different = stringToDefaultURI(
|
|
"proto://user:password@hostname:123/path/to/file?query1#hash"
|
|
);
|
|
ok(uri.equals(uri_same));
|
|
ok(!uri.equals(uri_different));
|
|
ok(uri.schemeIs("proto"));
|
|
ok(!uri.schemeIs("proto2"));
|
|
ok(!uri.schemeIs("proto "));
|
|
ok(!uri.schemeIs("proto\n"));
|
|
equal(uri.resolve("/hello"), "proto://user:password@hostname:123/hello");
|
|
equal(
|
|
uri.resolve("hello"),
|
|
"proto://user:password@hostname:123/path/to/hello"
|
|
);
|
|
equal(uri.resolve("proto2:otherhost"), "proto2:otherhost");
|
|
ok(uri.equalsExceptRef(uri_same));
|
|
ok(uri.equalsExceptRef(uri_different));
|
|
ok(!uri.equalsExceptRef(uri_very_different));
|
|
});
|
|
|
|
add_task(function test_mutator() {
|
|
let uri = stringToDefaultURI(
|
|
"proto://user:pass@host:123/path/to/file?query#hash"
|
|
);
|
|
|
|
let check = (callSetters, verify) => {
|
|
let m = uri.mutate();
|
|
callSetters(m);
|
|
verify(m.finalize());
|
|
};
|
|
|
|
check(
|
|
m => m.setSpec("test:bla"),
|
|
u => equal(u.spec, "test:bla")
|
|
);
|
|
check(
|
|
m => m.setSpec("test:bla"),
|
|
u => equal(u.spec, "test:bla")
|
|
);
|
|
check(
|
|
m => m.setScheme("some"),
|
|
u => equal(u.spec, "some://user:pass@host:123/path/to/file?query#hash")
|
|
);
|
|
check(
|
|
m => m.setUserPass("u"),
|
|
u => equal(u.spec, "proto://u@host:123/path/to/file?query#hash")
|
|
);
|
|
check(
|
|
m => m.setUserPass("u:p"),
|
|
u => equal(u.spec, "proto://u:p@host:123/path/to/file?query#hash")
|
|
);
|
|
check(
|
|
m => m.setUserPass(":p"),
|
|
u => equal(u.spec, "proto://:p@host:123/path/to/file?query#hash")
|
|
);
|
|
check(
|
|
m => m.setUserPass(""),
|
|
u => equal(u.spec, "proto://host:123/path/to/file?query#hash")
|
|
);
|
|
check(
|
|
m => m.setUsername("u"),
|
|
u => equal(u.spec, "proto://u:pass@host:123/path/to/file?query#hash")
|
|
);
|
|
check(
|
|
m => m.setPassword("p"),
|
|
u => equal(u.spec, "proto://user:p@host:123/path/to/file?query#hash")
|
|
);
|
|
check(
|
|
m => m.setHostPort("h"),
|
|
u => equal(u.spec, "proto://user:pass@h:123/path/to/file?query#hash")
|
|
);
|
|
check(
|
|
m => m.setHostPort("h:456"),
|
|
u => equal(u.spec, "proto://user:pass@h:456/path/to/file?query#hash")
|
|
);
|
|
check(
|
|
m => m.setHost("bla"),
|
|
u => equal(u.spec, "proto://user:pass@bla:123/path/to/file?query#hash")
|
|
);
|
|
check(
|
|
m => m.setPort(987),
|
|
u => equal(u.spec, "proto://user:pass@host:987/path/to/file?query#hash")
|
|
);
|
|
check(
|
|
m => m.setPathQueryRef("/p?q#r"),
|
|
u => equal(u.spec, "proto://user:pass@host:123/p?q#r")
|
|
);
|
|
check(
|
|
m => m.setRef("r"),
|
|
u => equal(u.spec, "proto://user:pass@host:123/path/to/file?query#r")
|
|
);
|
|
check(
|
|
m => m.setFilePath("/my/path"),
|
|
u => equal(u.spec, "proto://user:pass@host:123/my/path?query#hash")
|
|
);
|
|
check(
|
|
m => m.setQuery("q"),
|
|
u => equal(u.spec, "proto://user:pass@host:123/path/to/file?q#hash")
|
|
);
|
|
});
|
|
|
|
add_task(function test_ipv6() {
|
|
let uri = stringToDefaultURI("non-special://[2001::1]/");
|
|
equal(uri.hostPort, "[2001::1]");
|
|
// Hopefully this will change after bug 1603199.
|
|
equal(uri.host, "2001::1");
|
|
});
|
|
|
|
add_task(function test_serialization() {
|
|
let uri = stringToDefaultURI("http://example.org/path");
|
|
let str = serialize_to_escaped_string(uri);
|
|
let other = deserialize_from_escaped_string(str).QueryInterface(Ci.nsIURI);
|
|
equal(other.spec, uri.spec);
|
|
});
|
|
|
|
// This test assumes the serialization never changes, which might not be true.
|
|
// It's OK to change the test if we ever make changes to the serialization
|
|
// code and this starts failing.
|
|
add_task(function test_deserialize_from_string() {
|
|
let payload =
|
|
"%04DZ%A0%FD%27L%99%BDAk%E61%8A%E9%2C%00%00%00%00%00%00%00" +
|
|
"%00%C0%00%00%00%00%00%00F%00%00%00%13scheme%3Astuff/to/say";
|
|
equal(
|
|
deserialize_from_escaped_string(payload).QueryInterface(Ci.nsIURI).spec,
|
|
stringToDefaultURI("scheme:stuff/to/say").spec
|
|
);
|
|
|
|
let payload2 =
|
|
"%04DZ%A0%FD%27L%99%BDAk%E61%8A%E9%2C%00%00%00%00%00%00%00" +
|
|
"%00%C0%00%00%00%00%00%00F%00%00%00%17http%3A//example.org/path";
|
|
equal(
|
|
deserialize_from_escaped_string(payload2).QueryInterface(Ci.nsIURI).spec,
|
|
stringToDefaultURI("http://example.org/path").spec
|
|
);
|
|
});
|