Sketch on chamfer UI (#3918)
* sketch on chamfer start * working * step app from getting in weird state when selection face to sketch on * sketch on chamfer tests * clean up * fix test * fix click selections for chamfers, add tests * fixture setup (#3964) * initial break up * rename main fixture file * add more expect state pattern * add fixture comment * add comments to chamfer function * typos * works without pipeExpr
This commit is contained in:
		| @ -87,7 +87,7 @@ async function removeCurrentCode(page: Page) { | ||||
|   await expect(page.locator('.cm-content')).toHaveText('') | ||||
| } | ||||
|  | ||||
| async function sendCustomCmd(page: Page, cmd: EngineCommand) { | ||||
| export async function sendCustomCmd(page: Page, cmd: EngineCommand) { | ||||
|   await page.getByTestId('custom-cmd-input').fill(JSON.stringify(cmd)) | ||||
|   await page.getByTestId('custom-cmd-send-button').click() | ||||
| } | ||||
| @ -140,7 +140,7 @@ async function openDebugPanel(page: Page) { | ||||
|   await openPane(page, 'debug-pane-button') | ||||
| } | ||||
|  | ||||
| async function closeDebugPanel(page: Page) { | ||||
| export async function closeDebugPanel(page: Page) { | ||||
|   const debugLocator = page.getByTestId('debug-pane-button') | ||||
|   await expect(debugLocator).toBeVisible() | ||||
|   const isOpen = (await debugLocator?.getAttribute('aria-pressed')) === 'true' | ||||
| @ -355,10 +355,7 @@ export async function getUtils(page: Page, test_?: typeof test) { | ||||
|     closeFilePanel: () => closeFilePanel(page), | ||||
|     openVariablesPane: () => openVariablesPane(page), | ||||
|     openLogsPane: () => openLogsPane(page), | ||||
|     openAndClearDebugPanel: async () => { | ||||
|       await openDebugPanel(page) | ||||
|       return clearCommandLogs(page) | ||||
|     }, | ||||
|     openAndClearDebugPanel: () => openAndClearDebugPanel(page), | ||||
|     clearAndCloseDebugPanel: async () => { | ||||
|       await clearCommandLogs(page) | ||||
|       return closeDebugPanel(page) | ||||
| @ -470,50 +467,7 @@ export async function getUtils(page: Page, test_?: typeof test) { | ||||
|       }) | ||||
|     }, | ||||
|     doAndWaitForImageDiff: (fn: () => Promise<unknown>, diffCount = 200) => | ||||
|       new Promise<boolean>((resolve) => { | ||||
|         ;(async () => { | ||||
|           await page.screenshot({ | ||||
|             path: './e2e/playwright/temp1.png', | ||||
|             fullPage: true, | ||||
|           }) | ||||
|           await fn() | ||||
|           const isImageDiff = async () => { | ||||
|             await page.screenshot({ | ||||
|               path: './e2e/playwright/temp2.png', | ||||
|               fullPage: true, | ||||
|             }) | ||||
|             const screenshot1 = PNG.sync.read( | ||||
|               await fsp.readFile('./e2e/playwright/temp1.png') | ||||
|             ) | ||||
|             const screenshot2 = PNG.sync.read( | ||||
|               await fsp.readFile('./e2e/playwright/temp2.png') | ||||
|             ) | ||||
|             const actualDiffCount = pixelMatch( | ||||
|               screenshot1.data, | ||||
|               screenshot2.data, | ||||
|               null, | ||||
|               screenshot1.width, | ||||
|               screenshot2.height | ||||
|             ) | ||||
|             return actualDiffCount > diffCount | ||||
|           } | ||||
|  | ||||
|           // run isImageDiff every 50ms until it returns true or 5 seconds have passed (100 times) | ||||
|           let count = 0 | ||||
|           const interval = setInterval(() => { | ||||
|             ;(async () => { | ||||
|               count++ | ||||
|               if (await isImageDiff()) { | ||||
|                 clearInterval(interval) | ||||
|                 resolve(true) | ||||
|               } else if (count > 100) { | ||||
|                 clearInterval(interval) | ||||
|                 resolve(false) | ||||
|               } | ||||
|             })().catch(reportRejection) | ||||
|           }, 50) | ||||
|         })().catch(reportRejection) | ||||
|       }), | ||||
|       doAndWaitForImageDiff(page, fn, diffCount), | ||||
|     emulateNetworkConditions: async ( | ||||
|       networkOptions: Protocol.Network.emulateNetworkConditionsParameters | ||||
|     ) => { | ||||
| @ -1056,3 +1010,59 @@ export async function createProjectAndRenameIt({ | ||||
| export function executorInputPath(fileName: string): string { | ||||
|   return join('src', 'wasm-lib', 'tests', 'executor', 'inputs', fileName) | ||||
| } | ||||
|  | ||||
| export async function doAndWaitForImageDiff( | ||||
|   page: Page, | ||||
|   fn: () => Promise<unknown>, | ||||
|   diffCount = 200 | ||||
| ) { | ||||
|   return new Promise<boolean>((resolve) => { | ||||
|     ;(async () => { | ||||
|       await page.screenshot({ | ||||
|         path: './e2e/playwright/temp1.png', | ||||
|         fullPage: true, | ||||
|       }) | ||||
|       await fn() | ||||
|       const isImageDiff = async () => { | ||||
|         await page.screenshot({ | ||||
|           path: './e2e/playwright/temp2.png', | ||||
|           fullPage: true, | ||||
|         }) | ||||
|         const screenshot1 = PNG.sync.read( | ||||
|           await fsp.readFile('./e2e/playwright/temp1.png') | ||||
|         ) | ||||
|         const screenshot2 = PNG.sync.read( | ||||
|           await fsp.readFile('./e2e/playwright/temp2.png') | ||||
|         ) | ||||
|         const actualDiffCount = pixelMatch( | ||||
|           screenshot1.data, | ||||
|           screenshot2.data, | ||||
|           null, | ||||
|           screenshot1.width, | ||||
|           screenshot2.height | ||||
|         ) | ||||
|         return actualDiffCount > diffCount | ||||
|       } | ||||
|  | ||||
|       // run isImageDiff every 50ms until it returns true or 5 seconds have passed (100 times) | ||||
|       let count = 0 | ||||
|       const interval = setInterval(() => { | ||||
|         ;(async () => { | ||||
|           count++ | ||||
|           if (await isImageDiff()) { | ||||
|             clearInterval(interval) | ||||
|             resolve(true) | ||||
|           } else if (count > 100) { | ||||
|             clearInterval(interval) | ||||
|             resolve(false) | ||||
|           } | ||||
|         })().catch(reportRejection) | ||||
|       }, 50) | ||||
|     })().catch(reportRejection) | ||||
|   }) | ||||
| } | ||||
|  | ||||
| export async function openAndClearDebugPanel(page: Page) { | ||||
|   await openDebugPanel(page) | ||||
|   return clearCommandLogs(page) | ||||
| } | ||||
|  | ||||
		Reference in New Issue
	
	Block a user