mirror of
https://github.com/mozilla/gecko-dev.git
synced 2025-11-11 05:39:41 +02:00
MozReview-Commit-ID: JobfpedA88C Differential Revision: https://phabricator.services.mozilla.com/D13823 --HG-- rename : devtools/client/debugger/test/mochitest/doc_promise-get-allocation-stack.html => devtools/server/tests/browser/doc_promise-get-allocation-stack.html rename : devtools/client/debugger/test/mochitest/doc_promise-get-fulfillment-stack.html => devtools/server/tests/browser/doc_promise-get-fulfillment-stack.html rename : devtools/client/debugger/test/mochitest/doc_promise-get-rejection-stack.html => devtools/server/tests/browser/doc_promise-get-rejection-stack.html extra : moz-landing-system : lando
93 lines
2.6 KiB
JavaScript
93 lines
2.6 KiB
JavaScript
/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
|
|
/* vim: set ft=javascript ts=2 et sw=2 tw=80: */
|
|
/* Any copyright is dedicated to the Public Domain.
|
|
* http://creativecommons.org/publicdomain/zero/1.0/ */
|
|
|
|
/**
|
|
* Test that we can get a stack to a promise's rejection point.
|
|
*/
|
|
|
|
"use strict";
|
|
|
|
const TAB_URL = URL_ROOT + "doc_promise-get-rejection-stack.html";
|
|
|
|
const ObjectClient = require("devtools/shared/client/object-client");
|
|
|
|
// The code in the document above leaves an uncaught rejection. This is only
|
|
// reported to the testing framework if the code is loaded in the main process.
|
|
if (!gMultiProcessBrowser) {
|
|
ChromeUtils.import("resource://testing-common/PromiseTestUtils.jsm", this);
|
|
PromiseTestUtils.expectUncaughtRejection(/hello/);
|
|
}
|
|
|
|
const TEST_DATA = [
|
|
{
|
|
functionDisplayName: "returnPromise/<",
|
|
line: 21,
|
|
column: 47,
|
|
},
|
|
{
|
|
functionDisplayName: "returnPromise",
|
|
line: 21,
|
|
column: 14,
|
|
},
|
|
{
|
|
functionDisplayName: "makePromise",
|
|
line: 16,
|
|
column: 17,
|
|
},
|
|
];
|
|
|
|
add_task(async () => {
|
|
const browser = await addTab(TAB_URL);
|
|
const tab = gBrowser.getTabForBrowser(browser);
|
|
const target = await TargetFactory.forTab(tab);
|
|
await target.attach();
|
|
|
|
await testGetRejectionStack(tab, target);
|
|
await target.destroy();
|
|
});
|
|
|
|
async function testGetRejectionStack(tab, target) {
|
|
const front = await target.getFront("promises");
|
|
|
|
await front.attach();
|
|
await front.listPromises();
|
|
|
|
// Get the grip for promise p
|
|
const onNewPromise = new Promise(resolve => {
|
|
front.on("new-promises", promises => {
|
|
for (const p of promises) {
|
|
if (p.preview.ownProperties.name &&
|
|
p.preview.ownProperties.name.value === "p") {
|
|
resolve(p);
|
|
}
|
|
}
|
|
});
|
|
});
|
|
|
|
await ContentTask.spawn(tab.linkedBrowser, {}, async function() {
|
|
content.wrappedJSObject.makePromise();
|
|
});
|
|
|
|
const form = await onNewPromise;
|
|
ok(form, "Found our promise p");
|
|
|
|
const objectClient = new ObjectClient(target.client, form);
|
|
ok(objectClient, "Got Object Client");
|
|
|
|
const response = await objectClient.getPromiseRejectionStack();
|
|
ok(response.rejectionStack.length, "Got promise allocation stack.");
|
|
|
|
for (let i = 0; i < TEST_DATA.length; i++) {
|
|
const stack = response.rejectionStack[i];
|
|
const data = TEST_DATA[i];
|
|
is(stack.source.url, TAB_URL, "Got correct source URL.");
|
|
is(stack.functionDisplayName, data.functionDisplayName,
|
|
"Got correct function display name.");
|
|
is(stack.line, data.line, "Got correct stack line number.");
|
|
is(stack.column, data.column, "Got correct stack column number.");
|
|
}
|
|
|
|
await front.detach();
|
|
}
|