222 строки
5.2 KiB
JavaScript
222 строки
5.2 KiB
JavaScript
// Tests nsINntpUrl parsing.
|
|
|
|
var { MailServices } = ChromeUtils.import(
|
|
"resource:///modules/MailServices.jsm"
|
|
);
|
|
|
|
var localserver;
|
|
var tests = [
|
|
// news://host/-based URIs
|
|
{
|
|
uri: "news://localhost/?newgroups",
|
|
get server() {
|
|
return localserver;
|
|
},
|
|
folder: null,
|
|
newsAction: Ci.nsINntpUrl.ActionListNewGroups,
|
|
},
|
|
// news://host/group-based
|
|
{
|
|
uri: "news://news.server.example/example.group.this",
|
|
server: null,
|
|
folder: null,
|
|
newsAction: Ci.nsINntpUrl.ActionGetNewNews,
|
|
group: "example.group.this",
|
|
},
|
|
{
|
|
uri: "news://news.server.example/*",
|
|
server: null,
|
|
folder: null,
|
|
newsAction: Ci.nsINntpUrl.ActionListGroups,
|
|
},
|
|
{
|
|
uri: "news://news.server.example/news.*",
|
|
server: null,
|
|
folder: null,
|
|
newsAction: Ci.nsINntpUrl.ActionListGroups,
|
|
},
|
|
{
|
|
uri: "news://localhost/test.filter?list-ids",
|
|
get server() {
|
|
return localserver;
|
|
},
|
|
get folder() {
|
|
return localserver.rootFolder.getChildNamed("test.filter");
|
|
},
|
|
newsAction: Ci.nsINntpUrl.ActionListIds,
|
|
group: "test.filter",
|
|
},
|
|
{
|
|
uri: "news://localhost/some.group?search/XPAT From 1-5 [Ww][Hh][Oo]",
|
|
get server() {
|
|
return localserver;
|
|
},
|
|
newsAction: Ci.nsINntpUrl.ActionSearch,
|
|
group: "some.group",
|
|
},
|
|
|
|
// news://host/message-based URIs
|
|
{
|
|
uri: "news://localhost/message-id@some-host.invalid",
|
|
get server() {
|
|
return localserver;
|
|
},
|
|
folder: null,
|
|
newsAction: Ci.nsINntpUrl.ActionFetchArticle,
|
|
messageID: "message-id@some-host.invalid",
|
|
group: "",
|
|
key: 0xffffffff,
|
|
},
|
|
{
|
|
uri: "news://localhost/message-id@some-host.invalid?part=1.4",
|
|
get server() {
|
|
return localserver;
|
|
},
|
|
folder: null,
|
|
newsAction: Ci.nsINntpUrl.ActionFetchPart,
|
|
messageID: "message-id@some-host.invalid",
|
|
},
|
|
{
|
|
uri: "news://localhost/message-id@some-host.invalid?cancel",
|
|
get server() {
|
|
return localserver;
|
|
},
|
|
folder: null,
|
|
newsAction: Ci.nsINntpUrl.ActionCancelArticle,
|
|
messageID: "message-id@some-host.invalid",
|
|
},
|
|
{
|
|
uri: "news://localhost/message-id@some-host.invalid?group=foo&key=123",
|
|
get server() {
|
|
return localserver;
|
|
},
|
|
folder: null,
|
|
newsAction: Ci.nsINntpUrl.ActionFetchArticle,
|
|
messageID: "message-id@some-host.invalid",
|
|
group: "foo",
|
|
key: 123,
|
|
},
|
|
|
|
// No-authority uris
|
|
{
|
|
uri: "news:rec.games.pinball",
|
|
server: null,
|
|
folder: null,
|
|
newsAction: Ci.nsINntpUrl.ActionGetNewNews,
|
|
group: "rec.games.pinball",
|
|
host: "",
|
|
},
|
|
{
|
|
uri: "news:message-id@some-host.invalid",
|
|
server: null,
|
|
folder: null,
|
|
newsAction: Ci.nsINntpUrl.ActionFetchArticle,
|
|
messageID: "message-id@some-host.invalid",
|
|
group: "",
|
|
key: 0xffffffff,
|
|
},
|
|
|
|
// news-message://host/group#key
|
|
{
|
|
uri: "news-message://localhost/test.simple.subscribe#1",
|
|
newsAction: Ci.nsINntpUrl.ActionFetchArticle,
|
|
group: "test.simple.subscribe",
|
|
key: 1,
|
|
},
|
|
|
|
// nntp://host/group
|
|
{
|
|
uri: "nntp://localhost/test.filter",
|
|
get server() {
|
|
return localserver;
|
|
},
|
|
get folder() {
|
|
return localserver.rootFolder.getChildNamed("test.filter");
|
|
},
|
|
newsAction: Ci.nsINntpUrl.ActionGetNewNews,
|
|
group: "test.filter",
|
|
},
|
|
{
|
|
uri: "nntp://localhost/i.dont.exist",
|
|
get server() {
|
|
return localserver;
|
|
},
|
|
folder: null,
|
|
newsAction: Ci.nsINntpUrl.ActionGetNewNews,
|
|
group: "i.dont.exist",
|
|
},
|
|
{
|
|
uri: "nntp://news.example.invalid/i.dont.exist",
|
|
server: null,
|
|
folder: null,
|
|
newsAction: Ci.nsINntpUrl.ActionGetNewNews,
|
|
group: "i.dont.exist",
|
|
},
|
|
|
|
// nntp://host/group/key
|
|
{
|
|
uri: "nntp://localhost/test.filter/123",
|
|
get server() {
|
|
return localserver;
|
|
},
|
|
get folder() {
|
|
return localserver.rootFolder.getChildNamed("test.filter");
|
|
},
|
|
newsAction: Ci.nsINntpUrl.ActionFetchArticle,
|
|
group: "test.filter",
|
|
key: 123,
|
|
},
|
|
{
|
|
uri: "nntp://localhost/i.dont.exist/123",
|
|
get server() {
|
|
return localserver;
|
|
},
|
|
folder: null,
|
|
newsAction: Ci.nsINntpUrl.ActionFetchArticle,
|
|
group: "i.dont.exist",
|
|
key: 123,
|
|
},
|
|
];
|
|
|
|
var invalid_uris = [
|
|
"news-message://localhost/test.simple.subscribe#hello",
|
|
"nntp://localhost/",
|
|
"nntp://localhost/a.group/hello",
|
|
"nntp://localhost/a.group/0",
|
|
"nntp:a.group",
|
|
];
|
|
|
|
function run_test() {
|
|
// We're not running the server, just setting it up
|
|
localserver = setupLocalServer(119);
|
|
for (let test of tests) {
|
|
dump("Checking URL " + test.uri + "\n");
|
|
let url = Services.io.newURI(test.uri);
|
|
url.QueryInterface(Ci.nsIMsgMailNewsUrl);
|
|
url.QueryInterface(Ci.nsINntpUrl);
|
|
for (let prop in test) {
|
|
if (prop == "uri") {
|
|
continue;
|
|
}
|
|
Assert.equal(url[prop], test[prop]);
|
|
}
|
|
}
|
|
|
|
for (let fail of invalid_uris) {
|
|
try {
|
|
dump("Checking URL " + fail + " for failure\n");
|
|
Services.io.newURI(fail);
|
|
Assert.ok(false);
|
|
} catch (e) {
|
|
Assert.equal(e.result, Cr.NS_ERROR_MALFORMED_URI);
|
|
}
|
|
}
|
|
|
|
// The password migration is async, so trigger an event to prevent the logon
|
|
// manager from trying to migrate after shutdown has started.
|
|
let thread = Services.tm.currentThread;
|
|
while (thread.hasPendingEvents()) {
|
|
thread.processNextEvent(true);
|
|
}
|
|
}
|