michael@0: // Tests nsIIDNService michael@0: michael@0: var reference = [ michael@0: // The 3rd element indicates whether the second element michael@0: // is ACE-encoded michael@0: ["asciihost", "asciihost", false], michael@0: ["b\u00FCcher", "xn--bcher-kva", true] michael@0: ]; michael@0: michael@0: function run_test() { michael@0: var idnService = Components.classes["@mozilla.org/network/idn-service;1"] michael@0: .getService(Components.interfaces.nsIIDNService); michael@0: michael@0: for (var i = 0; i < reference.length; ++i) { michael@0: dump("Testing " + reference[i] + "\n"); michael@0: // We test the following: michael@0: // - Converting UTF-8 to ACE and back gives us the expected answer michael@0: // - Converting the ASCII string UTF-8 -> ACE leaves the string unchanged michael@0: // - isACE returns true when we expect it to (third array elem true) michael@0: do_check_eq(idnService.convertUTF8toACE(reference[i][0]), reference[i][1]); michael@0: do_check_eq(idnService.convertUTF8toACE(reference[i][1]), reference[i][1]); michael@0: do_check_eq(idnService.convertACEtoUTF8(reference[i][1]), reference[i][0]); michael@0: do_check_eq(idnService.isACE(reference[i][1]), reference[i][2]); michael@0: } michael@0: michael@0: // add an IDN whitelist pref michael@0: var pbi = Components.classes["@mozilla.org/preferences-service;1"] michael@0: .getService(Components.interfaces.nsIPrefBranch); michael@0: pbi.setBoolPref("network.IDN.whitelist.es", true); michael@0: michael@0: // After bug 722299, set network.IDN.restriction_profile to "ASCII" in michael@0: // order not to change the behaviour of non-whitelisted TLDs michael@0: var oldProfile = pbi.getCharPref("network.IDN.restriction_profile", "moderate"); michael@0: pbi.setCharPref("network.IDN.restriction_profile", "ASCII"); michael@0: michael@0: // check convertToDisplayIDN against the whitelist michael@0: var isASCII = {}; michael@0: do_check_eq(idnService.convertToDisplayIDN("b\u00FCcher.es", isASCII), "b\u00FCcher.es"); michael@0: do_check_eq(isASCII.value, false); michael@0: do_check_eq(idnService.convertToDisplayIDN("xn--bcher-kva.es", isASCII), "b\u00FCcher.es"); michael@0: do_check_eq(isASCII.value, false); michael@0: do_check_eq(idnService.convertToDisplayIDN("b\u00FCcher.uk", isASCII), "xn--bcher-kva.uk"); michael@0: do_check_eq(isASCII.value, true); michael@0: do_check_eq(idnService.convertToDisplayIDN("xn--bcher-kva.uk", isASCII), "xn--bcher-kva.uk"); michael@0: do_check_eq(isASCII.value, true); michael@0: michael@0: // check ACE TLD's are handled by the whitelist michael@0: pbi.setBoolPref("network.IDN.whitelist.xn--k-dha", true); michael@0: do_check_eq(idnService.convertToDisplayIDN("test.\u00FCk", isASCII), "test.\u00FCk"); michael@0: do_check_eq(isASCII.value, false); michael@0: do_check_eq(idnService.convertToDisplayIDN("test.xn--k-dha", isASCII), "test.\u00FCk"); michael@0: do_check_eq(isASCII.value, false); michael@0: michael@0: // reset pref to default michael@0: pbi.setCharPref("network.IDN.restriction_profile", oldProfile); michael@0: }