summaryrefslogtreecommitdiffstats
path: root/netwerk/test/unit/test_mozTXTToHTMLConv.js
diff options
context:
space:
mode:
Diffstat (limited to 'netwerk/test/unit/test_mozTXTToHTMLConv.js')
-rw-r--r--netwerk/test/unit/test_mozTXTToHTMLConv.js199
1 files changed, 199 insertions, 0 deletions
diff --git a/netwerk/test/unit/test_mozTXTToHTMLConv.js b/netwerk/test/unit/test_mozTXTToHTMLConv.js
new file mode 100644
index 000000000..075323d7c
--- /dev/null
+++ b/netwerk/test/unit/test_mozTXTToHTMLConv.js
@@ -0,0 +1,199 @@
+/* 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/. */
+
+/**
+ * Test that mozITXTToHTMLConv works properly.
+ */
+
+var Cc = Components.classes;
+var Ci = Components.interfaces;
+
+function run_test() {
+ let converter = Cc["@mozilla.org/txttohtmlconv;1"]
+ .getService(Ci.mozITXTToHTMLConv);
+
+ const scanTXTtests = [
+ // -- RFC1738
+ {
+ input: "RFC1738: <URL:http://mozilla.org> then",
+ url: "http://mozilla.org"
+ },
+ // -- RFC2396E
+ {
+ input: "RFC2396E: <http://mozilla.org/> then",
+ url: "http://mozilla.org/"
+ },
+ // -- abbreviated
+ {
+ input: "see www.mozilla.org maybe",
+ url: "http://www.mozilla.org"
+ },
+ // -- freetext
+ {
+ input:"I mean http://www.mozilla.org/.",
+ url: "http://www.mozilla.org/"
+ },
+ {
+ input:"you mean http://mozilla.org:80, right?",
+ url: "http://mozilla.org:80"
+ },
+ {
+ input:"go to http://mozilla.org; then go home",
+ url: "http://mozilla.org"
+ },
+ {
+ input:"http://mozilla.org! yay!",
+ url: "http://mozilla.org"
+ },
+ {
+ input:"er, http://mozilla.com?",
+ url: "http://mozilla.com"
+ },
+ {
+ input:"http://example.org- where things happen",
+ url: "http://example.org"
+ },
+ {
+ input:"see http://mozilla.org: front page",
+ url: "http://mozilla.org"
+ },
+ {
+ input:"'http://mozilla.org/': that's the url",
+ url: "http://mozilla.org/"
+ },
+ {
+ input:"some special http://mozilla.org/?x=.,;!-:x",
+ url: "http://mozilla.org/?x=.,;!-:x"
+ },
+ {
+ // escape & when producing html
+ input:"'http://example.org/?test=true&success=true': ok",
+ url: "http://example.org/?test=true&amp;success=true"
+ },
+ {
+ input: "bracket: http://localhost/[1] etc.",
+ url: "http://localhost/"
+ },
+ {
+ input: "parenthesis: (http://localhost/) etc.",
+ url: "http://localhost/"
+ },
+ {
+ input: "(thunderbird)http://mozilla.org/thunderbird",
+ url: "http://mozilla.org/thunderbird"
+ },
+ {
+ input: "()http://mozilla.org",
+ url: "http://mozilla.org"
+ },
+ {
+ input: "parenthesis included: http://kb.mozillazine.org/Performance_(Thunderbird) etc.",
+ url: "http://kb.mozillazine.org/Performance_(Thunderbird)"
+ },
+ {
+ input: "parenthesis slash bracket: (http://localhost/)[1] etc.",
+ url: "http://localhost/"
+ },
+ {
+ input: "parenthesis bracket: (http://example.org[1]) etc.",
+ url: "http://example.org"
+ },
+ {
+ input: "ipv6 1: https://[1080::8:800:200C:417A]/foo?bar=x test",
+ url: "https://[1080::8:800:200C:417A]/foo?bar=x"
+ },
+ {
+ input: "ipv6 2: http://[::ffff:127.0.0.1]/#yay test",
+ url: "http://[::ffff:127.0.0.1]/#yay"
+ },
+ {
+ input: "ipv6 parenthesis port: (http://[2001:db8::1]:80/) test",
+ url: "http://[2001:db8::1]:80/"
+ },
+ {
+ input: "test http://www.map.com/map.php?t=Nova_Scotia&markers=//Not_a_survey||description=plm2 test",
+ url: "http://www.map.com/map.php?t=Nova_Scotia&amp;markers=//Not_a_survey||description=plm2"
+ }
+ ];
+
+ const scanHTMLtests = [
+ {
+ input: "http://foo.example.com",
+ shouldChange: true
+ },
+ {
+ input: " <a href='http://a.example.com/'>foo</a>",
+ shouldChange: false
+ },
+ {
+ input: "<abbr>see http://abbr.example.com</abbr>",
+ shouldChange: true
+ },
+ {
+ input: "<!-- see http://comment.example.com/ -->",
+ shouldChange: false
+ },
+ {
+ input: "<!-- greater > -->",
+ shouldChange: false
+ },
+ {
+ input: "<!-- lesser < -->",
+ shouldChange: false
+ },
+ {
+ input: "<style id='ex'>background-image: url(http://example.com/ex.png);</style>",
+ shouldChange: false
+ },
+ {
+ input: "<style>body > p, body > div { color:blue }</style>",
+ shouldChange: false
+ },
+ {
+ input: "<script>window.location='http://script.example.com/';</script>",
+ shouldChange: false
+ },
+ {
+ input: "<head><title>http://head.example.com/</title></head>",
+ shouldChange: false
+ },
+ {
+ input: "<header>see http://header.example.com</header>",
+ shouldChange: true
+ },
+ {
+ input: "<iframe src='http://iframe.example.com/' />",
+ shouldChange: false
+ },
+ {
+ input: "broken end <script",
+ shouldChange: false
+ },
+ ];
+
+ function hrefLink(url) {
+ return ' href="' + url + '"';
+ }
+
+ for (let i = 0; i < scanTXTtests.length; i++) {
+ let t = scanTXTtests[i];
+ let output = converter.scanTXT(t.input, Ci.mozITXTToHTMLConv.kURLs);
+ let link = hrefLink(t.url);
+ if (output.indexOf(link) == -1)
+ do_throw("Unexpected conversion by scanTXT: input=" + t.input +
+ ", output=" + output + ", link=" + link);
+ }
+
+ for (let i = 0; i < scanHTMLtests.length; i++) {
+ let t = scanHTMLtests[i];
+ let output = converter.scanHTML(t.input, Ci.mozITXTToHTMLConv.kURLs);
+ let changed = (t.input != output);
+ if (changed != t.shouldChange) {
+ do_throw("Unexpected change by scanHTML: changed=" + changed +
+ ", shouldChange=" + t.shouldChange +
+ ", \ninput=" + t.input +
+ ", \noutput=" + output);
+ }
+ }
+}