summaryrefslogtreecommitdiffstats
path: root/comm/mailnews/news/test/unit/test_uriParser.js
diff options
context:
space:
mode:
Diffstat (limited to 'comm/mailnews/news/test/unit/test_uriParser.js')
-rw-r--r--comm/mailnews/news/test/unit/test_uriParser.js221
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);
+ }
+}