diff options
Diffstat (limited to 'comm/mailnews/news/test/unit/test_uriParser.js')
-rw-r--r-- | comm/mailnews/news/test/unit/test_uriParser.js | 221 |
1 files changed, 221 insertions, 0 deletions
diff --git a/comm/mailnews/news/test/unit/test_uriParser.js b/comm/mailnews/news/test/unit/test_uriParser.js new file mode 100644 index 0000000000..a152076333 --- /dev/null +++ b/comm/mailnews/news/test/unit/test_uriParser.js @@ -0,0 +1,221 @@ +// 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); + } +} |