@@ -288,6 +288,43 @@ test.describe("Collision Inspector V2", () => {
288288 await expect ( page . locator ( "#collisionZoomInput" ) ) . toHaveAttribute ( "step" , "10" ) ;
289289 await expect ( page . locator ( "#collisionZoomInput" ) ) . toHaveValue ( "100" ) ;
290290 await expect ( page . locator ( "#zoomState" ) ) . toHaveText ( "100%" ) ;
291+ const wheelZoomState = await page . locator ( "#collisionCanvas" ) . evaluate ( ( canvas ) => {
292+ const app = window . __collisionInspectorV2App ;
293+ const rect = canvas . getBoundingClientRect ( ) ;
294+ const clientX = Math . round ( rect . left + rect . width * 0.72 ) ;
295+ const clientY = Math . round ( rect . top + rect . height * 0.44 ) ;
296+ const before = app . renderer . canvasPoint ( { clientX, clientY } ) ;
297+ const event = new WheelEvent ( "wheel" , {
298+ bubbles : true ,
299+ cancelable : true ,
300+ clientX,
301+ clientY,
302+ deltaY : - 120
303+ } ) ;
304+ canvas . dispatchEvent ( event ) ;
305+ const after = app . renderer . canvasPoint ( { clientX, clientY } ) ;
306+ return {
307+ after,
308+ before,
309+ defaultPrevented : event . defaultPrevented ,
310+ pan : { ...app . renderer . viewportPan } ,
311+ zoom : app . zoom
312+ } ;
313+ } ) ;
314+ expect ( wheelZoomState . defaultPrevented ) . toBe ( true ) ;
315+ expect ( wheelZoomState . zoom ) . toBe ( 1.1 ) ;
316+ expect ( Math . abs ( wheelZoomState . after . x - wheelZoomState . before . x ) ) . toBeLessThan ( 0.01 ) ;
317+ expect ( Math . abs ( wheelZoomState . after . y - wheelZoomState . before . y ) ) . toBeLessThan ( 0.01 ) ;
318+ expect ( Math . abs ( wheelZoomState . pan . x ) + Math . abs ( wheelZoomState . pan . y ) ) . toBeGreaterThan ( 0 ) ;
319+ await expect ( page . locator ( "#zoomState" ) ) . toHaveText ( "110%" ) ;
320+ await expect ( page . locator ( "#collisionSummary" ) ) . toContainText ( '"zoom": "110%"' ) ;
321+ await expect ( page . locator ( "#collisionLog" ) ) . toHaveValue ( / C a n v a s z o o m s e t t o 1 1 0 % / ) ;
322+ await page . evaluate ( ( ) => {
323+ window . __collisionInspectorV2App . setZoom ( 1 ) ;
324+ window . __collisionInspectorV2App . renderer . resetViewportPan ( ) ;
325+ window . __collisionInspectorV2App . evaluateAndRender ( ) ;
326+ } ) ;
327+ await expect ( page . locator ( "#zoomState" ) ) . toHaveText ( "100%" ) ;
291328 const viewportPanState = await page . locator ( "#collisionCanvas" ) . evaluate ( ( canvas ) => {
292329 const app = window . __collisionInspectorV2App ;
293330 const rect = canvas . getBoundingClientRect ( ) ;
0 commit comments