Bug 1316780: Part 3 - Capture the current unprivileged stack in browser.test.* assertion functions. r=aswan

MozReview-Commit-ID: AxjMeoodpTX

--HG--
extra : rebase_source : 9879a6d07e0b2c32067ead194106e187f8cc3fbd
This commit is contained in:
Kris Maglione 2016-11-11 15:25:30 -08:00
Родитель 14b9ffa5bc
Коммит 99044ae3ef
4 изменённых файлов: 18 добавлений и 12 удалений

Просмотреть файл

@ -53,19 +53,19 @@ ExtensionTestUtils.loadExtension = function(ext)
function testHandler(kind, pass, msg, ...args) {
if (kind == "test-eq") {
var [expected, actual] = args;
SimpleTest.ok(pass, `${msg} - Expected: ${expected}, Actual: ${actual}`);
let [expected, actual, stack] = args;
SimpleTest.ok(pass, `${msg} - Expected: ${expected}, Actual: ${actual}`, undefined, stack);
} else if (kind == "test-log") {
SimpleTest.info(msg);
} else if (kind == "test-result") {
SimpleTest.ok(pass, msg);
SimpleTest.ok(pass, msg, undefined, args[0]);
}
}
var handler = {
testResult(kind, pass, msg, ...args) {
if (kind == "test-done") {
SimpleTest.ok(pass, msg);
SimpleTest.ok(pass, msg, undefined, args[0]);
return testResolve(msg);
}
testHandler(kind, pass, msg, ...args);

Просмотреть файл

@ -234,7 +234,7 @@ SimpleTest.setExpected();
/**
* Something like assert.
**/
SimpleTest.ok = function (condition, name, diag) {
SimpleTest.ok = function (condition, name, diag, stack = null) {
var test = {'result': !!condition, 'name': name, 'diag': diag};
if (SimpleTest.expected == 'fail') {
@ -249,8 +249,9 @@ SimpleTest.ok = function (condition, name, diag) {
var failureInfo = {status:"FAIL", expected:"PASS", message:"TEST-UNEXPECTED-FAIL"};
}
var stack = null;
if (!condition) {
if (condition) {
stack = null;
} else if (!stack) {
stack = (new Error).stack.replace(/^(.*@)http:\/\/mochi.test:8888\/tests\//gm, ' $1').split('\n');
stack.splice(0, 1);
stack = stack.join('\n');

Просмотреть файл

@ -78,8 +78,12 @@ function toSource(value) {
function makeTestAPI(context) {
const {extension} = context;
function getStack() {
return new context.cloneScope.Error().stack.replace(/^/gm, " ");
}
function assertTrue(value, msg) {
extension.emit("test-result", Boolean(value), String(msg));
extension.emit("test-result", Boolean(value), String(msg), getStack());
}
return {
@ -89,15 +93,15 @@ function makeTestAPI(context) {
},
notifyPass(msg) {
extension.emit("test-done", true, msg);
extension.emit("test-done", true, msg, getStack());
},
notifyFail(msg) {
extension.emit("test-done", false, msg);
extension.emit("test-done", false, msg, getStack());
},
log(msg) {
extension.emit("test-log", true, msg);
extension.emit("test-log", true, msg, getStack());
},
fail(msg) {
@ -125,7 +129,7 @@ function makeTestAPI(context) {
if (!equal && expected === actual) {
actual += " (different)";
}
extension.emit("test-eq", equal, String(msg), expected, actual);
extension.emit("test-eq", equal, String(msg), expected, actual, getStack());
},
assertRejects(promise, expectedError, msg) {

Просмотреть файл

@ -18,6 +18,7 @@ function loadExtensionAndInterceptTest(extensionData) {
let testDone = new Promise(resolve => { testResolve = resolve; });
let handler = {
testResult(...result) {
result.pop();
results.push(result);
SimpleTest.info(`Received test result: ${JSON.stringify(result)}`);
},