chore(tests): guard viewport and text assertions
- Remove non-null assertions from keyboard, text editing, viewport, and legacy fig import tests - Add explicit canvas, store, page-node, and variable guards - Validate check, legacy fig import, keyboard, and viewport E2E coverage
This commit is contained in:
parent
eba56fbe38
commit
c7d2d0d0ad
|
|
@ -1,5 +1,6 @@
|
|||
import { test, expect } from '@playwright/test'
|
||||
|
||||
import { expectDefined } from '#tests/helpers/assert'
|
||||
import { CanvasHelper } from '#tests/helpers/canvas'
|
||||
|
||||
const NODE_COUNT = 200
|
||||
|
|
@ -45,8 +46,8 @@ test.describe('Zoom and pan', () => {
|
|||
})
|
||||
|
||||
// Use Playwright's native mouse.wheel with Control key held for zoom
|
||||
const box = await helper.canvas.boundingBox()
|
||||
await helper.page.mouse.move(box!.x + 400, box!.y + 300)
|
||||
const box = expectDefined(await helper.canvas.boundingBox(), 'canvas bounds')
|
||||
await helper.page.mouse.move(box.x + 400, box.y + 300)
|
||||
await helper.page.keyboard.down('Control')
|
||||
await helper.page.mouse.wheel(0, -100)
|
||||
await helper.page.keyboard.up('Control')
|
||||
|
|
@ -70,8 +71,8 @@ test.describe('Zoom and pan', () => {
|
|||
return { panX: store.state.panX, panY: store.state.panY }
|
||||
})
|
||||
|
||||
const box = await helper.canvas.boundingBox()
|
||||
await helper.page.mouse.move(box!.x + 400, box!.y + 300)
|
||||
const box = expectDefined(await helper.canvas.boundingBox(), 'canvas bounds')
|
||||
await helper.page.mouse.move(box.x + 400, box.y + 300)
|
||||
|
||||
// Playwright wheel without ctrl → pan
|
||||
await helper.page.mouse.wheel(100, 50)
|
||||
|
|
@ -90,8 +91,8 @@ test.describe('Zoom and pan', () => {
|
|||
})
|
||||
|
||||
test('rapid wheel events are coalesced without errors', async () => {
|
||||
const box = await helper.canvas.boundingBox()
|
||||
await helper.page.mouse.move(box!.x + 400, box!.y + 300)
|
||||
const box = expectDefined(await helper.canvas.boundingBox(), 'canvas bounds')
|
||||
await helper.page.mouse.move(box.x + 400, box.y + 300)
|
||||
await helper.page.keyboard.down('Control')
|
||||
for (let i = 0; i < 50; i++) {
|
||||
await helper.page.mouse.wheel(0, -5)
|
||||
|
|
@ -115,8 +116,10 @@ test.describe('Zoom and pan', () => {
|
|||
const result = await helper.page.evaluate(() => {
|
||||
const store = window.__OPEN_PENCIL_STORE__
|
||||
if (!store) throw new Error('OpenPencil store not initialized')
|
||||
const pageNode = store.graph.getNode(store.state.currentPageId)!
|
||||
const pageNode = store.graph.getNode(store.state.currentPageId)
|
||||
if (!pageNode) throw new Error(`Page ${store.state.currentPageId} not found`)
|
||||
const firstId = pageNode.childIds[0]
|
||||
if (!firstId) throw new Error('First page child not found')
|
||||
|
||||
store.select([firstId])
|
||||
const after = store.state.selectedIds.has(firstId)
|
||||
|
|
@ -152,8 +155,10 @@ test.describe('Zoom and pan', () => {
|
|||
await helper.page.evaluate(() => {
|
||||
const store = window.__OPEN_PENCIL_STORE__
|
||||
if (!store) throw new Error('OpenPencil store not initialized')
|
||||
const pageNode = store.graph.getNode(store.state.currentPageId)!
|
||||
const pageNode = store.graph.getNode(store.state.currentPageId)
|
||||
if (!pageNode) throw new Error(`Page ${store.state.currentPageId} not found`)
|
||||
const firstId = pageNode.childIds[0]
|
||||
if (!firstId) throw new Error('First page child not found')
|
||||
store.graph.updateNode(firstId, {
|
||||
fills: [{ type: 'SOLID', color: { r: 1, g: 0, b: 0, a: 1 }, visible: true, opacity: 1 }]
|
||||
})
|
||||
|
|
@ -169,8 +174,10 @@ test.describe('Zoom and pan', () => {
|
|||
await helper.page.evaluate(() => {
|
||||
const store = window.__OPEN_PENCIL_STORE__
|
||||
if (!store) throw new Error('OpenPencil store not initialized')
|
||||
const pageNode = store.graph.getNode(store.state.currentPageId)!
|
||||
const pageNode = store.graph.getNode(store.state.currentPageId)
|
||||
if (!pageNode) throw new Error(`Page ${store.state.currentPageId} not found`)
|
||||
const firstId = pageNode.childIds[0]
|
||||
if (!firstId) throw new Error('First page child not found')
|
||||
store.graph.updateNode(firstId, {
|
||||
fills: [
|
||||
{ type: 'SOLID', color: { r: 0.5, g: 0.5, b: 0.8, a: 1 }, visible: true, opacity: 1 }
|
||||
|
|
@ -187,8 +194,11 @@ test.describe('Zoom and pan', () => {
|
|||
await helper.page.evaluate(() => {
|
||||
const store = window.__OPEN_PENCIL_STORE__
|
||||
if (!store) throw new Error('OpenPencil store not initialized')
|
||||
const pageNode = store.graph.getNode(store.state.currentPageId)!
|
||||
store.select([pageNode.childIds[0]])
|
||||
const pageNode = store.graph.getNode(store.state.currentPageId)
|
||||
if (!pageNode) throw new Error(`Page ${store.state.currentPageId} not found`)
|
||||
const firstId = pageNode.childIds[0]
|
||||
if (!firstId) throw new Error('First page child not found')
|
||||
store.select([firstId])
|
||||
})
|
||||
await helper.waitForRender()
|
||||
await helper.page.waitForTimeout(50)
|
||||
|
|
@ -198,7 +208,9 @@ test.describe('Zoom and pan', () => {
|
|||
expect(Buffer.from(before)).not.toEqual(Buffer.from(after))
|
||||
|
||||
await helper.page.evaluate(() => {
|
||||
window.__OPEN_PENCIL_STORE__!.clearSelection()
|
||||
const store = window.__OPEN_PENCIL_STORE__
|
||||
if (!store) throw new Error('OpenPencil store not initialized')
|
||||
store.clearSelection()
|
||||
})
|
||||
await helper.waitForRender()
|
||||
})
|
||||
|
|
@ -240,7 +252,8 @@ test.describe('Zoom and pan', () => {
|
|||
store.state.panX = 0
|
||||
store.state.panY = 0
|
||||
|
||||
const canvas = document.querySelector<HTMLCanvasElement>('[data-test-id="canvas-element"]')!
|
||||
const canvas = document.querySelector<HTMLCanvasElement>('[data-test-id="canvas-element"]')
|
||||
if (!canvas) throw new Error('Canvas element not found')
|
||||
const wheelStart = performance.now()
|
||||
for (let i = 0; i < iterations; i++) {
|
||||
canvas.dispatchEvent(
|
||||
|
|
|
|||
Loading…
Reference in a new issue