mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-31 22:25:30 +00:00
128 lines
3.8 KiB
JavaScript
128 lines
3.8 KiB
JavaScript
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this file,
|
|
* You can obtain one at http://mozilla.org/MPL/2.0/. */
|
|
|
|
var W3CTest = {
|
|
/**
|
|
* Dictionary mapping a test URL to either the string "all", which means that
|
|
* all tests in this file are expected to fail, or a dictionary mapping test
|
|
* names to either the boolean |true|, or the string "debug". The former
|
|
* means that this test is expected to fail in all builds, and the latter
|
|
* that it is only expected to fail in debug builds.
|
|
*/
|
|
"expectedFailures": {},
|
|
|
|
/**
|
|
* List of test results, needed by TestRunner to update the UI.
|
|
*/
|
|
"tests": [],
|
|
|
|
/**
|
|
* Reference to the TestRunner object in the parent frame.
|
|
*/
|
|
"runner": parent === this ? null : parent.TestRunner || parent.wrappedJSObject.TestRunner,
|
|
|
|
/**
|
|
* Prefixes for the error logging. Indexed first by int(todo) and second by
|
|
* int(result).
|
|
*/
|
|
"prefixes": [
|
|
["TEST-UNEXPECTED-FAIL", "TEST-PASS"],
|
|
["TEST-KNOWN-FAIL", "TEST-UNEXPECTED-PASS"]
|
|
],
|
|
|
|
/**
|
|
* Returns the URL of the current test, relative to the root W3C tests
|
|
* directory. Used as a key into the expectedFailures dictionary.
|
|
*/
|
|
"getURL": function() {
|
|
return this.runner.currentTestURL.substring("/tests/dom/imptests/".length);
|
|
},
|
|
|
|
/**
|
|
* Lets the test runner know about a test result.
|
|
*/
|
|
"_log": function(test) {
|
|
var msg = this.prefixes[+test.todo][+test.result] + " | ";
|
|
if (this.runner.currentTestURL)
|
|
msg += this.runner.currentTestURL;
|
|
msg += " | " + test.message;
|
|
this.runner[(test.result === !test.todo) ? "log" : "error"](msg);
|
|
},
|
|
|
|
/**
|
|
* Reports a test result. The argument is an object with the following
|
|
* properties:
|
|
*
|
|
* o message (string): message to be reported
|
|
* o result (boolean): whether this test failed
|
|
* o todo (boolean): whether this test is expected to fail
|
|
*/
|
|
"report": function(test) {
|
|
this.tests.push(test);
|
|
this._log(test);
|
|
},
|
|
|
|
/**
|
|
* Returns true if this test is expected to fail, and false otherwise.
|
|
*/
|
|
"_todo": function(test) {
|
|
if (this.expectedFailures === "all") {
|
|
return true;
|
|
}
|
|
var value = this.expectedFailures[test.name];
|
|
return value === true || (value === "debug" && !!SpecialPowers.isDebugBuild);
|
|
},
|
|
|
|
/**
|
|
* Callback function for testharness.js. Called when one test in a file
|
|
* finishes.
|
|
*/
|
|
"result": function(test) {
|
|
var url = this.getURL();
|
|
this.report({
|
|
"message": test.name + (test.message ? "; " + test.message : ""),
|
|
"result": test.status === test.PASS,
|
|
"todo": this._todo(test)
|
|
});
|
|
},
|
|
|
|
/**
|
|
* Callback function for testharness.js. Called when the entire test file
|
|
* finishes.
|
|
*/
|
|
"finish": function(tests, status) {
|
|
var url = this.getURL();
|
|
this.report({
|
|
"message": "Finished test, status " + status.status,
|
|
"result": status.status === status.OK,
|
|
"todo":
|
|
url in this.expectedFailures &&
|
|
this.expectedFailures[url] === "error"
|
|
});
|
|
this.runner.testFinished(this.tests);
|
|
}
|
|
};
|
|
(function() {
|
|
if (!W3CTest.runner) {
|
|
return;
|
|
}
|
|
// Get expected fails. If there aren't any, there will be a 404, which is
|
|
// fine. Anything else is unexpected.
|
|
var request = new XMLHttpRequest();
|
|
request.open("GET", "/tests/dom/imptests/failures/" + W3CTest.getURL() + ".json", false);
|
|
request.send();
|
|
if (request.status === 200) {
|
|
W3CTest.expectedFailures = JSON.parse(request.responseText);
|
|
} else if (request.status !== 404) {
|
|
is(request.status, 404, "Request status neither 200 nor 404");
|
|
}
|
|
|
|
add_result_callback(W3CTest.result.bind(W3CTest));
|
|
add_completion_callback(W3CTest.finish.bind(W3CTest));
|
|
setup({
|
|
"output": false,
|
|
"timeout": 1000000,
|
|
});
|
|
})();
|