Wheel or pinch zooms the slab. Arrow keys tilt; up and down nudge the last tick. Shift is a fine step. Double-tap the slab to fit.
+
Wheel or pinch zooms the slab, drag pans it, and the handle tilts it. Arrow keys tilt; Shift is a fine step. Double-tap the slab to fit.
Crop fill
diff --git a/frontend/tests/e2e/tape-fixed-line.spec.ts b/frontend/tests/e2e/tape-fixed-line.spec.ts
index 5cbe0e7..c93b641 100644
--- a/frontend/tests/e2e/tape-fixed-line.spec.ts
+++ b/frontend/tests/e2e/tape-fixed-line.spec.ts
@@ -58,8 +58,9 @@ test.describe('#99 fixed tape line', () => {
expect(fs.existsSync(FACE_A), 'fixture face-a').toBeTruthy();
await toLengthPage(page);
- // The hint must never tell the owner to drag the ticks.
+ // The hint must never tell the owner to drag or nudge the ticks.
await expect(page.getByText('Drag the ticks')).toHaveCount(0);
+ await expect(page.getByText('nudge the last tick')).toHaveCount(0);
await expect(page.getByText('The line is fixed in the middle')).toBeVisible();
const stage = page.getByTestId('tape-line');
@@ -110,12 +111,14 @@ test.describe('#99 fixed tape line', () => {
await toLengthPage(page);
const canvas = page.getByTestId('tape-line').locator('canvas').first();
+ const fill = page.getByLabel('Crop fill percent');
const before = await canvas.screenshot();
- // Move the crop-fill slider to a different value.
- const fill = page.getByLabel('Crop fill percent');
+ // Move the crop-fill slider and confirm the control really took the value,
+ // so a no-op fill() can never masquerade as a passing assertion.
await fill.fill('50');
- await page.waitForTimeout(500);
+ await expect(fill).toHaveValue('50');
+ await page.waitForTimeout(1200);
const after = await canvas.screenshot();
expect(Buffer.compare(before, after), 'crop fill must move the line ends').not.toBe(0);