Source code

Revision control

Copy as Markdown

Other Tools

Test Info:

/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
async function resizeWindow(windowToResize, width, height) {
let resizePromise = BrowserTestUtils.waitForEvent(
windowToResize,
"resize",
false
);
windowToResize.resizeTo(width, height);
await resizePromise;
}
add_task(async () => {
const TEST_LINK = "https://example.com/";
let originalBrowserWindow =
Services.wm.getMostRecentWindow("navigator:browser");
let originalBrowser = originalBrowserWindow.gBrowser;
// Resize this window so we can check for WM_NCCALCSIZE events below
await resizeWindow(originalBrowserWindow, 500, 400);
await resizeWindow(originalBrowserWindow, 600, 500);
await resizeWindow(originalBrowserWindow, 700, 600);
let newWindow = await BrowserTestUtils.openNewBrowserWindow({
url: TEST_LINK,
});
registerCleanupFunction(async function () {
await BrowserTestUtils.closeWindow(newWindow);
});
await BrowserTestUtils.withNewTab(
{ gBrowser: originalBrowser, url: "about:windows-messages" },
async () => {
let messagesList = content.document.getElementById("windows-div");
// This is tricky because the test framework has its own windows
Assert.greaterOrEqual(
messagesList.childNodes.length,
2,
"should have enough window entries"
);
let firstList = true;
for (let sublist of messagesList.childNodes) {
const messages = Array.from(sublist.querySelectorAll("li.message"));
const numberOfMessages = messages.length;
// Every window gets a few window messages when it opens, so there
// should be at least a few here.
Assert.greaterOrEqual(
numberOfMessages,
3,
"should have enough messages for the current window"
);
if (firstList) {
// It would be nice if we could check for a less obscure event.
// However, since we're resizing the window programatically we don't
// get WM_SIZE or WM_SIZING events.
Assert.greaterOrEqual(
messages.filter(messageLi =>
messageLi.innerHTML.includes("WM_NCCALCSIZE")
).length,
5,
"active window should have enough WM_NCCALCSIZE events"
);
firstList = false;
}
let buttons = sublist.querySelectorAll("button");
Assert.equal(buttons.length, 1, "should have only one button");
let clipboardButton = buttons[0];
clipboardButton.click();
// Wait until copying is done and the button becomes clickable.
await BrowserTestUtils.waitForMutationCondition(
clipboardButton,
{ attributes: true },
() => !clipboardButton.disabled
);
const clipboardText = await navigator.clipboard.readText();
const numberOfLines = Array.from(clipboardText.matchAll("\n")).length;
Assert.equal(
numberOfLines,
numberOfMessages,
"should copy the right number of lines to the clipboard"
);
}
}
);
});