From 5a86803f9b087389e61703f46faf60ebaef51450 Mon Sep 17 00:00:00 2001 From: rain Date: Tue, 21 Jul 2026 11:33:48 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B5=8B=E8=AF=95A04=E6=B3=A8=E5=86=8C?= =?UTF-8?q?=E9=A1=B5=E8=87=AA=E9=80=82=E5=BA=94=E7=BB=93=E6=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tests/a04-registration-contract.ps1 | 19 +++++++++---- tests/a04-registration-runtime-smoke.js | 37 ++++++++++++++++++++----- 2 files changed, 43 insertions(+), 13 deletions(-) diff --git a/tests/a04-registration-contract.ps1 b/tests/a04-registration-contract.ps1 index 03b62ec..1c351e3 100644 --- a/tests/a04-registration-contract.ps1 +++ b/tests/a04-registration-contract.ps1 @@ -28,8 +28,8 @@ $sliderPendingCopy = ConvertFrom-Utf8Base64 '5ruR5Yqo6aqM6K+B5b6F5o6l5Y+j5o6l5YW if (-not ($pages.pages.path -contains 'pages/auth/a04-register')) { throw 'A-04 route must remain declared in pages.json' } Assert-NotContains -Content $register -Unexpected 'ModulePage' -Message 'A-04 must not remain a ModulePage shell' foreach ($required in @( - 'a01-red-hall-ink-backdrop-v1.png', - 'brand-seal.png', + '.*?)^\}') +if (-not $contentRule.Success) { throw 'A04 register content rule is missing.' } +foreach ($required in @('display: flex;', 'flex: 1;', 'flex-direction: column;', 'max-width: 480px;', 'margin: 0 auto;')) { + Assert-Contains -Content $contentRule.Groups['Body'].Value -Expected $required -Message "A04 register content must use document flow: $required" +} + foreach ($forbidden in @( '(?s)\.register-panel\s*\{[^}]*\bborder\s*:', '(?s)\.register-panel\s*\{[^}]*\bbackground\s*:', diff --git a/tests/a04-registration-runtime-smoke.js b/tests/a04-registration-runtime-smoke.js index 8ad9ab9..5e2f733 100644 --- a/tests/a04-registration-runtime-smoke.js +++ b/tests/a04-registration-runtime-smoke.js @@ -68,16 +68,39 @@ const run = async () => { await valueOf(send, "document.querySelector('.register-link').click()") await waitFor(send, "location.href.includes('/pages/auth/a04-register')", 'A01 registration entry did not open A04') - for (const size of [{ width: 320, height: 568 }, { width: 360, height: 640 }, { width: 360, height: 800 }, { width: 412, height: 915 }]) { + for (const size of [ + { width: 320, height: 568 }, + { width: 360, height: 616 }, + { width: 360, height: 640 }, + { width: 360, height: 800 }, + { width: 412, height: 915 }, + { width: 480, height: 1040 } + ]) { await send('Emulation.setDeviceMetricsOverride', { ...size, deviceScaleFactor: 1, mobile: true }) await navigate(send, a04Url, '.register-submit') - const metrics = await valueOf(send, `({ - width: document.documentElement.scrollWidth, - pageClientHeight: document.querySelector('.auth-page').clientHeight, - pageScrollHeight: document.querySelector('.auth-page').scrollHeight - })`) + await waitFor(send, "document.querySelector('.auth-shell__header-image img')?.naturalWidth === 824", `A04 header did not load at ${size.width}x${size.height}`) + const metrics = await valueOf(send, `(() => { + const header = document.querySelector('.auth-shell__header') + const headerImage = document.querySelector('.auth-shell__header-image img') + const paper = document.querySelector('.auth-shell__paper') + const loginEntry = document.querySelector('.login-entry') + return { + width: document.documentElement.scrollWidth, + documentScrollHeight: Math.max(document.documentElement.scrollHeight, document.body.scrollHeight), + headerBottom: header?.getBoundingClientRect().bottom, + headerImageWidth: headerImage?.getBoundingClientRect().width, + headerImageHeight: headerImage?.getBoundingClientRect().height, + headerNaturalWidth: headerImage?.naturalWidth, + headerNaturalHeight: headerImage?.naturalHeight, + paperTop: paper?.getBoundingClientRect().top, + loginEntryBottom: loginEntry?.getBoundingClientRect().bottom + window.scrollY + } + })()`) assert(metrics.width <= size.width + 1, `A04 has horizontal overflow at ${size.width}x${size.height}`) - if (size.width === 320) assert(metrics.pageScrollHeight > metrics.pageClientHeight, 'A04 must scroll naturally at 320x568') + assert.deepStrictEqual([metrics.headerNaturalWidth, metrics.headerNaturalHeight], [824, 340], `A04 header asset changed at ${size.width}x${size.height}`) + assert(Math.abs(metrics.headerImageHeight / metrics.headerImageWidth - 340 / 824) < 0.01, `A04 header is distorted at ${size.width}x${size.height}`) + assert(metrics.paperTop >= metrics.headerBottom - 1, `A04 paper overlaps its header at ${size.width}x${size.height}`) + assert(metrics.loginEntryBottom <= metrics.documentScrollHeight + 1, `A04 last action is unreachable at ${size.width}x${size.height}`) } await valueOf(send, "document.querySelector('.register-submit').click()")