gecko-dev/devtools/server/tests/browser/browser_dbg_promises-rejection-stack.js
Alexandre Poirot 1b70409821 Bug 1502128 - Migrate promises actor tests to server tests. r=yulia
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
2018-12-11 14:15:54 +00:00

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();
}