tenfourfox/rdf/tests/unit/test_rdfredirect.js
Cameron Kaiser c9b2922b70 hello FPR
2017-04-19 00:56:45 -07:00

98 lines
2.5 KiB
JavaScript

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