85 lines
3.2 KiB
JavaScript
85 lines
3.2 KiB
JavaScript
/* 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"
|
|
);
|
|
}
|
|
}
|
|
);
|
|
});
|