From 47d9a6941780ed1e7b767e7e843e1562332e9de9 Mon Sep 17 00:00:00 2001 From: Franz Hemmer Date: Thu, 29 Oct 2026 01:36:40 -0400 Subject: [PATCH 1/2] fix: include Reset View text in camera accessible names --- src/template.py | 4 ++-- tests/browser/accessibility.spec.js | 4 ++++ tests/browser/controls.spec.js | 2 +- 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/src/template.py b/src/template.py index 6abb73c..5368fe4 100644 --- a/src/template.py +++ b/src/template.py @@ -1079,7 +1079,7 @@ def build_html_report(analytics_data, home_href=None):
- +
@@ -1097,7 +1097,7 @@ def build_html_report(analytics_data, home_href=None):
- +
diff --git a/tests/browser/accessibility.spec.js b/tests/browser/accessibility.spec.js index f87e766..cd6488a 100644 --- a/tests/browser/accessibility.spec.js +++ b/tests/browser/accessibility.spec.js @@ -7,6 +7,10 @@ const { openReport, root } = require('./fixture'); test('nine named visualizations expose complete equivalent data and accessible structure', async ({ page }) => { await openReport(page); const metrics = JSON.parse(await fs.readFile(path.join(root, 'test-results/metrics.json'), 'utf8')); + for (const reset of await page.getByRole('button', { name: /^Reset View/ }).all()) { + await expect(reset).toHaveAccessibleName(new RegExp(await reset.innerText())); + } + await expect(page.getByRole('button', { name: /^Reset View/ })).toHaveCount(2); const regions = page.locator('[data-visualization]'); await expect(regions).toHaveCount(9); await expect(page.locator('canvas[role="img"][aria-label][aria-describedby]')).toHaveCount(9); diff --git a/tests/browser/controls.spec.js b/tests/browser/controls.spec.js index 23827ba..20710e6 100644 --- a/tests/browser/controls.spec.js +++ b/tests/browser/controls.spec.js @@ -20,7 +20,7 @@ test('bundled OrbitControls orbits by dragging and buttons stop and reset the sc await expect.poll(() => page.evaluate(start => velCamera.position.toArray() .reduce((sum, value, i) => sum + Math.abs(value - start[i]), 0), before)).toBeGreaterThan(1); // Reset while drag momentum is still decaying; it must not drift off the default view. - await page.getByRole('button', { name: 'Reset weekly velocity camera' }).click(); + await page.getByRole('button', { name: 'Reset View for weekly velocity camera' }).click(); await page.waitForTimeout(300); await expect.poll(() => page.evaluate(() => velCamera.position.toArray() .reduce((sum, value, i) => sum + Math.abs(value - [28, 26, 36][i]), 0))).toBeLessThan(0.1); From d6619b17eefb1180f39c3fd41bd0b2074cbde87b Mon Sep 17 00:00:00 2001 From: Franz Hemmer Date: Thu, 29 Oct 2026 01:45:18 -0400 Subject: [PATCH 2/2] fix: update benchmark reset selector for accessible name --- scripts/benchmark_browser.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/benchmark_browser.js b/scripts/benchmark_browser.js index a5058ef..f654268 100644 --- a/scripts/benchmark_browser.js +++ b/scripts/benchmark_browser.js @@ -61,7 +61,7 @@ async function workload(page, scenario) { viewport.dispatchEvent(new MouseEvent('mousemove', { clientX: box.x + box.width / 2, clientY: box.y + box.height / 2 })); const rotation = document.querySelector('[aria-label="Auto-rotate weekly velocity"]'); rotation.click(); rotation.click(); - document.querySelector('[aria-label="Reset weekly velocity camera"]').click(); + document.querySelector('[aria-label="Reset View for weekly velocity camera"]').click(); document.querySelector('#tab-prs').click(); const search = document.querySelector('#table-search'); for (const value of ['no-benchmark-match', '']) {