|
1 const Cc = Components.classes; |
|
2 const Ci = Components.interfaces; |
|
3 const Cu = Components.utils; |
|
4 const Cr = Components.results; |
|
5 |
|
6 Cu.import("resource://testing-common/httpd.js"); |
|
7 |
|
8 function getRDFService() |
|
9 { |
|
10 return Cc["@mozilla.org/rdf/rdf-service;1"]. |
|
11 getService(Ci.nsIRDFService); |
|
12 } |
|
13 |
|
14 var server1, server2; |
|
15 |
|
16 function run_test() |
|
17 { |
|
18 var samplefile = do_get_file('sample.rdf'); |
|
19 |
|
20 server1 = new HttpServer(); |
|
21 server1.registerPathHandler("/sample-xs.rdf", xsRedirect); |
|
22 server1.registerPathHandler("/sample-local.rdf", localRedirect); |
|
23 server1.registerFile('/sample.rdf', samplefile); |
|
24 server1.start(4444); |
|
25 |
|
26 server2 = new HttpServer(); |
|
27 server2.registerFile('/sample.rdf', samplefile); |
|
28 server2.start(4445); |
|
29 |
|
30 do_test_pending(); |
|
31 |
|
32 new rdfLoadObserver('http://localhost:4444/sample.rdf', true); |
|
33 new rdfLoadObserver('http://localhost:4445/sample.rdf', true); |
|
34 new rdfLoadObserver('http://localhost:4444/sample-xs.rdf', false); |
|
35 new rdfLoadObserver('http://localhost:4444/sample-local.rdf', true); |
|
36 } |
|
37 |
|
38 var gPending = 0; |
|
39 |
|
40 function rdfLoadObserver(uri, shouldPass) |
|
41 { |
|
42 this.shouldPass = shouldPass; |
|
43 this.uri = uri; |
|
44 |
|
45 ++gPending; |
|
46 |
|
47 var rdfService = getRDFService(); |
|
48 this.ds = rdfService.GetDataSource(uri). |
|
49 QueryInterface(Ci.nsIRDFXMLSink); |
|
50 this.ds.addXMLSinkObserver(this); |
|
51 } |
|
52 |
|
53 rdfLoadObserver.prototype = |
|
54 { |
|
55 onBeginLoad : function() { }, |
|
56 onInterrupt : function() { }, |
|
57 onResume : function() { }, |
|
58 onEndLoad : function() { |
|
59 print("Testing results of loading " + this.uri); |
|
60 |
|
61 var rdfs = getRDFService(); |
|
62 var res = rdfs.GetResource("urn:mozilla:sample-data"); |
|
63 var arc = rdfs.GetResource("http://purl.org/dc/elements/1.1/title"); |
|
64 var answer = this.ds.GetTarget(res, arc, true); |
|
65 if (answer !== null) { |
|
66 do_check_true(this.shouldPass); |
|
67 do_check_true(answer instanceof Ci.nsIRDFLiteral); |
|
68 do_check_eq(answer.Value, "Sample"); |
|
69 } |
|
70 else { |
|
71 do_check_false(this.shouldPass); |
|
72 } |
|
73 |
|
74 gPending -= 1; |
|
75 |
|
76 this.ds.removeXMLSinkObserver(this); |
|
77 |
|
78 if (gPending == 0) { |
|
79 do_test_pending(); |
|
80 server1.stop(do_test_finished); |
|
81 server2.stop(do_test_finished); |
|
82 } |
|
83 }, |
|
84 onError : function() { } |
|
85 } |
|
86 |
|
87 function xsRedirect(metadata, response) |
|
88 { |
|
89 response.setStatusLine(metadata.httpVersion, 301, "Moved Permanently"); |
|
90 response.setHeader("Location", "http://localhost:4445/sample.rdf", false); |
|
91 } |
|
92 |
|
93 function localRedirect(metadata, response) |
|
94 { |
|
95 response.setStatusLine(metadata.httpVersion, 301, "Moved Permanently"); |
|
96 response.setHeader("Location", "http://localhost:4444/sample.rdf", false); |
|
97 } |