mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
Bug 642175 - Part 1: Simplify mochitest logging, and other minor cleanups. r=ted
This commit is contained in:
parent
6469811981
commit
5135d118cc
@ -204,7 +204,16 @@ SpecialPowers.prototype = {
|
||||
|
||||
gc: function() {
|
||||
this.DOMWindowUtils.garbageCollect();
|
||||
}
|
||||
},
|
||||
|
||||
hasContentProcesses: function() {
|
||||
try {
|
||||
var rt = Cc["@mozilla.org/xre/app-info;1"].getService(Ci.nsIXULRuntime);
|
||||
return rt.processType != Ci.nsIXULRuntime.PROCESS_TYPE_DEFAULT;
|
||||
} catch (e) {
|
||||
return true;
|
||||
}
|
||||
},
|
||||
};
|
||||
|
||||
// Expose everything but internal APIs (starting with underscores) to
|
||||
|
@ -14,22 +14,22 @@
|
||||
*
|
||||
**/
|
||||
|
||||
if (typeof(SimpleTest) == "undefined") {
|
||||
var SimpleTest = {};
|
||||
}
|
||||
var SimpleTest = { };
|
||||
|
||||
var parentRunner = null;
|
||||
if (typeof(parent) != "undefined" && parent.TestRunner) {
|
||||
if (parent) {
|
||||
parentRunner = parent.TestRunner;
|
||||
} else if (parent && parent.wrappedJSObject &&
|
||||
parent.wrappedJSObject.TestRunner) {
|
||||
parentRunner = parent.wrappedJSObject.TestRunner;
|
||||
if (!parentRunner && parent.wrappedJSObject) {
|
||||
parentRunner = parent.wrappedJSObject.TestRunner;
|
||||
}
|
||||
}
|
||||
|
||||
//Simple test to see if we are running in e10s IPC
|
||||
// running in e10s build and need to use IPC?
|
||||
var ipcMode = false;
|
||||
if (parentRunner) {
|
||||
ipcMode = parentRunner.ipcMode;
|
||||
ipcMode = parentRunner.ipcMode;
|
||||
} else if (typeof SpecialPowers != 'undefined') {
|
||||
ipcMode = SpecialPowers.hasContentProcesses();
|
||||
}
|
||||
|
||||
/**
|
||||
@ -67,11 +67,6 @@ SimpleTest.testPluginIsOOP = function () {
|
||||
return testPluginIsOOP;
|
||||
};
|
||||
|
||||
// Check to see if the TestRunner is present and has logging
|
||||
if (parentRunner) {
|
||||
SimpleTest._logEnabled = parentRunner.logEnabled;
|
||||
}
|
||||
|
||||
SimpleTest._tests = [];
|
||||
SimpleTest._stopOnLoad = true;
|
||||
|
||||
@ -80,8 +75,7 @@ SimpleTest._stopOnLoad = true;
|
||||
**/
|
||||
SimpleTest.ok = function (condition, name, diag) {
|
||||
var test = {'result': !!condition, 'name': name, 'diag': diag};
|
||||
if (SimpleTest._logEnabled)
|
||||
SimpleTest._logResult(test, "TEST-PASS", "TEST-UNEXPECTED-FAIL");
|
||||
SimpleTest._logResult(test, "TEST-PASS", "TEST-UNEXPECTED-FAIL");
|
||||
SimpleTest._tests.push(test);
|
||||
};
|
||||
|
||||
@ -107,31 +101,32 @@ SimpleTest.isnot = function (a, b, name) {
|
||||
// --------------- Test.Builder/Test.More todo() -----------------
|
||||
|
||||
SimpleTest.todo = function(condition, name, diag) {
|
||||
var test = {'result': !!condition, 'name': name, 'diag': diag, todo: true};
|
||||
if (SimpleTest._logEnabled)
|
||||
SimpleTest._logResult(test, "TEST-UNEXPECTED-PASS", "TEST-KNOWN-FAIL");
|
||||
SimpleTest._tests.push(test);
|
||||
var test = {'result': !!condition, 'name': name, 'diag': diag, todo: true};
|
||||
SimpleTest._logResult(test, "TEST-UNEXPECTED-PASS", "TEST-KNOWN-FAIL");
|
||||
SimpleTest._tests.push(test);
|
||||
};
|
||||
|
||||
SimpleTest._getCurrentTestURL = function() {
|
||||
return parentRunner && parentRunner.currentTestURL ||
|
||||
typeof gTestPath == "string" && gTestPath ||
|
||||
"";
|
||||
};
|
||||
|
||||
SimpleTest._logResult = function(test, passString, failString) {
|
||||
var msg = test.result ? passString : failString;
|
||||
msg += " | ";
|
||||
if (parentRunner.currentTestURL)
|
||||
msg += parentRunner.currentTestURL;
|
||||
msg += " | " + test.name;
|
||||
if (test.diag)
|
||||
msg += " - " + test.diag;
|
||||
if (test.result) {
|
||||
if (test.todo)
|
||||
parentRunner.logger.error(msg);
|
||||
else
|
||||
parentRunner.logger.log(msg);
|
||||
} else {
|
||||
if (test.todo)
|
||||
parentRunner.logger.log(msg);
|
||||
else
|
||||
parentRunner.logger.error(msg);
|
||||
}
|
||||
var isError = !test.result == !test.todo;
|
||||
var resultString = test.result ? passString : failString;
|
||||
var url = SimpleTest._getCurrentTestURL();
|
||||
var diagnostic = test.name + (test.diag ? " - " + test.diag : "");
|
||||
var msg = [resultString, url, diagnostic].join(" | ");
|
||||
if (parentRunner) {
|
||||
if (isError) {
|
||||
parentRunner.error(msg);
|
||||
} else {
|
||||
parentRunner.log(msg);
|
||||
}
|
||||
} else {
|
||||
dump(msg + "\n");
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
@ -227,7 +222,6 @@ SimpleTest.toggleByClass = function (cls, evt) {
|
||||
/**
|
||||
* Shows the report in the browser
|
||||
**/
|
||||
|
||||
SimpleTest.showReport = function() {
|
||||
var togglePassed = A({'href': '#'}, "Toggle passed checks");
|
||||
var toggleFailed = A({'href': '#'}, "Toggle failed checks");
|
||||
@ -318,8 +312,8 @@ SimpleTest.waitForFocus = function (callback, targetWindow, expectBlankPage) {
|
||||
getInterface(Components.interfaces.nsIDOMWindowUtils);
|
||||
|
||||
//TODO: make this support scenarios where we run test standalone and not inside of TestRunner only
|
||||
if (parent && parent.ipcWaitForFocus != undefined) {
|
||||
parent.contentAsyncEvent("waitForFocus", {"callback":callback, "targetWindow":domutils.outerWindowID});
|
||||
if (parent && parent.ipcWaitForFocus) {
|
||||
parent.contentAsyncEvent("waitForFocus", {"callback":callback, "targetWindow":domutils.outerWindowID});
|
||||
}
|
||||
return;
|
||||
}
|
||||
@ -336,10 +330,7 @@ SimpleTest.waitForFocus = function (callback, targetWindow, expectBlankPage) {
|
||||
childTargetWindow = childTargetWindow.value;
|
||||
|
||||
function info(msg) {
|
||||
if (SimpleTest._logEnabled)
|
||||
SimpleTest._logResult({result: true, name: msg}, "TEST-INFO");
|
||||
else
|
||||
dump("TEST-INFO | " + msg + "\n");
|
||||
}
|
||||
|
||||
function debugFocusLog(prefix) {
|
||||
@ -546,7 +537,7 @@ SimpleTest.executeSoon = function(aFunc) {
|
||||
return;
|
||||
} catch (ex) {
|
||||
// If the above fails (most likely because of enablePrivilege
|
||||
// failing, fall through to the setTimeout path.
|
||||
// failing), fall through to the setTimeout path.
|
||||
}
|
||||
}
|
||||
setTimeout(aFunc, 0);
|
||||
@ -603,7 +594,7 @@ SimpleTest._deepCheck = function (e1, e2, stack, seen) {
|
||||
ok = SimpleTest._eqAssoc(e1, e2, stack, seen);
|
||||
} else {
|
||||
// If we get here, they're not the same (function references must
|
||||
// always simply rererence the same function).
|
||||
// always simply reference the same function).
|
||||
stack.push({ vals: [e1, e2] });
|
||||
ok = false;
|
||||
}
|
||||
@ -781,28 +772,41 @@ var isDeeply = SimpleTest.isDeeply;
|
||||
|
||||
var gOldOnError = window.onerror;
|
||||
window.onerror = function simpletestOnerror(errorMsg, url, lineNumber) {
|
||||
var funcIdentifier = "[SimpleTest/SimpleTest.js, window.onerror] ";
|
||||
var funcIdentifier = "[SimpleTest/SimpleTest.js, window.onerror]";
|
||||
|
||||
// Log the message.
|
||||
ok(false, funcIdentifier + "An error occurred", errorMsg + " at " + url + ":" + lineNumber);
|
||||
// There is no Components.stack.caller to log. (See bug 511888.)
|
||||
|
||||
// Call previous handler.
|
||||
if (gOldOnError) {
|
||||
try {
|
||||
// Ignore return value: always run default handler.
|
||||
gOldOnError(errorMsg, url, lineNumber);
|
||||
} catch (e) {
|
||||
// Log the error.
|
||||
ok(false, funcIdentifier + "Exception thrown by gOldOnError()", e);
|
||||
// Log its stack.
|
||||
if (e.stack)
|
||||
ok(false, funcIdentifier + "JavaScript error stack:\n" + e.stack);
|
||||
// Log the message.
|
||||
// XXX Chrome mochitests sometimes trigger this window.onerror handler,
|
||||
// but there are a number of uncaught JS exceptions from those tests
|
||||
// currently, so we can't log them as errors just yet. For now, when
|
||||
// parentRunner is null, just dump it so that the error is visible but
|
||||
// doesn't cause a test failure. See bug 652494.
|
||||
function logInfo(message) {
|
||||
if (parentRunner) {
|
||||
SimpleTest._logInfo(funcIdentifier, message);
|
||||
} else {
|
||||
dump(funcIdentifier + " " + message);
|
||||
}
|
||||
}
|
||||
}
|
||||
logInfo("An error occurred: " + errorMsg + " at " + url + ":" + lineNumber);
|
||||
// There is no Components.stack.caller to log. (See bug 511888.)
|
||||
|
||||
if (!SimpleTest._stopOnLoad) {
|
||||
// Need to finish() manually here, yet let the test actually end first.
|
||||
SimpleTest.executeSoon(SimpleTest.finish);
|
||||
}
|
||||
}
|
||||
// Call previous handler.
|
||||
if (gOldOnError) {
|
||||
try {
|
||||
// Ignore return value: always run default handler.
|
||||
gOldOnError(errorMsg, url, lineNumber);
|
||||
} catch (e) {
|
||||
// Log the error.
|
||||
logInfo("Exception thrown by gOldOnError(): " + e);
|
||||
// Log its stack.
|
||||
if (e.stack) {
|
||||
logInfo("JavaScript error stack:\n" + e.stack);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!SimpleTest._stopOnLoad) {
|
||||
// Need to finish() manually here, yet let the test actually end first.
|
||||
SimpleTest.executeSoon(SimpleTest.finish);
|
||||
}
|
||||
};
|
||||
|
@ -42,14 +42,11 @@ TestRunner._urls = [];
|
||||
TestRunner.timeout = 5 * 60 * 1000; // 5 minutes.
|
||||
TestRunner.maxTimeouts = 4; // halt testing after too many timeouts
|
||||
|
||||
TestRunner.ipcMode = false; // running in e10s build and need to use IPC?
|
||||
try {
|
||||
netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
|
||||
var ipcsanity = Components.classes["@mozilla.org/preferences-service;1"]
|
||||
.getService(Components.interfaces.nsIPrefBranch);
|
||||
ipcsanity.setIntPref("mochitest.ipcmode", 0);
|
||||
} catch (e) {
|
||||
TestRunner.ipcMode = true;
|
||||
// running in e10s build and need to use IPC?
|
||||
if (typeof SpecialPowers != 'undefined') {
|
||||
TestRunner.ipcMode = SpecialPowers.hasContentProcesses();
|
||||
} else {
|
||||
TestRunner.ipcMode = false;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -102,6 +99,22 @@ TestRunner.onComplete = null;
|
||||
**/
|
||||
TestRunner.logger = MochiKit.Logging.logger;
|
||||
|
||||
TestRunner.log = function(msg) {
|
||||
if (TestRunner.logEnabled) {
|
||||
TestRunner.logger.log(msg);
|
||||
} else {
|
||||
dump(msg + "\n");
|
||||
}
|
||||
};
|
||||
|
||||
TestRunner.error = function(msg) {
|
||||
if (TestRunner.logEnabled) {
|
||||
TestRunner.logger.error(msg);
|
||||
} else {
|
||||
dump(msg + "\n");
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Toggle element visibility
|
||||
**/
|
||||
@ -137,9 +150,7 @@ TestRunner._makeIframe = function (url, retry) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (TestRunner.logEnabled) {
|
||||
TestRunner.logger.log("Error: Unable to restore focus, expect failures and timeouts.");
|
||||
}
|
||||
TestRunner.log("Error: Unable to restore focus, expect failures and timeouts.");
|
||||
}
|
||||
window.scrollTo(0, $('indicator').offsetTop);
|
||||
iframe.src = url;
|
||||
@ -155,8 +166,7 @@ TestRunner._makeIframe = function (url, retry) {
|
||||
*
|
||||
**/
|
||||
TestRunner.runTests = function (/*url...*/) {
|
||||
if (TestRunner.logEnabled)
|
||||
TestRunner.logger.log("SimpleTest START");
|
||||
TestRunner.log("SimpleTest START");
|
||||
|
||||
TestRunner._urls = flattenArguments(arguments);
|
||||
$('testframe').src="";
|
||||
@ -182,8 +192,7 @@ TestRunner.runNextTest = function() {
|
||||
TestRunner._currentTestStartTime = new Date().valueOf();
|
||||
TestRunner._timeoutFactor = 1;
|
||||
|
||||
if (TestRunner.logEnabled)
|
||||
TestRunner.logger.log("TEST-START | " + url); // used by automation.py
|
||||
TestRunner.log("TEST-START | " + url); // used by automation.py
|
||||
|
||||
TestRunner._makeIframe(url, 0);
|
||||
} else {
|
||||
@ -196,8 +205,7 @@ TestRunner.runNextTest = function() {
|
||||
{
|
||||
// No |$('testframe').contentWindow|, so manually update: ...
|
||||
// ... the log,
|
||||
if (TestRunner.logEnabled)
|
||||
TestRunner.logger.error("TEST-UNEXPECTED-FAIL | (SimpleTest/TestRunner.js) | No checks actually run.");
|
||||
TestRunner.error("TEST-UNEXPECTED-FAIL | (SimpleTest/TestRunner.js) | No checks actually run.");
|
||||
// ... the count,
|
||||
$("fail-count").innerHTML = 1;
|
||||
// ... the indicator.
|
||||
@ -206,13 +214,11 @@ TestRunner.runNextTest = function() {
|
||||
indicator.style.backgroundColor = "red";
|
||||
}
|
||||
|
||||
if (TestRunner.logEnabled) {
|
||||
TestRunner.logger.log("TEST-START | Shutdown"); // used by automation.py
|
||||
TestRunner.logger.log("Passed: " + $("pass-count").innerHTML);
|
||||
TestRunner.logger.log("Failed: " + $("fail-count").innerHTML);
|
||||
TestRunner.logger.log("Todo: " + $("todo-count").innerHTML);
|
||||
TestRunner.logger.log("SimpleTest FINISHED");
|
||||
}
|
||||
TestRunner.log("TEST-START | Shutdown"); // used by automation.py
|
||||
TestRunner.log("Passed: " + $("pass-count").innerHTML);
|
||||
TestRunner.log("Failed: " + $("fail-count").innerHTML);
|
||||
TestRunner.log("Todo: " + $("todo-count").innerHTML);
|
||||
TestRunner.log("SimpleTest FINISHED");
|
||||
|
||||
if (TestRunner.onComplete) {
|
||||
TestRunner.onComplete();
|
||||
@ -224,12 +230,10 @@ TestRunner.runNextTest = function() {
|
||||
* This stub is called by SimpleTest when a test is finished.
|
||||
**/
|
||||
TestRunner.testFinished = function(tests) {
|
||||
if (TestRunner.logEnabled) {
|
||||
var runtime = new Date().valueOf() - TestRunner._currentTestStartTime;
|
||||
TestRunner.logger.log("TEST-END | " +
|
||||
TestRunner._urls[TestRunner._currentTest] +
|
||||
" | finished in " + runtime + "ms");
|
||||
}
|
||||
var runtime = new Date().valueOf() - TestRunner._currentTestStartTime;
|
||||
TestRunner.log("TEST-END | " +
|
||||
TestRunner._urls[TestRunner._currentTest] +
|
||||
" | finished in " + runtime + "ms");
|
||||
|
||||
TestRunner.updateUI(tests);
|
||||
TestRunner._currentTest++;
|
||||
|
Loading…
Reference in New Issue
Block a user