Go back to fix up sketch-tests test

This commit is contained in:
49lf
2024-11-21 12:00:32 -05:00
parent 634cd3c5da
commit b1616f9c6b
5 changed files with 1807 additions and 1893 deletions

View File

@ -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)`],

View File

@ -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)

View File

@ -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)
})
}
})
})

View File

@ -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
View 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"