michael@0: function round_trip(uri) { michael@0: var objectOutStream = Cc["@mozilla.org/binaryoutputstream;1"]. michael@0: createInstance(Ci.nsIObjectOutputStream); michael@0: var pipe = Cc["@mozilla.org/pipe;1"].createInstance(Ci.nsIPipe); michael@0: pipe.init(false, false, 0, 0xffffffff, null); michael@0: objectOutStream.setOutputStream(pipe.outputStream); michael@0: objectOutStream.writeCompoundObject(uri, Ci.nsISupports, true); michael@0: objectOutStream.close(); michael@0: michael@0: var objectInStream = Cc["@mozilla.org/binaryinputstream;1"]. michael@0: createInstance(Ci.nsIObjectInputStream); michael@0: objectInStream.setInputStream(pipe.inputStream); michael@0: return objectInStream.readObject(true).QueryInterface(Ci.nsIURI); michael@0: } michael@0: michael@0: var prefData = michael@0: [ michael@0: { michael@0: name: "network.IDN_show_punycode", michael@0: newVal: false michael@0: }, michael@0: { michael@0: name: "network.IDN.whitelist.ch", michael@0: newVal: true michael@0: } michael@0: ]; michael@0: michael@0: function run_test() { michael@0: var ios = Cc["@mozilla.org/network/io-service;1"]. michael@0: getService(Ci.nsIIOService); michael@0: michael@0: var uri1 = ios.newURI("file:///", null, null); michael@0: do_check_true(uri1 instanceof Ci.nsIFileURL); michael@0: michael@0: var uri2 = uri1.clone(); michael@0: do_check_true(uri2 instanceof Ci.nsIFileURL); michael@0: do_check_true(uri1.equals(uri2)); michael@0: michael@0: var uri3 = round_trip(uri1); michael@0: do_check_true(uri3 instanceof Ci.nsIFileURL); michael@0: do_check_true(uri1.equals(uri3)); michael@0: michael@0: // Make sure our prefs are set such that this test actually means something michael@0: var prefs = Cc["@mozilla.org/preferences-service;1"]. michael@0: getService(Ci.nsIPrefBranch); michael@0: for each (var pref in prefData) { michael@0: try { michael@0: pref.oldVal = prefs.getBoolPref(pref.name); michael@0: } catch(e) { michael@0: } michael@0: prefs.setBoolPref(pref.name, pref.newVal); michael@0: } michael@0: michael@0: try { michael@0: // URI stolen from michael@0: // http://lists.w3.org/Archives/Public/public-iri/2004Mar/0012.html michael@0: var uri4 = ios.newURI("http://xn--jos-dma.example.net.ch/", null, null); michael@0: do_check_eq(uri4.asciiHost, "xn--jos-dma.example.net.ch"); michael@0: do_check_eq(uri4.host, "jos\u00e9.example.net.ch"); michael@0: michael@0: var uri5 = round_trip(uri4); michael@0: do_check_true(uri4.equals(uri5)); michael@0: do_check_eq(uri4.host, uri5.host); michael@0: do_check_eq(uri4.asciiHost, uri5.asciiHost); michael@0: } finally { michael@0: for each (var pref in prefData) { michael@0: if (prefs.prefHasUserValue(pref.name)) michael@0: prefs.clearUserPref(pref.name); michael@0: } michael@0: } michael@0: }