michael@0: const Cc = Components.classes; michael@0: const Ci = Components.interfaces; michael@0: const Cu = Components.utils; michael@0: const Cr = Components.results; michael@0: michael@0: Cu.import("resource://testing-common/httpd.js"); michael@0: michael@0: function getRDFService() michael@0: { michael@0: return Cc["@mozilla.org/rdf/rdf-service;1"]. michael@0: getService(Ci.nsIRDFService); michael@0: } michael@0: michael@0: var server1, server2; michael@0: michael@0: function run_test() michael@0: { michael@0: var samplefile = do_get_file('sample.rdf'); michael@0: michael@0: server1 = new HttpServer(); michael@0: server1.registerPathHandler("/sample-xs.rdf", xsRedirect); michael@0: server1.registerPathHandler("/sample-local.rdf", localRedirect); michael@0: server1.registerFile('/sample.rdf', samplefile); michael@0: server1.start(4444); michael@0: michael@0: server2 = new HttpServer(); michael@0: server2.registerFile('/sample.rdf', samplefile); michael@0: server2.start(4445); michael@0: michael@0: do_test_pending(); michael@0: michael@0: new rdfLoadObserver('http://localhost:4444/sample.rdf', true); michael@0: new rdfLoadObserver('http://localhost:4445/sample.rdf', true); michael@0: new rdfLoadObserver('http://localhost:4444/sample-xs.rdf', false); michael@0: new rdfLoadObserver('http://localhost:4444/sample-local.rdf', true); michael@0: } michael@0: michael@0: var gPending = 0; michael@0: michael@0: function rdfLoadObserver(uri, shouldPass) michael@0: { michael@0: this.shouldPass = shouldPass; michael@0: this.uri = uri; michael@0: michael@0: ++gPending; michael@0: michael@0: var rdfService = getRDFService(); michael@0: this.ds = rdfService.GetDataSource(uri). michael@0: QueryInterface(Ci.nsIRDFXMLSink); michael@0: this.ds.addXMLSinkObserver(this); michael@0: } michael@0: michael@0: rdfLoadObserver.prototype = michael@0: { michael@0: onBeginLoad : function() { }, michael@0: onInterrupt : function() { }, michael@0: onResume : function() { }, michael@0: onEndLoad : function() { michael@0: print("Testing results of loading " + this.uri); michael@0: michael@0: var rdfs = getRDFService(); michael@0: var res = rdfs.GetResource("urn:mozilla:sample-data"); michael@0: var arc = rdfs.GetResource("http://purl.org/dc/elements/1.1/title"); michael@0: var answer = this.ds.GetTarget(res, arc, true); michael@0: if (answer !== null) { michael@0: do_check_true(this.shouldPass); michael@0: do_check_true(answer instanceof Ci.nsIRDFLiteral); michael@0: do_check_eq(answer.Value, "Sample"); michael@0: } michael@0: else { michael@0: do_check_false(this.shouldPass); michael@0: } michael@0: michael@0: gPending -= 1; michael@0: michael@0: this.ds.removeXMLSinkObserver(this); michael@0: michael@0: if (gPending == 0) { michael@0: do_test_pending(); michael@0: server1.stop(do_test_finished); michael@0: server2.stop(do_test_finished); michael@0: } michael@0: }, michael@0: onError : function() { } michael@0: } michael@0: michael@0: function xsRedirect(metadata, response) michael@0: { michael@0: response.setStatusLine(metadata.httpVersion, 301, "Moved Permanently"); michael@0: response.setHeader("Location", "http://localhost:4445/sample.rdf", false); michael@0: } michael@0: michael@0: function localRedirect(metadata, response) michael@0: { michael@0: response.setStatusLine(metadata.httpVersion, 301, "Moved Permanently"); michael@0: response.setHeader("Location", "http://localhost:4444/sample.rdf", false); michael@0: }