From 99044ae3ef2b3ddf4173b4daecabce85417ab2c0 Mon Sep 17 00:00:00 2001 From: Kris Maglione Date: Fri, 11 Nov 2016 15:25:30 -0800 Subject: [PATCH] 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 --- .../tests/SimpleTest/ExtensionTestUtils.js | 8 ++++---- testing/mochitest/tests/SimpleTest/SimpleTest.js | 7 ++++--- toolkit/components/extensions/ext-c-test.js | 14 +++++++++----- .../extensions/test/mochitest/test_ext_test.html | 1 + 4 files changed, 18 insertions(+), 12 deletions(-) diff --git a/testing/mochitest/tests/SimpleTest/ExtensionTestUtils.js b/testing/mochitest/tests/SimpleTest/ExtensionTestUtils.js index ead62e27fcae..921d1a83f57f 100644 --- a/testing/mochitest/tests/SimpleTest/ExtensionTestUtils.js +++ b/testing/mochitest/tests/SimpleTest/ExtensionTestUtils.js @@ -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); diff --git a/testing/mochitest/tests/SimpleTest/SimpleTest.js b/testing/mochitest/tests/SimpleTest/SimpleTest.js index c2802fbd995c..37713737c8d2 100644 --- a/testing/mochitest/tests/SimpleTest/SimpleTest.js +++ b/testing/mochitest/tests/SimpleTest/SimpleTest.js @@ -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'); diff --git a/toolkit/components/extensions/ext-c-test.js b/toolkit/components/extensions/ext-c-test.js index 495dde3e4d30..b0c92f79f7ac 100644 --- a/toolkit/components/extensions/ext-c-test.js +++ b/toolkit/components/extensions/ext-c-test.js @@ -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) { diff --git a/toolkit/components/extensions/test/mochitest/test_ext_test.html b/toolkit/components/extensions/test/mochitest/test_ext_test.html index f91b21896b5b..fef31e0e217b 100644 --- a/toolkit/components/extensions/test/mochitest/test_ext_test.html +++ b/toolkit/components/extensions/test/mochitest/test_ext_test.html @@ -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)}`); },