deleting start of sketch => line tool should still work (#2983)

* deleting start of sketch line tool should still work

* add test

* fmt

* put big timout back in

* shotkey test patch

* A snapshot a day keeps the bugs away! 📷🐛 (OS: ubuntu)

* Revert "A snapshot a day keeps the bugs away! 📷🐛 (OS: ubuntu)"

This reverts commit 6ee690a65a.

---------

Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
This commit is contained in:
Kurt Hutten
2024-07-10 07:01:49 +10:00
committed by GitHub
parent a76eabbb80
commit d7f2bfdabe
3 changed files with 90 additions and 7 deletions

View File

@ -3928,6 +3928,55 @@ test.describe('Sketch tests', () => {
page.getByRole('button', { name: 'Edit Sketch' }) page.getByRole('button', { name: 'Edit Sketch' })
).toBeVisible() ).toBeVisible()
}) })
test('Can delete most of a sketch and the line tool will still work', async ({
page,
}) => {
const u = await getUtils(page)
await page.addInitScript(async () => {
localStorage.setItem(
'persistCode',
`const sketch001 = startSketchOn('XZ')
|> startProfileAt([4.61, -14.01], %)
|> line([12.73, -0.09], %)
|> tangentialArcTo([24.95, -5.38], %)`
)
})
await page.setViewportSize({ width: 1200, height: 500 })
await u.waitForAuthSkipAppStart()
await page.getByText('tangentialArcTo([24.95, -5.38], %)').click()
await expect(
page.getByRole('button', { name: 'Edit Sketch' })
).toBeEnabled()
await page.getByRole('button', { name: 'Edit Sketch' }).click()
await page.waitForTimeout(600) // wait for animation
await page.getByText('tangentialArcTo([24.95, -5.38], %)').click()
await page.keyboard.press('End')
await page.keyboard.down('Shift')
await page.keyboard.press('ArrowUp')
await page.keyboard.press('Home')
await page.keyboard.up('Shift')
await page.keyboard.press('Backspace')
await u.openAndClearDebugPanel()
await u.expectCmdLog('[data-message-type="execution-done"]', 10_000)
await page.waitForTimeout(100)
await page.getByRole('button', { name: 'Line' }).click()
await page.waitForTimeout(100)
await page.mouse.click(700, 200)
await expect(page.locator('.cm-content')).toHaveText(
`const sketch001 = startSketchOn('XZ')
|> startProfileAt([4.61, -14.01], %)
|> line([0.31, 16.47], %)`
)
})
test('Can exit selection of face', async ({ page }) => { test('Can exit selection of face', async ({ page }) => {
// Load the app with the code panes // Load the app with the code panes
await page.addInitScript(async () => { await page.addInitScript(async () => {
@ -4317,7 +4366,7 @@ test.describe('Sketch tests', () => {
await expect(page.locator('.cm-content')) await expect(page.locator('.cm-content'))
.toHaveText(`const sketch001 = startSketchOn('XZ') .toHaveText(`const sketch001 = startSketchOn('XZ')
|> startProfileAt([6.44, -12.07], %) |> startProfileAt([6.44, -12.07], %)
|> line([14.72, 2.01], %) |> line([14.72, 1.97], %)
|> tangentialArcTo([24.95, -5.38], %) |> tangentialArcTo([24.95, -5.38], %)
|> line([1.97, 2.06], %) |> line([1.97, 2.06], %)
|> close(%) |> close(%)
@ -7506,17 +7555,25 @@ test('Basic default modeling and sketch hotkeys work', async ({ page }) => {
await page.keyboard.press('e') await page.keyboard.press('e')
await expect(page.locator('.cm-content')).toHaveText('//slae') await expect(page.locator('.cm-content')).toHaveText('//slae')
await page.keyboard.press('Meta+/') await page.keyboard.press('Meta+/')
await page.waitForTimeout(2000) await page.waitForTimeout(1000)
// Test these hotkeys perform actions when // Test these hotkeys perform actions when
// focus is on the canvas // focus is on the canvas
await page.mouse.move(600, 250) await page.mouse.move(600, 250)
await page.mouse.click(600, 250) await page.mouse.click(600, 250)
// work-around: to stop "keyboard.press('s')" from typing in the editor even when it should be blurred
await page.getByRole('button', { name: 'Commands ⌘K' }).click()
await page.waitForTimeout(100)
await page.keyboard.press('Escape')
await page.waitForTimeout(100)
// end work-around
// Start a sketch // Start a sketch
await page.keyboard.press('s') await page.keyboard.press('s')
await page.waitForTimeout(2000) await page.waitForTimeout(1000)
await page.mouse.move(800, 300, { steps: 5 }) await page.mouse.move(800, 300, { steps: 5 })
await page.mouse.click(800, 300) await page.mouse.click(800, 300)
await page.waitForTimeout(2000) await page.waitForTimeout(1000)
await expect(lineButton).toHaveAttribute('aria-pressed', 'true', { await expect(lineButton).toHaveAttribute('aria-pressed', 'true', {
timeout: 15_000, timeout: 15_000,
}) })

View File

@ -51,8 +51,16 @@ export function getNodeFromPath<T>(
let successfulPaths: PathToNode = [] let successfulPaths: PathToNode = []
let pathsExplored: PathToNode = [] let pathsExplored: PathToNode = []
for (const pathItem of path) { for (const pathItem of path) {
if (typeof currentNode[pathItem[0]] !== 'object') if (typeof currentNode[pathItem[0]] !== 'object') {
if (stopAtNode) {
return {
node: stopAtNode,
shallowPath: pathsExplored,
deepPath: successfulPaths,
}
}
return new Error('not an object') return new Error('not an object')
}
currentNode = currentNode?.[pathItem[0]] currentNode = currentNode?.[pathItem[0]]
successfulPaths.push(pathItem) successfulPaths.push(pathItem)
if (!stopAtNode) { if (!stopAtNode) {

File diff suppressed because one or more lines are too long