From c53ad6c823f343b921b0b2a03d77d701fde3a5a9 Mon Sep 17 00:00:00 2001 From: sneak Date: Tue, 20 Oct 2026 07:25:17 +0000 Subject: [PATCH] fix: the Chrome layout tests and popup comments use the popup's real 396x600 size (closes #556) POPUP_VIEWPORT in tests/e2e/run.js said 360x600, while body in src/popup/styles/main.css is 396px wide and the background opens an approval window at 396x600. It is now 396x600, defined once near the top of the file, and the hostile token symbol's frame takes its size from it. assertAddressesFit() now measures the page at that size, then puts back the size it found. Every page it measured, the popup's own screens and the two approval prompts, was 1280x720, where a page never scrolls sideways, so its sideways-scroll check could not fail. README's list of what the Chrome suite leaves out says what sizing the page does not cover. Comments in src/popup/index.html and tests/dustThreshold.test.js that said 360x600 now say 396x600. Model: opus-5-5 --- README.md | 9 ++++++--- src/popup/index.html | 4 ++-- tests/dustThreshold.test.js | 2 +- tests/e2e/run.js | 38 +++++++++++++++++++++++++++---------- 4 files changed, 37 insertions(+), 16 deletions(-) diff --git a/README.md b/README.md index 5f5bd87..a4fa830 100644 --- a/README.md +++ b/README.md @@ -500,9 +500,12 @@ papered over: forced by clicking Reveal and the settings gear in one page task, which a person cannot do; the case a person can hit, the first decrypt after the popup opens while libsodium is still loading, is not driven. -- Approval windows open at 1280x720 whatever size the extension asks for, so - whether an approval screen fits its window is checked in the Firefox suite - only. +- Approval windows open at 1280x720 whatever size the extension asks for. The + site-connection prompt and the transaction approval are checked for sideways + scrolling at 396x600 by sizing the page itself for that measurement only, and + the rest of each test runs at 1280x720. That leaves out the window's frame and + the page widening its window, so whether an approval screen fits its window is + checked in the Firefox suite only. Any test that drives a failure path on purpose declares the `console.error` it is about to provoke, via `errors.expect()`. That is not a mute: the declaration diff --git a/src/popup/index.html b/src/popup/index.html index ba3197f..b41cf9e 100644 --- a/src/popup/index.html +++ b/src/popup/index.html @@ -90,7 +90,7 @@
+ 396x600. -->

Enter your 12 or 24 word recovery phrase below, or @@ -212,7 +212,7 @@ />

diff --git a/tests/dustThreshold.test.js b/tests/dustThreshold.test.js index 100b045..0a6a0e6 100644 --- a/tests/dustThreshold.test.js +++ b/tests/dustThreshold.test.js @@ -101,7 +101,7 @@ describe("the flash line the message is shown in", () => { // // The line cuts a message too long for it with an ellipsis (see // showFlash() in src/popup/views/helpers.js). The assertions that - // measure that, in a real browser at the documented 360x600 popup, are + // measure that, in a real browser at the documented 396x600 popup, are // "a rejected dust threshold shifts no layout (#233)" and "an over-long // flash message keeps to one line (#252)" in tests/e2e/run.js, run by // make test-e2e. They are not in make check because REPO_POLICIES.md diff --git a/tests/e2e/run.js b/tests/e2e/run.js index 2fdd9ad..3ec090b 100644 --- a/tests/e2e/run.js +++ b/tests/e2e/run.js @@ -60,6 +60,14 @@ const TEST_TIMEOUT_MS = 120000; // trailing drain in main(). const TRAILING_WATCH_MS = 1500; +// The popup's size, as README gives it: `body` in src/popup/styles/main.css +// is 396px wide, and src/background/index.js opens an approval window at +// the same 396x600. Pages in this context otherwise get Playwright's +// 1280x720 default, where the page never scrolls sideways and a button +// below the popup's fold is still on screen, so a layout measured there +// passes whatever the page does. +const POPUP_VIEWPORT = { width: 396, height: 600 }; + const tests = []; function test(name, fn) { @@ -1885,12 +1893,6 @@ test("a network switch in Settings shows and removes the testnet banner at once // ------------------------------------------------ dust threshold (#233) -// The popup size README documents the UI as designed for. Pages in this -// context otherwise get Playwright's 1280x720 default, at which the flash -// line has room for any plausible message and never wraps — measuring -// there would pass for every string and prove nothing. -const POPUP_VIEWPORT = { width: 360, height: 600 }; - // Everything below the flash line that must not move when it fills, plus // the height of the line itself. Runs in the page. // @@ -2139,7 +2141,7 @@ test("a password error moves nothing on any screen (#297)", async (env) => { // ------------------------------------------ add wallet Import button (#493) -// At 360x600 the add wallet screen's Import button already starts near the +// At 396x600 the add wallet screen's Import button already starts near the // bottom of the popup, so its password error line sits beside the button // rather than above it. Measures the button and the line empty and again // filled with the longest error addWallet.js puts there. Runs in the page. @@ -3431,10 +3433,14 @@ test("six failed receipt lookups in a row end on the unreachable-network message // timeout ("'; + 'style="position:fixed;left:0;top:0;width:' + + POPUP_VIEWPORT.width + + "px;height:" + + POPUP_VIEWPORT.height + + 'px;z-index:99999">'; // What a correctly escaped and capped render of it reads as: the first // MAX_SYMBOL_LENGTH-1 characters and an ellipsis. Spelled out rather than @@ -5026,8 +5032,20 @@ function addressRowReport(page) { }); } +// Measured at the popup's 396x600 (POPUP_VIEWPORT). Every page in this +// context, approval windows included, is otherwise 1280x720 whatever size +// the extension asks for, and a page that wide never scrolls sideways. The +// page is then put back to the size it had, so the size a later step runs at +// does not depend on whether this one ran. async function assertAddressesFit(page, where) { - const report = await addressRowReport(page); + const sizeBefore = page.viewportSize(); + await page.setViewportSize(POPUP_VIEWPORT); + let report; + try { + report = await addressRowReport(page); + } finally { + await page.setViewportSize(sizeBefore); + } assert( report.rows.length > 0, where + ": no address rows were rendered, so nothing was measured",