Go back to fix up sketch-tests test
This commit is contained in:
@ -12,17 +12,11 @@ import {
|
||||
} from './test-utils'
|
||||
import { uuidv4, roundOff } from 'lib/utils'
|
||||
|
||||
test.afterEach(async ({ page }, testInfo) => {
|
||||
await tearDown(page, testInfo)
|
||||
})
|
||||
|
||||
|
||||
test.describe('Sketch tests', () => {
|
||||
test('multi-sketch file shows multiple Edit Sketch buttons', async ({
|
||||
page,
|
||||
context,
|
||||
homePage,
|
||||
}) => {
|
||||
const u = await getUtils(page)
|
||||
test('multi-sketch file shows multiple Edit Sketch buttons', async ({ page, context,
|
||||
homePage }) => { const u = await getUtils(page)
|
||||
const selectionsSnippets = {
|
||||
startProfileAt1:
|
||||
'|> startProfileAt([-width / 4 + screwRadius, height / 2], %)',
|
||||
@ -44,9 +38,9 @@ test.describe('Sketch tests', () => {
|
||||
screwHole = startSketchOn('XY')
|
||||
${startProfileAt1}
|
||||
|> arc({
|
||||
radius = screwRadius,
|
||||
angle_start = 0,
|
||||
angle_end = 360
|
||||
radius: screwRadius,
|
||||
angle_start: 0,
|
||||
angle_end: 360
|
||||
}, %)
|
||||
|
||||
part001 = startSketchOn('XY')
|
||||
@ -65,9 +59,9 @@ test.describe('Sketch tests', () => {
|
||||
|> xLine(-width / 4 + wireRadius, %)
|
||||
|> yLine(wireOffset, %)
|
||||
|> arc({
|
||||
radius = wireRadius,
|
||||
angle_start = 0,
|
||||
angle_end = 180
|
||||
radius: wireRadius,
|
||||
angle_start: 0,
|
||||
angle_end: 180
|
||||
}, %)
|
||||
|> yLine(-wireOffset, %)
|
||||
|> xLine(-width / 4, %)
|
||||
@ -78,7 +72,7 @@ test.describe('Sketch tests', () => {
|
||||
},
|
||||
selectionsSnippets
|
||||
)
|
||||
await page.setViewportSize({ width: 1200, height: 500 })
|
||||
await page.setBodyDimensions({ width: 1200, height: 500 })
|
||||
|
||||
await homePage.goToModelingScene()
|
||||
|
||||
@ -103,14 +97,9 @@ test.describe('Sketch tests', () => {
|
||||
await expect(page.getByRole('button', { name: 'Extrude' })).toBeDisabled()
|
||||
await expect(
|
||||
page.getByRole('button', { name: 'Edit Sketch' })
|
||||
).toBeVisible()
|
||||
})
|
||||
test('Can delete most of a sketch and the line tool will still work', async ({
|
||||
page,
|
||||
center,
|
||||
homePage,
|
||||
}) => {
|
||||
const u = await getUtils(page)
|
||||
).toBeVisible() })
|
||||
test('Can delete most of a sketch and the line tool will still work', async ({ page, center,
|
||||
homePage }) => { const u = await getUtils(page)
|
||||
await page.addInitScript(async () => {
|
||||
localStorage.setItem(
|
||||
'persistCode',
|
||||
@ -140,8 +129,7 @@ test.describe('Sketch tests', () => {
|
||||
await page.keyboard.press('Home')
|
||||
await page.keyboard.up('Shift')
|
||||
await page.keyboard.press('Backspace')
|
||||
await u.openAndClearDebugPanel()
|
||||
|
||||
await u.openDebugPanel()
|
||||
await u.expectCmdLog('[data-message-type="execution-done"]', 10_000)
|
||||
await page.waitForTimeout(100)
|
||||
|
||||
@ -152,22 +140,22 @@ test.describe('Sketch tests', () => {
|
||||
await page.mouse.move(700, 200, { step: 25 })
|
||||
await page.mouse.click(700, 200)
|
||||
|
||||
await expect.poll(u.normalisedEditorCode, { timeout: 1000 })
|
||||
await expect.poll(u.crushKclCodeIntoOneLineAndThenMaybeSome, { timeout: 1000 })
|
||||
.toBe(`sketch001 = startSketchOn('XZ')
|
||||
|> startProfileAt([12.34, -12.34], %)
|
||||
|> yLine(12.34, %)
|
||||
|
||||
`)
|
||||
|> startProfileAt([4.61,-14.01], %)
|
||||
|> yLine(15.95, %)
|
||||
`.replaceAll(' ', '').replaceAll("\n", ''))
|
||||
}).toPass({ timeout: 40_000, intervals: [1_000] })
|
||||
|
||||
})
|
||||
test('Can exit selection of face', async ({ page, homePage }) => {
|
||||
// Load the app with the code panes
|
||||
|
||||
test('Can exit selection of face', async ({ page, homePage }) => { // Load the app with the code panes
|
||||
await page.addInitScript(async () => {
|
||||
localStorage.setItem('persistCode', ``)
|
||||
})
|
||||
|
||||
const u = await getUtils(page)
|
||||
await page.setViewportSize({ width: 1200, height: 500 })
|
||||
await page.setBodyDimensions({ width: 1200, height: 500 })
|
||||
|
||||
await homePage.goToModelingScene()
|
||||
|
||||
@ -181,8 +169,7 @@ test.describe('Sketch tests', () => {
|
||||
await page.keyboard.press('Escape')
|
||||
await expect(
|
||||
page.getByRole('button', { name: 'Start Sketch' })
|
||||
).toBeVisible()
|
||||
})
|
||||
).toBeVisible() })
|
||||
test.describe('Can edit segments by dragging their handles', () => {
|
||||
const doEditSegmentsByDraggingHandle = async (
|
||||
page: Page,
|
||||
@ -317,8 +304,7 @@ test.describe('Sketch tests', () => {
|
||||
|> line([1.97, 2.06], %)
|
||||
|> close(%)`)
|
||||
}
|
||||
test('code pane open at start-handles', async ({ page, homePage }) => {
|
||||
// Load the app with the code panes
|
||||
test('code pane open at start-handles', async ({ page, homePage }) => { // Load the app with the code panes
|
||||
await page.addInitScript(async () => {
|
||||
localStorage.setItem(
|
||||
'store',
|
||||
@ -330,31 +316,24 @@ test.describe('Sketch tests', () => {
|
||||
})
|
||||
)
|
||||
})
|
||||
await doEditSegmentsByDraggingHandle(page, homePage, ['code'])
|
||||
})
|
||||
await doEditSegmentsByDraggingHandle(page, homePage, ['code']) })
|
||||
|
||||
test('code pane closed at start-handles', async ({ page, homePage }) => {
|
||||
// Load the app with the code panes
|
||||
test('code pane closed at start-handles', async ({ page, homePage }) => { // Load the app with the code panes
|
||||
await page.addInitScript(async (persistModelingContext) => {
|
||||
localStorage.setItem(
|
||||
persistModelingContext,
|
||||
JSON.stringify({ openPanes: [] })
|
||||
)
|
||||
}, PERSIST_MODELING_CONTEXT)
|
||||
await doEditSegmentsByDraggingHandle(page, homePage, [])
|
||||
})
|
||||
await doEditSegmentsByDraggingHandle(page, homePage, []) })
|
||||
})
|
||||
|
||||
test('Can edit a circle center and radius by dragging its handles', async ({
|
||||
page,
|
||||
homePage,
|
||||
}) => {
|
||||
const u = await getUtils(page)
|
||||
test('Can edit a circle center and radius by dragging its handles', async ({ page, homePage }) => { const u = await getUtils(page)
|
||||
await page.addInitScript(async () => {
|
||||
localStorage.setItem(
|
||||
'persistCode',
|
||||
`sketch001 = startSketchOn('XZ')
|
||||
|> circle({ center = [4.61, -5.01], radius = 8 }, %)`
|
||||
|> circle({ center: [4.61, -5.01], radius: 8 }, %)`
|
||||
)
|
||||
})
|
||||
|
||||
@ -391,7 +370,7 @@ test.describe('Sketch tests', () => {
|
||||
const dragPX = 40
|
||||
|
||||
await page
|
||||
.getByText('circle({ center = [4.61, -5.01], radius = 8 }, %)')
|
||||
.getByText('circle({ center: [4.61, -5.01], radius: 8 }, %)')
|
||||
.click()
|
||||
await expect(
|
||||
page.getByRole('button', { name: 'Edit Sketch' })
|
||||
@ -428,14 +407,9 @@ test.describe('Sketch tests', () => {
|
||||
// expect the code to have changed
|
||||
await expect(page.locator('.cm-content'))
|
||||
.toHaveText(`sketch001 = startSketchOn('XZ')
|
||||
|> circle({ center = [7.26, -2.37], radius = 11.44 }, %)
|
||||
`)
|
||||
})
|
||||
test('Can edit a sketch that has been extruded in the same pipe', async ({
|
||||
page,
|
||||
homePage
|
||||
}) => {
|
||||
const u = await getUtils(page)
|
||||
|> circle({ center: [7.26, -2.37], radius: 11.44 }, %)
|
||||
`) })
|
||||
test('Can edit a sketch that has been extruded in the same pipe', async ({ page, homePage }) => { const u = await getUtils(page)
|
||||
await page.addInitScript(async () => {
|
||||
localStorage.setItem(
|
||||
'persistCode',
|
||||
@ -531,14 +505,9 @@ test.describe('Sketch tests', () => {
|
||||
|> tangentialArcTo([24.89, 0.68], %)
|
||||
|> close(%)
|
||||
|> extrude(5, %)
|
||||
`)
|
||||
})
|
||||
`) })
|
||||
|
||||
test('Can edit a sketch that has been revolved in the same pipe', async ({
|
||||
page,
|
||||
homePage,
|
||||
}) => {
|
||||
const u = await getUtils(page)
|
||||
test('Can edit a sketch that has been revolved in the same pipe', async ({ page, homePage }) => { const u = await getUtils(page)
|
||||
await page.addInitScript(async () => {
|
||||
localStorage.setItem(
|
||||
'persistCode',
|
||||
@ -547,7 +516,7 @@ test.describe('Sketch tests', () => {
|
||||
|> line([12.73, -0.09], %)
|
||||
|> tangentialArcTo([24.95, -5.38], %)
|
||||
|> close(%)
|
||||
|> revolve({ axis = "X",}, %)`
|
||||
|> revolve({ axis: "X",}, %)`
|
||||
)
|
||||
})
|
||||
|
||||
@ -633,13 +602,11 @@ test.describe('Sketch tests', () => {
|
||||
|> tangentialArcTo([24.95, -5.38], %)
|
||||
|> line([1.97, 2.06], %)
|
||||
|> close(%)
|
||||
|> revolve({ axis = "X" }, %)`)
|
||||
})
|
||||
test('Can add multiple sketches', async ({ page, homePage }) => {
|
||||
const u = await getUtils(page)
|
||||
|> revolve({ axis: "X" }, %)`) })
|
||||
test('Can add multiple sketches', async ({ page, homePage }) => { const u = await getUtils(page)
|
||||
|
||||
const viewportSize = { width: 1200, height: 500 }
|
||||
await page.setViewportSize(viewportSize)
|
||||
await page.setBodyDimensions(viewportSize)
|
||||
|
||||
await homePage.goToModelingScene()
|
||||
await u.openDebugPanel()
|
||||
@ -727,8 +694,7 @@ test.describe('Sketch tests', () => {
|
||||
await page.getByRole('button', { name: 'Exit Sketch' }).click()
|
||||
await u.expectCmdLog('[data-message-type="execution-done"]')
|
||||
await u.updateCamPosition([100, 100, 100])
|
||||
await u.clearCommandLogs()
|
||||
})
|
||||
await u.clearCommandLogs() })
|
||||
test.describe('Snap to close works (at any scale)', () => {
|
||||
const doSnapAtDifferentScales = async (
|
||||
page: any,
|
||||
@ -736,7 +702,7 @@ test.describe('Sketch tests', () => {
|
||||
scale = 1
|
||||
) => {
|
||||
const u = await getUtils(page)
|
||||
await page.setViewportSize({ width: 1200, height: 500 })
|
||||
await page.setBodyDimensions({ width: 1200, height: 500 })
|
||||
|
||||
await u.openDebugPanel()
|
||||
|
||||
@ -819,21 +785,13 @@ test.describe('Sketch tests', () => {
|
||||
await u.expectCmdLog('[data-message-type="execution-done"]')
|
||||
await u.removeCurrentCode()
|
||||
}
|
||||
test('[0, 100, 100]', async ({ page, homePage }) => {
|
||||
await homePage.goToModelingScene()
|
||||
await doSnapAtDifferentScales(page, [0, 100, 100], 0.01)
|
||||
})
|
||||
test('[0, 100, 100]', async ({ page, homePage }) => { await homePage.goToModelingScene()
|
||||
await doSnapAtDifferentScales(page, [0, 100, 100], 0.01) })
|
||||
|
||||
test('[0, 10000, 10000]', async ({ page, homePage }) => {
|
||||
await homePage.goToModelingScene()
|
||||
await doSnapAtDifferentScales(page, [0, 10000, 10000])
|
||||
test('[0, 10000, 10000]', async ({ page, homePage }) => { await homePage.goToModelingScene()
|
||||
await doSnapAtDifferentScales(page, [0, 10000, 10000]) })
|
||||
})
|
||||
})
|
||||
test('exiting a close extrude, has the extrude button enabled ready to go', async ({
|
||||
page,
|
||||
homePage,
|
||||
}) => {
|
||||
// this was a regression https://github.com/KittyCAD/modeling-app/issues/2832
|
||||
test('exiting a close extrude, has the extrude button enabled ready to go', async ({ page, homePage }) => { // this was a regression https://github.com/KittyCAD/modeling-app/issues/2832
|
||||
await page.addInitScript(async () => {
|
||||
localStorage.setItem(
|
||||
'persistCode',
|
||||
@ -843,13 +801,13 @@ test.describe('Sketch tests', () => {
|
||||
|> line([1.02, -1.32], %, $seg01)
|
||||
|> line([-1.01, -0.77], %)
|
||||
|> lineTo([profileStartX(%), profileStartY(%)], %)
|
||||
|> close(%)
|
||||
`
|
||||
|> close(%)
|
||||
`
|
||||
)
|
||||
})
|
||||
|
||||
const u = await getUtils(page)
|
||||
await page.setViewportSize({ width: 1200, height: 500 })
|
||||
await page.setBodyDimensions({ width: 1200, height: 500 })
|
||||
|
||||
await homePage.goToModelingScene()
|
||||
|
||||
@ -885,10 +843,8 @@ test.describe('Sketch tests', () => {
|
||||
page.getByRole('button', { name: 'selection : 1 face', exact: false })
|
||||
).toBeVisible({
|
||||
timeout: 10_000,
|
||||
})
|
||||
})
|
||||
test("Existing sketch with bad code delete user's code", async ({ page, homePage }) => {
|
||||
// this was a regression https://github.com/KittyCAD/modeling-app/issues/2832
|
||||
}) })
|
||||
test("Existing sketch with bad code delete user's code", async ({ page, homePage }) => { // this was a regression https://github.com/KittyCAD/modeling-app/issues/2832
|
||||
await page.addInitScript(async () => {
|
||||
localStorage.setItem(
|
||||
'persistCode',
|
||||
@ -899,13 +855,13 @@ test.describe('Sketch tests', () => {
|
||||
|> line([-1.01, -0.77], %)
|
||||
|> lineTo([profileStartX(%), profileStartY(%)], %)
|
||||
|> close(%)
|
||||
extrude001 = extrude(5, sketch001)
|
||||
`
|
||||
extrude001 = extrude(5, sketch001)
|
||||
`
|
||||
)
|
||||
})
|
||||
|
||||
const u = await getUtils(page)
|
||||
await page.setViewportSize({ width: 1200, height: 500 })
|
||||
await page.setBodyDimensions({ width: 1200, height: 500 })
|
||||
|
||||
await homePage.goToModelingScene()
|
||||
|
||||
@ -939,121 +895,12 @@ extrude001 = extrude(5, sketch001)
|
||||
|> line([-1.01, -0.77], %)
|
||||
|> lineTo([profileStartX(%), profileStartY(%)], %)
|
||||
|> close(%)
|
||||
extrude001 = extrude(5, sketch001)
|
||||
sketch002 = startSketchOn(extrude001, 'END')
|
||||
extrude001 = extrude(5, sketch001)
|
||||
sketch002 = startSketchOn(extrude001, 'END')
|
||||
|>
|
||||
`.replace(/\s/g, '')
|
||||
)
|
||||
})
|
||||
|
||||
/* TODO: once we fix bug turn on.
|
||||
test('empty-scene default-planes act as expected when spaces in file', async ({
|
||||
page,
|
||||
browserName,
|
||||
}) => {
|
||||
|
||||
const u = await getUtils(page)
|
||||
await page.setViewportSize({ width: 1200, height: 500 })
|
||||
|
||||
await u.waitForAuthSkipAppStart()
|
||||
|
||||
await u.openDebugPanel()
|
||||
await u.expectCmdLog('[data-message-type="execution-done"]')
|
||||
await u.closeDebugPanel()
|
||||
|
||||
const XYPlanePoint = { x: 774, y: 116 } as const
|
||||
const unHoveredColor: [number, number, number] = [47, 47, 93]
|
||||
expect(
|
||||
await u.getGreatestPixDiff(XYPlanePoint, unHoveredColor)
|
||||
).toBeLessThan(8)
|
||||
|
||||
await page.mouse.move(XYPlanePoint.x, XYPlanePoint.y)
|
||||
await page.waitForTimeout(200)
|
||||
|
||||
// color should not change for having been hovered
|
||||
expect(
|
||||
await u.getGreatestPixDiff(XYPlanePoint, unHoveredColor)
|
||||
).toBeLessThan(8)
|
||||
|
||||
await u.openAndClearDebugPanel()
|
||||
|
||||
// Fill with spaces
|
||||
await u.codeLocator.fill(`
|
||||
`)
|
||||
|
||||
await u.openDebugPanel()
|
||||
await u.expectCmdLog('[data-message-type="execution-done"]')
|
||||
await u.closeDebugPanel()
|
||||
|
||||
expect(
|
||||
await u.getGreatestPixDiff(XYPlanePoint, unHoveredColor)
|
||||
).toBeLessThan(8)
|
||||
|
||||
await page.mouse.move(XYPlanePoint.x, XYPlanePoint.y)
|
||||
await page.waitForTimeout(200)
|
||||
|
||||
// color should not change for having been hovered
|
||||
expect(
|
||||
await u.getGreatestPixDiff(XYPlanePoint, unHoveredColor)
|
||||
).toBeLessThan(8)
|
||||
})
|
||||
|
||||
test('empty-scene default-planes act as expected when only code comments in file', async ({
|
||||
page,
|
||||
browserName,
|
||||
}) => {
|
||||
|
||||
const u = await getUtils(page)
|
||||
await page.setViewportSize({ width: 1200, height: 500 })
|
||||
|
||||
await u.waitForAuthSkipAppStart()
|
||||
|
||||
await u.openDebugPanel()
|
||||
await u.expectCmdLog('[data-message-type="execution-done"]')
|
||||
await u.closeDebugPanel()
|
||||
|
||||
const XYPlanePoint = { x: 774, y: 116 } as const
|
||||
const unHoveredColor: [number, number, number] = [47, 47, 93]
|
||||
expect(
|
||||
await u.getGreatestPixDiff(XYPlanePoint, unHoveredColor)
|
||||
).toBeLessThan(8)
|
||||
|
||||
await page.mouse.move(XYPlanePoint.x, XYPlanePoint.y)
|
||||
await page.waitForTimeout(200)
|
||||
|
||||
// color should not change for having been hovered
|
||||
expect(
|
||||
await u.getGreatestPixDiff(XYPlanePoint, unHoveredColor)
|
||||
).toBeLessThan(8)
|
||||
|
||||
await u.openAndClearDebugPanel()
|
||||
|
||||
// Fill with spaces
|
||||
await u.codeLocator.fill(`// this is a code comments ya nerds
|
||||
`)
|
||||
|
||||
await u.openDebugPanel()
|
||||
await u.expectCmdLog('[data-message-type="execution-done"]')
|
||||
await u.closeDebugPanel()
|
||||
|
||||
expect(
|
||||
await u.getGreatestPixDiff(XYPlanePoint, unHoveredColor)
|
||||
).toBeLessThan(8)
|
||||
|
||||
await page.mouse.move(XYPlanePoint.x, XYPlanePoint.y)
|
||||
await page.waitForTimeout(200)
|
||||
|
||||
// color should not change for having been hovered
|
||||
expect(
|
||||
await u.getGreatestPixDiff(XYPlanePoint, unHoveredColor)
|
||||
).toBeLessThan(8)
|
||||
})*/
|
||||
|
||||
test('empty-scene default-planes act as expected', async ({
|
||||
page,
|
||||
homePage,
|
||||
}) => {
|
||||
/**
|
||||
`.replace(/\s/g, '')
|
||||
) })
|
||||
test('empty-scene default-planes act as expected', async ({ page, homePage }) => { /**
|
||||
* Tests the following things
|
||||
* 1) The the planes are there on load because the scene is empty
|
||||
* 2) The planes don't changes color when hovered initially
|
||||
@ -1092,7 +939,7 @@ sketch002 = startSketchOn(extrude001, 'END')
|
||||
|> line([20, 0], %)
|
||||
|> line([0, 20], %)
|
||||
|> xLine(-20, %)
|
||||
`)
|
||||
`)
|
||||
|
||||
await u.expectCmdLog('[data-message-type="execution-done"]')
|
||||
|
||||
@ -1129,7 +976,7 @@ sketch002 = startSketchOn(extrude001, 'END')
|
||||
await expect(u.codeLocator).toHaveText(`sketch001 = startSketchOn('XZ')
|
||||
|> startProfileAt([11.8, 9.09], %)
|
||||
|> line([3.39, -3.39], %)
|
||||
`)
|
||||
`)
|
||||
|
||||
await page.addInitScript(async () => {
|
||||
localStorage.setItem(
|
||||
@ -1137,7 +984,7 @@ sketch002 = startSketchOn(extrude001, 'END')
|
||||
`sketch001 = startSketchOn('XZ')
|
||||
|> startProfileAt([11.8, 9.09], %)
|
||||
|> line([3.39, -3.39], %)
|
||||
`
|
||||
`
|
||||
)
|
||||
})
|
||||
|
||||
@ -1148,15 +995,10 @@ sketch002 = startSketchOn(extrude001, 'END')
|
||||
// expect there to be no planes on load since there's something in the scene
|
||||
expect(
|
||||
await u.getGreatestPixDiff(XYPlanePoint, noPlanesColor)
|
||||
).toBeLessThan(3)
|
||||
})
|
||||
).toBeLessThan(3) })
|
||||
|
||||
test('Can attempt to sketch on revolved face', async ({
|
||||
page,
|
||||
homePage,
|
||||
}) => {
|
||||
const u = await getUtils(page)
|
||||
await page.setViewportSize({ width: 1200, height: 500 })
|
||||
test('Can attempt to sketch on revolved face', async ({ page, homePage }) => { const u = await getUtils(page)
|
||||
await page.setBodyDimensions({ width: 1200, height: 500 })
|
||||
|
||||
await page.addInitScript(async () => {
|
||||
localStorage.setItem(
|
||||
@ -1168,11 +1010,11 @@ sketch002 = startSketchOn(extrude001, 'END')
|
||||
fn lug = (origin, length, diameter, plane) => {
|
||||
lugSketch = startSketchOn(plane)
|
||||
|> startProfileAt([origin[0] + lugDiameter / 2, origin[1]], %)
|
||||
|> angledLineOfYLength({ angle = 60, length = lugHeadLength }, %)
|
||||
|> angledLineOfYLength({ angle: 60, length: lugHeadLength }, %)
|
||||
|> xLineTo(0 + .001, %)
|
||||
|> yLineTo(0, %)
|
||||
|> close(%)
|
||||
|> revolve({ axis = "Y" }, %)
|
||||
|> revolve({ axis: "Y" }, %)
|
||||
|
||||
return lugSketch
|
||||
}
|
||||
@ -1208,15 +1050,10 @@ sketch002 = startSketchOn(extrude001, 'END')
|
||||
await expect(
|
||||
page.getByRole('button', { name: 'line Line', exact: true })
|
||||
).toHaveAttribute('aria-pressed', 'true')
|
||||
}).toPass({ timeout: 40_000, intervals: [1_000] })
|
||||
})
|
||||
}).toPass({ timeout: 40_000, intervals: [1_000] }) })
|
||||
|
||||
test('Can sketch on face when user defined function was used in the sketch', async ({
|
||||
page,
|
||||
homePage,
|
||||
}) => {
|
||||
const u = await getUtils(page)
|
||||
await page.setViewportSize({ width: 1200, height: 500 })
|
||||
test('Can sketch on face when user defined function was used in the sketch', async ({ page, homePage }) => { const u = await getUtils(page)
|
||||
await page.setBodyDimensions({ width: 1200, height: 500 })
|
||||
|
||||
// Checking for a regression that performs a sketch when a user defined function
|
||||
// is declared at the top of the file and used in the sketch that is being drawn on.
|
||||
@ -1227,16 +1064,16 @@ sketch002 = startSketchOn(extrude001, 'END')
|
||||
'persistCode',
|
||||
`fn in2mm = (inches) => {
|
||||
return inches * 25.4
|
||||
}
|
||||
}
|
||||
|
||||
const railTop = in2mm(.748)
|
||||
const railSide = in2mm(.024)
|
||||
const railBaseWidth = in2mm(.612)
|
||||
const railWideWidth = in2mm(.835)
|
||||
const railBaseLength = in2mm(.200)
|
||||
const railClampable = in2mm(.200)
|
||||
const railTop = in2mm(.748)
|
||||
const railSide = in2mm(.024)
|
||||
const railBaseWidth = in2mm(.612)
|
||||
const railWideWidth = in2mm(.835)
|
||||
const railBaseLength = in2mm(.200)
|
||||
const railClampable = in2mm(.200)
|
||||
|
||||
const rail = startSketchOn('XZ')
|
||||
const rail = startSketchOn('XZ')
|
||||
|> startProfileAt([
|
||||
-railTop / 2,
|
||||
railClampable + railBaseLength
|
||||
@ -1305,8 +1142,7 @@ const rail = startSketchOn('XZ')
|
||||
// Check execution is done
|
||||
await u.openDebugPanel()
|
||||
await u.expectCmdLog('[data-message-type="execution-done"]')
|
||||
await u.closeDebugPanel()
|
||||
})
|
||||
await u.closeDebugPanel() })
|
||||
})
|
||||
|
||||
test.describe('Sketch mode should be toleratant to syntax errors', () => {
|
||||
@ -1314,7 +1150,14 @@ test.describe('Sketch mode should be toleratant to syntax errors', () => {
|
||||
'adding a syntax error, recovers after fixing',
|
||||
{ tag: ['@skipWin'] },
|
||||
async ({ page, homePage, context, scene, editor, toolbar }) => {
|
||||
const file = await fs.readFile(path.resolve(__dirname, '../../', './src/wasm-lib/tests/executor/inputs/e2e-can-sketch-on-chamfer.kcl'), 'utf-8')
|
||||
const file = await fs.readFile(
|
||||
path.resolve(
|
||||
__dirname,
|
||||
'../../',
|
||||
'./src/wasm-lib/tests/executor/inputs/e2e-can-sketch-on-chamfer.kcl'
|
||||
),
|
||||
'utf-8'
|
||||
)
|
||||
await context.addInitScript((file) => {
|
||||
localStorage.setItem('persistCode', file)
|
||||
}, file)
|
||||
@ -1369,19 +1212,26 @@ test.describe('Sketch mode should be toleratant to syntax errors', () => {
|
||||
)
|
||||
})
|
||||
|
||||
test2.describe(`Sketching with offset planes`, () => {
|
||||
test2(
|
||||
test.describe(`Sketching with offset planes`, () => {
|
||||
test(
|
||||
`Can select an offset plane to sketch on`,
|
||||
async ({ app, scene, toolbar, editor }) => {
|
||||
async ({ context, page, scene, toolbar, editor, homePage }) => {
|
||||
// We seed the scene with a single offset plane
|
||||
await app.initialise(`offsetPlane001 = offsetPlane("XY", 10)`)
|
||||
await context.addInitScript(() => {
|
||||
localStorage.setItem(
|
||||
'persistCode',
|
||||
`offsetPlane001 = offsetPlane("XY", 10)`
|
||||
)
|
||||
})
|
||||
|
||||
homePage.goToModelingScene()
|
||||
|
||||
const [planeClick, planeHover] = scene.makeMouseHelpers(650, 200)
|
||||
|
||||
await test2.step(`Start sketching on the offset plane`, async () => {
|
||||
await test.step(`Start sketching on the offset plane`, async () => {
|
||||
await toolbar.startSketchPlaneSelection()
|
||||
|
||||
await test2.step(`Hovering should highlight code`, async () => {
|
||||
await test.step(`Hovering should highlight code`, async () => {
|
||||
await planeHover()
|
||||
await editor.expectState({
|
||||
activeLines: [`offsetPlane001=offsetPlane("XY",10)`],
|
||||
@ -1390,13 +1240,13 @@ test2.describe(`Sketching with offset planes`, () => {
|
||||
})
|
||||
})
|
||||
|
||||
await test2.step(
|
||||
await test.step(
|
||||
`Clicking should select the plane and enter sketch mode`,
|
||||
async () => {
|
||||
await planeClick()
|
||||
// Have to wait for engine-side animation to finish
|
||||
await app.page.waitForTimeout(600)
|
||||
await expect2(toolbar.lineBtn).toBeEnabled()
|
||||
await page.waitForTimeout(600)
|
||||
await expect(toolbar.lineBtn).toBeEnabled()
|
||||
await editor.expectEditor.toContain('startSketchOn(offsetPlane001)')
|
||||
await editor.expectState({
|
||||
activeLines: [`offsetPlane001=offsetPlane("XY",10)`],
|
||||
|
@ -416,6 +416,10 @@ export async function getUtils(page: Page, test_?: typeof test) {
|
||||
.boundingBox({ timeout: 5_000 })
|
||||
.then((box) => ({ ...box, x: box?.x || 0, y: box?.y || 0 })),
|
||||
codeLocator: page.locator('.cm-content'),
|
||||
crushKclCodeIntoOneLineAndThenMaybeSome: async () => {
|
||||
const code = await page.locator('.cm-content').innerText()
|
||||
return code.replaceAll(' ', '').replaceAll("\n", '')
|
||||
},
|
||||
normalisedEditorCode: async () => {
|
||||
const code = await page.locator('.cm-content').innerText()
|
||||
return normaliseKclNumbers(code)
|
||||
|
@ -182,8 +182,11 @@ test.describe('Testing segment overlays', () => {
|
||||
await expect(page.locator('.cm-content')).toContainText(expectFinal)
|
||||
}
|
||||
test.setTimeout(120000)
|
||||
|
||||
test('for segments [line, angledLine, lineTo, xLineTo]', async ({ page, homePage }) => { await page.addInitScript(async () => {
|
||||
test('for segments [line, angledLine, lineTo, xLineTo]', async ({
|
||||
page,
|
||||
homePage,
|
||||
}) => {
|
||||
await page.addInitScript(async () => {
|
||||
localStorage.setItem(
|
||||
'persistCode',
|
||||
`part001 = startSketchOn('XZ')
|
||||
@ -341,8 +344,10 @@ test.describe('Testing segment overlays', () => {
|
||||
ang: ang + 180,
|
||||
steps: 8,
|
||||
locator: '[data-overlay-toolbar-index="3"]',
|
||||
}) })
|
||||
test('for segments [yLineTo, xLine]', async ({ page, homePage }) => { await page.addInitScript(async () => {
|
||||
})
|
||||
})
|
||||
test('for segments [yLineTo, xLine]', async ({ page, homePage }) => {
|
||||
await page.addInitScript(async () => {
|
||||
localStorage.setItem(
|
||||
'persistCode',
|
||||
`yRel001 = -14
|
||||
@ -414,8 +419,13 @@ test.describe('Testing segment overlays', () => {
|
||||
steps: 10,
|
||||
ang: ang + 180,
|
||||
locator: '[data-overlay-toolbar-index="5"]',
|
||||
}) })
|
||||
test('for segments [yLine, angledLineOfXLength, angledLineOfYLength]', async ({ page, homePage }) => { await page.addInitScript(async () => {
|
||||
})
|
||||
})
|
||||
test('for segments [yLine, angledLineOfXLength, angledLineOfYLength]', async ({
|
||||
page,
|
||||
homePage,
|
||||
}) => {
|
||||
await page.addInitScript(async () => {
|
||||
localStorage.setItem(
|
||||
'persistCode',
|
||||
`part001 = startSketchOn('XZ')
|
||||
@ -538,8 +548,13 @@ test.describe('Testing segment overlays', () => {
|
||||
ang: ang + 180,
|
||||
steps: 7,
|
||||
locator: '[data-overlay-toolbar-index="8"]',
|
||||
}) })
|
||||
test('for segments [angledLineToX, angledLineToY, angledLineThatIntersects]', async ({ page, homePage }) => { await page.addInitScript(async () => {
|
||||
})
|
||||
})
|
||||
test('for segments [angledLineToX, angledLineToY, angledLineThatIntersects]', async ({
|
||||
page,
|
||||
homePage,
|
||||
}) => {
|
||||
await page.addInitScript(async () => {
|
||||
localStorage.setItem(
|
||||
'persistCode',
|
||||
`part001 = startSketchOn('XZ')
|
||||
@ -565,7 +580,6 @@ test.describe('Testing segment overlays', () => {
|
||||
)
|
||||
localStorage.setItem('disableAxis', 'true')
|
||||
})
|
||||
|
||||
const u = await getUtils(page)
|
||||
await page.setViewportSize({ width: 1200, height: 500 })
|
||||
|
||||
@ -693,8 +707,10 @@ test.describe('Testing segment overlays', () => {
|
||||
}, %)`,
|
||||
ang: ang + 180,
|
||||
locator: '[data-overlay-toolbar-index="11"]',
|
||||
}) })
|
||||
test('for segment [tangentialArcTo]', async ({ page, homePage }) => { await page.addInitScript(async () => {
|
||||
})
|
||||
})
|
||||
test('for segment [tangentialArcTo]', async ({ page, homePage }) => {
|
||||
await page.addInitScript(async () => {
|
||||
localStorage.setItem(
|
||||
'persistCode',
|
||||
`part001 = startSketchOn('XZ')
|
||||
@ -765,8 +781,10 @@ test.describe('Testing segment overlays', () => {
|
||||
ang: ang + 180,
|
||||
steps: 10,
|
||||
locator: '[data-overlay-toolbar-index="12"]',
|
||||
}) })
|
||||
test('for segment [circle]', async ({ page, homePage }) => { await page.addInitScript(async () => {
|
||||
})
|
||||
})
|
||||
test('for segment [circle]', async ({ page, homePage }) => {
|
||||
await page.addInitScript(async () => {
|
||||
localStorage.setItem(
|
||||
'persistCode',
|
||||
`part001 = startSketchOn('XZ')
|
||||
@ -837,7 +855,8 @@ test.describe('Testing segment overlays', () => {
|
||||
ang: ang + 105,
|
||||
steps: 10,
|
||||
locator: '[data-overlay-toolbar-index="0"]',
|
||||
}) })
|
||||
})
|
||||
})
|
||||
})
|
||||
test.describe('Testing deleting a segment', () => {
|
||||
const _deleteSegmentSequence =
|
||||
@ -877,8 +896,8 @@ test.describe('Testing segment overlays', () => {
|
||||
codeToBeDeleted
|
||||
)
|
||||
}
|
||||
|
||||
test('all segment types', async ({ page, homePage }) => { await page.addInitScript(async () => {
|
||||
test('all segment types', async ({ page, homePage }) => {
|
||||
await page.addInitScript(async () => {
|
||||
localStorage.setItem(
|
||||
'persistCode',
|
||||
`part001 = startSketchOn('XZ')
|
||||
@ -1083,7 +1102,8 @@ test.describe('Testing segment overlays', () => {
|
||||
ang: ang + 180,
|
||||
})
|
||||
|
||||
await page.waitForTimeout(200) })
|
||||
await page.waitForTimeout(200)
|
||||
})
|
||||
})
|
||||
test.describe('Testing delete with dependent segments', () => {
|
||||
const cases = [
|
||||
@ -1107,7 +1127,8 @@ test.describe('Testing segment overlays', () => {
|
||||
const isObj = lineOfInterest.includes('{ angle = 3,')
|
||||
test(`${lineOfInterest.split('(')[0]}${isObj ? '-[obj-input]' : ''}${
|
||||
doesHaveTagOutsideSketch ? '-[tagOutsideSketch]' : ''
|
||||
}`, async ({ page, homePage }) => { await page.addInitScript(
|
||||
}`, async ({ page, homePage }) => {
|
||||
await page.addInitScript(
|
||||
async ({ lineToBeDeleted, extraLine }) => {
|
||||
localStorage.setItem(
|
||||
'persistCode',
|
||||
@ -1196,7 +1217,8 @@ test.describe('Testing segment overlays', () => {
|
||||
)
|
||||
// eslint-disable-next-line jest/no-conditional-expect
|
||||
await expect(page.locator('.cm-content')).not.toContainText('seg01')
|
||||
} })
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
})
|
||||
@ -1263,7 +1285,11 @@ test.describe('Testing segment overlays', () => {
|
||||
|
||||
for (const { before, after } of cases) {
|
||||
const isObj = before.includes('{ angle: 3')
|
||||
test(`${before.split('(')[0]}${isObj ? '-[obj-input]' : ''}`, async ({ page, homePage }) => { await page.addInitScript(
|
||||
test(`${before.split('(')[0]}${isObj ? '-[obj-input]' : ''}`, async ({
|
||||
page,
|
||||
homePage,
|
||||
}) => {
|
||||
await page.addInitScript(
|
||||
async ({ lineToBeDeleted }) => {
|
||||
localStorage.setItem(
|
||||
'persistCode',
|
||||
@ -1324,7 +1350,8 @@ test.describe('Testing segment overlays', () => {
|
||||
await expect(page.locator('.cm-content')).toContainText(after)
|
||||
// check the cursor was left in the correct place after transform
|
||||
await expect(page.locator('.cm-activeLine')).toHaveText('|> ' + after)
|
||||
await expect(page.getByTestId('segment-overlay')).toHaveCount(3) })
|
||||
await expect(page.getByTestId('segment-overlay')).toHaveCount(3)
|
||||
})
|
||||
}
|
||||
})
|
||||
})
|
||||
|
@ -5,10 +5,6 @@ import { Coords2d } from 'lang/std/sketch'
|
||||
import { KCL_DEFAULT_LENGTH } from 'lib/constants'
|
||||
import { uuidv4 } from 'lib/utils'
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
test.describe('Testing selections', () => {
|
||||
test.setTimeout(90_000)
|
||||
test('Selections work on fresh and edited sketch', { tag: ['@skipWin'] }, async ({ page, homePage }) => { // Skip on windows its being weird.
|
||||
|
37
to-electron.sh
Executable file
37
to-electron.sh
Executable file
@ -0,0 +1,37 @@
|
||||
#!/bin/sh
|
||||
|
||||
FILE="$1"
|
||||
|
||||
sg run --update-all \
|
||||
--pattern 'await $_A.waitForAuthSkipAppStart()' \
|
||||
--rewrite 'await homePage.goToModelingScene()' \
|
||||
"$FILE"
|
||||
|
||||
sg --update-all \
|
||||
--pattern 'test($DESC, async ({ page, $$$ARGS }) => { $$$BODY })' \
|
||||
--rewrite 'test($DESC, async ({ page, $$$ARGS homePage }) => { $$$BODY })' \
|
||||
"$FILE"
|
||||
|
||||
sg --update-all \
|
||||
--pattern 'test($DESC, async ({ page }) => { $$$BODY })' \
|
||||
--rewrite 'test($DESC, async ({ page, homePage }) => { $$$BODY })' \
|
||||
"$FILE"
|
||||
|
||||
sg --update-all \
|
||||
--pattern 'test($DESC, $OPT, async ({ page }) => { $$$BODY })' \
|
||||
--rewrite 'test($DESC, $OPT, async ({ page, homePage }) => { $$$BODY })' \
|
||||
"$FILE"
|
||||
|
||||
sg --update-all --pattern 'test.beforeEach($$$)' --rewrite '' "$FILE"
|
||||
sg --update-all --pattern 'test.afterEach($$$)' --rewrite '' "$FILE"
|
||||
|
||||
# Unfortunately some tests are tied to the viewport size.
|
||||
# sg --update-all --pattern 'await page.setViewportSize($$$ARGS)' --rewrite '' "$FILE"
|
||||
sg --update-all --pattern "await page.goto('/')" --rewrite '' "$FILE"
|
||||
|
||||
sg --update-all --pattern 'await page.setViewportSize($$$ARGS)' --rewrite 'await page.setBodyDimensions($$$ARGS)' "$FILE"
|
||||
|
||||
sed -i -e 's/@playwright\/test/.\/zoo-test/' "$FILE"
|
||||
sed -i -e 's/, setup, tearDown,//' "$FILE"
|
||||
sed -i -e 's/setup, tearDown,//' "$FILE"
|
||||
sed -i -e 's/setup, tearDown//' "$FILE"
|
Reference in New Issue
Block a user