|
1 function round_trip(uri) { |
|
2 var objectOutStream = Cc["@mozilla.org/binaryoutputstream;1"]. |
|
3 createInstance(Ci.nsIObjectOutputStream); |
|
4 var pipe = Cc["@mozilla.org/pipe;1"].createInstance(Ci.nsIPipe); |
|
5 pipe.init(false, false, 0, 0xffffffff, null); |
|
6 objectOutStream.setOutputStream(pipe.outputStream); |
|
7 objectOutStream.writeCompoundObject(uri, Ci.nsISupports, true); |
|
8 objectOutStream.close(); |
|
9 |
|
10 var objectInStream = Cc["@mozilla.org/binaryinputstream;1"]. |
|
11 createInstance(Ci.nsIObjectInputStream); |
|
12 objectInStream.setInputStream(pipe.inputStream); |
|
13 return objectInStream.readObject(true).QueryInterface(Ci.nsIURI); |
|
14 } |
|
15 |
|
16 var prefData = |
|
17 [ |
|
18 { |
|
19 name: "network.IDN_show_punycode", |
|
20 newVal: false |
|
21 }, |
|
22 { |
|
23 name: "network.IDN.whitelist.ch", |
|
24 newVal: true |
|
25 } |
|
26 ]; |
|
27 |
|
28 function run_test() { |
|
29 var ios = Cc["@mozilla.org/network/io-service;1"]. |
|
30 getService(Ci.nsIIOService); |
|
31 |
|
32 var uri1 = ios.newURI("file:///", null, null); |
|
33 do_check_true(uri1 instanceof Ci.nsIFileURL); |
|
34 |
|
35 var uri2 = uri1.clone(); |
|
36 do_check_true(uri2 instanceof Ci.nsIFileURL); |
|
37 do_check_true(uri1.equals(uri2)); |
|
38 |
|
39 var uri3 = round_trip(uri1); |
|
40 do_check_true(uri3 instanceof Ci.nsIFileURL); |
|
41 do_check_true(uri1.equals(uri3)); |
|
42 |
|
43 // Make sure our prefs are set such that this test actually means something |
|
44 var prefs = Cc["@mozilla.org/preferences-service;1"]. |
|
45 getService(Ci.nsIPrefBranch); |
|
46 for each (var pref in prefData) { |
|
47 try { |
|
48 pref.oldVal = prefs.getBoolPref(pref.name); |
|
49 } catch(e) { |
|
50 } |
|
51 prefs.setBoolPref(pref.name, pref.newVal); |
|
52 } |
|
53 |
|
54 try { |
|
55 // URI stolen from |
|
56 // http://lists.w3.org/Archives/Public/public-iri/2004Mar/0012.html |
|
57 var uri4 = ios.newURI("http://xn--jos-dma.example.net.ch/", null, null); |
|
58 do_check_eq(uri4.asciiHost, "xn--jos-dma.example.net.ch"); |
|
59 do_check_eq(uri4.host, "jos\u00e9.example.net.ch"); |
|
60 |
|
61 var uri5 = round_trip(uri4); |
|
62 do_check_true(uri4.equals(uri5)); |
|
63 do_check_eq(uri4.host, uri5.host); |
|
64 do_check_eq(uri4.asciiHost, uri5.asciiHost); |
|
65 } finally { |
|
66 for each (var pref in prefData) { |
|
67 if (prefs.prefHasUserValue(pref.name)) |
|
68 prefs.clearUserPref(pref.name); |
|
69 } |
|
70 } |
|
71 } |