no bug - Bumping Firefox l10n changesets r=release a=l10n-bump DONTBUILD CLOSED TREE
[gecko.git] / netwerk / test / unit / test_bug427957.js
blob33a2444c9dd5672abf4618b7639b5390e353f9a8
1 /**
2  * Test for Bidi restrictions on IDNs from RFC 3454
3  */
5 "use strict";
7 var idnService;
9 function expected_pass(inputIDN) {
10   var isASCII = {};
11   var displayIDN = idnService.convertToDisplayIDN(inputIDN, isASCII);
12   Assert.equal(displayIDN, inputIDN);
15 function expected_fail(inputIDN) {
16   var isASCII = {};
17   var displayIDN = "";
19   try {
20     displayIDN = idnService.convertToDisplayIDN(inputIDN, isASCII);
21   } catch (e) {}
23   Assert.notEqual(displayIDN, inputIDN);
26 function run_test() {
27   idnService = Cc["@mozilla.org/network/idn-service;1"].getService(
28     Ci.nsIIDNService
29   );
30   /*
31    * In any profile that specifies bidirectional character handling, all
32    * three of the following requirements MUST be met:
33    *
34    * 1) The characters in section 5.8 MUST be prohibited.
35    */
37   // 0340; COMBINING GRAVE TONE MARK
38   expected_fail("foo\u0340bar.com");
39   // 0341; COMBINING ACUTE TONE MARK
40   expected_fail("foo\u0341bar.com");
41   // 200E; LEFT-TO-RIGHT MARK
42   expected_fail("foo\u200ebar.com");
43   // 200F; RIGHT-TO-LEFT MARK
44   //  Note: this is an RTL IDN so that it doesn't fail test 2) below
45   expected_fail(
46     "\u200f\u0645\u062B\u0627\u0644.\u0622\u0632\u0645\u0627\u06CC\u0634\u06CC"
47   );
48   // 202A; LEFT-TO-RIGHT EMBEDDING
49   expected_fail("foo\u202abar.com");
50   // 202B; RIGHT-TO-LEFT EMBEDDING
51   expected_fail("foo\u202bbar.com");
52   // 202C; POP DIRECTIONAL FORMATTING
53   expected_fail("foo\u202cbar.com");
54   // 202D; LEFT-TO-RIGHT OVERRIDE
55   expected_fail("foo\u202dbar.com");
56   // 202E; RIGHT-TO-LEFT OVERRIDE
57   expected_fail("foo\u202ebar.com");
58   // 206A; INHIBIT SYMMETRIC SWAPPING
59   expected_fail("foo\u206abar.com");
60   // 206B; ACTIVATE SYMMETRIC SWAPPING
61   expected_fail("foo\u206bbar.com");
62   // 206C; INHIBIT ARABIC FORM SHAPING
63   expected_fail("foo\u206cbar.com");
64   // 206D; ACTIVATE ARABIC FORM SHAPING
65   expected_fail("foo\u206dbar.com");
66   // 206E; NATIONAL DIGIT SHAPES
67   expected_fail("foo\u206ebar.com");
68   // 206F; NOMINAL DIGIT SHAPES
69   expected_fail("foo\u206fbar.com");
71   /*
72    * 2) If a string contains any RandALCat character, the string MUST NOT
73    *    contain any LCat character.
74    */
76   // www.מיץpetel.com is invalid
77   expected_fail("www.\u05DE\u05D9\u05E5petel.com");
78   // But www.מיץפטל.com is fine because the ltr and rtl characters are in
79   // different labels
80   expected_pass("www.\u05DE\u05D9\u05E5\u05E4\u05D8\u05DC.com");
82   /*
83    * 3) If a string contains any RandALCat character, a RandALCat
84    *    character MUST be the first character of the string, and a
85    *    RandALCat character MUST be the last character of the string.
86    */
88   // www.1מיץ.com is invalid
89   expected_fail("www.1\u05DE\u05D9\u05E5.com");
90   // www.!מיץ.com is invalid
91   expected_fail("www.!\u05DE\u05D9\u05E5.com");
92   // www.מיץ!.com is invalid
93   expected_fail("www.\u05DE\u05D9\u05E5!.com");
95   // XXX TODO: add a test for an RTL label ending with a digit. This was
96   //           invalid in IDNA2003 but became valid in IDNA2008
98   // But www.מיץ1פטל.com is fine
99   expected_pass("www.\u05DE\u05D9\u05E51\u05E4\u05D8\u05DC.com");