Got testing-segment-overlays passing

This commit is contained in:
49lf
2024-11-20 13:06:46 -05:00
parent 5f3402990e
commit 1e5f89bf65

View File

@ -1,17 +1,9 @@
import { test, expect, Page } from '@playwright/test' import { test, expect, Page } from './zoo-test'
import { deg, getUtils, setup, tearDown, wiggleMove } from './test-utils' import { deg, getUtils, wiggleMove } from './test-utils'
import { LineInputsType } from 'lang/std/sketchcombos' import { LineInputsType } from 'lang/std/sketchcombos'
import { uuidv4 } from 'lib/utils' import { uuidv4 } from 'lib/utils'
test.beforeEach(async ({ context, page }, testInfo) => {
await setup(context, page, testInfo)
})
test.afterEach(async ({ page }, testInfo) => {
await tearDown(page, testInfo)
})
test.describe('Testing segment overlays', () => { test.describe('Testing segment overlays', () => {
test.describe('Hover over a segment should show its overlay, hovering over the input overlays should show its popover, clicking the input overlay should constrain/unconstrain it:\nfor the following segments', () => { test.describe('Hover over a segment should show its overlay, hovering over the input overlays should show its popover, clicking the input overlay should constrain/unconstrain it:\nfor the following segments', () => {
/** /**
@ -190,29 +182,27 @@ test.describe('Testing segment overlays', () => {
await expect(page.locator('.cm-content')).toContainText(expectFinal) await expect(page.locator('.cm-content')).toContainText(expectFinal)
} }
test.setTimeout(120000) test.setTimeout(120000)
test('for segments [line, angledLine, lineTo, xLineTo]', async ({
page, test('for segments [line, angledLine, lineTo, xLineTo]', async ({ page, homePage }) => { await page.addInitScript(async () => {
}) => {
await page.addInitScript(async () => {
localStorage.setItem( localStorage.setItem(
'persistCode', 'persistCode',
`part001 = startSketchOn('XZ') `part001 = startSketchOn('XZ')
|> startProfileAt([5 + 0, 20 + 0], %) |> startProfileAt([5 + 0, 20 + 0], %)
|> line([0.5, -14 + 0], %) |> line([0.5, -14 + 0], %)
|> angledLine({ angle = 3 + 0, length = 32 + 0 }, %) |> angledLine({ angle: 3 + 0, length: 32 + 0 }, %)
|> lineTo([5 + 33, 20 + 11.5 + 0], %) |> lineTo([5 + 33, 20 + 11.5 + 0], %)
|> xLineTo(5 + 9 - 5, %) |> xLineTo(5 + 9 - 5, %)
|> yLineTo(20 + -10.77, %, $a) |> yLineTo(20 + -10.77, %, $a)
|> xLine(26.04, %) |> xLine(26.04, %)
|> yLine(21.14 + 0, %) |> yLine(21.14 + 0, %)
|> angledLineOfXLength({ angle = 181 + 0, length = 23.14 }, %) |> angledLineOfXLength({ angle: 181 + 0, length: 23.14 }, %)
|> angledLineOfYLength({ angle = -91, length = 19 + 0 }, %) |> angledLineOfYLength({ angle: -91, length: 19 + 0 }, %)
|> angledLineToX({ angle = 3 + 0, to = 5 + 26 }, %) |> angledLineToX({ angle: 3 + 0, to: 5 + 26 }, %)
|> angledLineToY({ angle = 89, to = 20 + 9.14 + 0 }, %) |> angledLineToY({ angle: 89, to: 20 + 9.14 + 0 }, %)
|> angledLineThatIntersects({ |> angledLineThatIntersects({
angle = 4.14, angle: 4.14,
intersectTag = a, intersectTag: a,
offset = 9 offset: 9
}, %) }, %)
|> tangentialArcTo([5 + 3.14 + 13, 20 + 3.14], %) |> tangentialArcTo([5 + 3.14 + 13, 20 + 3.14], %)
` `
@ -221,7 +211,7 @@ test.describe('Testing segment overlays', () => {
const u = await getUtils(page) const u = await getUtils(page)
await page.setViewportSize({ width: 1200, height: 500 }) await page.setViewportSize({ width: 1200, height: 500 })
await u.waitForAuthSkipAppStart() await homePage.goToModelingScene()
// wait for execution done // wait for execution done
await u.openDebugPanel() await u.openDebugPanel()
@ -292,10 +282,9 @@ test.describe('Testing segment overlays', () => {
hoverPos: { x: angledLine.x, y: angledLine.y }, hoverPos: { x: angledLine.x, y: angledLine.y },
constraintType: 'angle', constraintType: 'angle',
expectBeforeUnconstrained: expectBeforeUnconstrained:
'angledLine({ angle = 3 + 0, length = 32 + 0 }, %)', 'angledLine({ angle: 3 + 0, length: 32 + 0 }, %)',
expectAfterUnconstrained: expectAfterUnconstrained: 'angledLine({ angle: 3, length: 32 + 0 }, %)',
'angledLine({ angle = 3, length = 32 + 0 }, %)', expectFinal: 'angledLine({ angle: angle001, length: 32 + 0 }, %)',
expectFinal: 'angledLine({ angle = angle001, length = 32 + 0 }, %)',
ang: ang + 180, ang: ang + 180,
locator: '[data-overlay-toolbar-index="1"]', locator: '[data-overlay-toolbar-index="1"]',
}) })
@ -304,10 +293,10 @@ test.describe('Testing segment overlays', () => {
hoverPos: { x: angledLine.x, y: angledLine.y }, hoverPos: { x: angledLine.x, y: angledLine.y },
constraintType: 'length', constraintType: 'length',
expectBeforeUnconstrained: expectBeforeUnconstrained:
'angledLine({ angle = angle001, length = 32 + 0 }, %)', 'angledLine({ angle: angle001, length: 32 + 0 }, %)',
expectAfterUnconstrained: expectAfterUnconstrained:
'angledLine({ angle = angle001, length = 32 }, %)', 'angledLine({ angle: angle001, length: 32 }, %)',
expectFinal: 'angledLine({ angle = angle001, length = len001 }, %)', expectFinal: 'angledLine({ angle: angle001, length: len001 }, %)',
ang: ang + 180, ang: ang + 180,
locator: '[data-overlay-toolbar-index="1"]', locator: '[data-overlay-toolbar-index="1"]',
}) })
@ -352,36 +341,34 @@ test.describe('Testing segment overlays', () => {
ang: ang + 180, ang: ang + 180,
steps: 8, steps: 8,
locator: '[data-overlay-toolbar-index="3"]', 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 }) => {
await page.addInitScript(async () => {
localStorage.setItem( localStorage.setItem(
'persistCode', 'persistCode',
`yRel001 = -14 `yRel001 = -14
xRel001 = 0.5 xRel001 = 0.5
angle001 = 3 angle001 = 3
len001 = 32 len001 = 32
yAbs001 = 11.5 yAbs001 = 11.5
xAbs001 = 33 xAbs001 = 33
xAbs002 = 4 xAbs002 = 4
part001 = startSketchOn('XZ') part001 = startSketchOn('XZ')
|> startProfileAt([0, 0], %) |> startProfileAt([0, 0], %)
|> line([0.5, yRel001], %) |> line([0.5, yRel001], %)
|> angledLine({ angle = angle001, length = len001 }, %) |> angledLine({ angle: angle001, length: len001 }, %)
|> lineTo([33, yAbs001], %) |> lineTo([33, yAbs001], %)
|> xLineTo(xAbs002, %) |> xLineTo(xAbs002, %)
|> yLineTo(-10.77, %, $a) |> yLineTo(-10.77, %, $a)
|> xLine(26.04, %) |> xLine(26.04, %)
|> yLine(21.14 + 0, %) |> yLine(21.14 + 0, %)
|> angledLineOfXLength({ angle = 181 + 0, length = 23.14 }, %) |> angledLineOfXLength({ angle: 181 + 0, length: 23.14 }, %)
` `
) )
}) })
const u = await getUtils(page) const u = await getUtils(page)
await page.setViewportSize({ width: 1200, height: 500 }) await page.setViewportSize({ width: 1200, height: 500 })
await u.waitForAuthSkipAppStart() await homePage.goToModelingScene()
// wait for execution done // wait for execution done
await u.openDebugPanel() await u.openDebugPanel()
@ -427,31 +414,27 @@ part001 = startSketchOn('XZ')
steps: 10, steps: 10,
ang: ang + 180, ang: ang + 180,
locator: '[data-overlay-toolbar-index="5"]', 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,
}) => {
await page.addInitScript(async () => {
localStorage.setItem( localStorage.setItem(
'persistCode', 'persistCode',
`part001 = startSketchOn('XZ') `part001 = startSketchOn('XZ')
|> startProfileAt([0, 0], %) |> startProfileAt([0, 0], %)
|> line([0.5, -14 + 0], %) |> line([0.5, -14 + 0], %)
|> angledLine({ angle = 3 + 0, length = 32 + 0 }, %) |> angledLine({ angle: 3 + 0, length: 32 + 0 }, %)
|> lineTo([33, 11.5 + 0], %) |> lineTo([33, 11.5 + 0], %)
|> xLineTo(9 - 5, %) |> xLineTo(9 - 5, %)
|> yLineTo(-10.77, %, $a) |> yLineTo(-10.77, %, $a)
|> xLine(26.04, %) |> xLine(26.04, %)
|> yLine(21.14 + 0, %) |> yLine(21.14 + 0, %)
|> angledLineOfXLength({ angle = 181 + 0, length = 23.14 }, %) |> angledLineOfXLength({ angle: 181 + 0, length: 23.14 }, %)
|> angledLineOfYLength({ angle = -91, length = 19 + 0 }, %) |> angledLineOfYLength({ angle: -91, length: 19 + 0 }, %)
|> angledLineToX({ angle = 3 + 0, to = 26 }, %) |> angledLineToX({ angle: 3 + 0, to: 26 }, %)
|> angledLineToY({ angle = 89, to = 9.14 + 0 }, %) |> angledLineToY({ angle: 89, to: 9.14 + 0 }, %)
|> angledLineThatIntersects({ |> angledLineThatIntersects({
angle = 4.14, angle: 4.14,
intersectTag = a, intersectTag: a,
offset = 9 offset: 9
}, %) }, %)
|> tangentialArcTo([3.14 + 13, 3.14], %) |> tangentialArcTo([3.14 + 13, 3.14], %)
` `
@ -461,7 +444,7 @@ part001 = startSketchOn('XZ')
const u = await getUtils(page) const u = await getUtils(page)
await page.setViewportSize({ width: 1200, height: 500 }) await page.setViewportSize({ width: 1200, height: 500 })
await u.waitForAuthSkipAppStart() await homePage.goToModelingScene()
// wait for execution done // wait for execution done
await u.openDebugPanel() await u.openDebugPanel()
@ -503,11 +486,11 @@ part001 = startSketchOn('XZ')
hoverPos: { x: angledLineOfXLength.x, y: angledLineOfXLength.y }, hoverPos: { x: angledLineOfXLength.x, y: angledLineOfXLength.y },
constraintType: 'angle', constraintType: 'angle',
expectBeforeUnconstrained: expectBeforeUnconstrained:
'angledLineOfXLength({ angle = 181 + 0, length = 23.14 }, %)', 'angledLineOfXLength({ angle: 181 + 0, length: 23.14 }, %)',
expectAfterUnconstrained: expectAfterUnconstrained:
'angledLineOfXLength({ angle = -179, length = 23.14 }, %)', 'angledLineOfXLength({ angle: -179, length: 23.14 }, %)',
expectFinal: expectFinal:
'angledLineOfXLength({ angle = angle001, length = 23.14 }, %)', 'angledLineOfXLength({ angle: angle001, length: 23.14 }, %)',
ang: ang + 180, ang: ang + 180,
locator: '[data-overlay-toolbar-index="7"]', locator: '[data-overlay-toolbar-index="7"]',
}) })
@ -516,11 +499,11 @@ part001 = startSketchOn('XZ')
hoverPos: { x: angledLineOfXLength.x, y: angledLineOfXLength.y }, hoverPos: { x: angledLineOfXLength.x, y: angledLineOfXLength.y },
constraintType: 'xRelative', constraintType: 'xRelative',
expectBeforeUnconstrained: expectBeforeUnconstrained:
'angledLineOfXLength({ angle = angle001, length = 23.14 }, %)', 'angledLineOfXLength({ angle: angle001, length: 23.14 }, %)',
expectAfterUnconstrained: expectAfterUnconstrained:
'angledLineOfXLength({ angle = angle001, length = xRel001 }, %)', 'angledLineOfXLength({ angle: angle001, length: xRel001 }, %)',
expectFinal: expectFinal:
'angledLineOfXLength({ angle = angle001, length = 23.14 }, %)', 'angledLineOfXLength({ angle: angle001, length: 23.14 }, %)',
steps: 7, steps: 7,
ang: ang + 180, ang: ang + 180,
locator: '[data-overlay-toolbar-index="7"]', locator: '[data-overlay-toolbar-index="7"]',
@ -535,10 +518,10 @@ part001 = startSketchOn('XZ')
hoverPos: { x: angledLineOfYLength.x, y: angledLineOfYLength.y }, hoverPos: { x: angledLineOfYLength.x, y: angledLineOfYLength.y },
constraintType: 'angle', constraintType: 'angle',
expectBeforeUnconstrained: expectBeforeUnconstrained:
'angledLineOfYLength({ angle = -91, length = 19 + 0 }, %)', 'angledLineOfYLength({ angle: -91, length: 19 + 0 }, %)',
expectAfterUnconstrained: expectAfterUnconstrained:
'angledLineOfYLength({ angle = angle002, length = 19 + 0 }, %)', 'angledLineOfYLength({ angle: angle002, length: 19 + 0 }, %)',
expectFinal: 'angledLineOfYLength({ angle = -91, length = 19 + 0 }, %)', expectFinal: 'angledLineOfYLength({ angle: -91, length: 19 + 0 }, %)',
ang: ang + 180, ang: ang + 180,
steps: 6, steps: 6,
locator: '[data-overlay-toolbar-index="8"]', locator: '[data-overlay-toolbar-index="8"]',
@ -548,49 +531,45 @@ part001 = startSketchOn('XZ')
hoverPos: { x: angledLineOfYLength.x, y: angledLineOfYLength.y }, hoverPos: { x: angledLineOfYLength.x, y: angledLineOfYLength.y },
constraintType: 'yRelative', constraintType: 'yRelative',
expectBeforeUnconstrained: expectBeforeUnconstrained:
'angledLineOfYLength({ angle = -91, length = 19 + 0 }, %)', 'angledLineOfYLength({ angle: -91, length: 19 + 0 }, %)',
expectAfterUnconstrained: expectAfterUnconstrained:
'angledLineOfYLength({ angle = -91, length = 19 }, %)', 'angledLineOfYLength({ angle: -91, length: 19 }, %)',
expectFinal: expectFinal: 'angledLineOfYLength({ angle: -91, length: yRel002 }, %)',
'angledLineOfYLength({ angle = -91, length = yRel002 }, %)',
ang: ang + 180, ang: ang + 180,
steps: 7, steps: 7,
locator: '[data-overlay-toolbar-index="8"]', 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,
}) => {
await page.addInitScript(async () => {
localStorage.setItem( localStorage.setItem(
'persistCode', 'persistCode',
`part001 = startSketchOn('XZ') `part001 = startSketchOn('XZ')
|> startProfileAt([0, 0], %) |> startProfileAt([0, 0], %)
|> line([0.5, -14 + 0], %) |> line([0.5, -14 + 0], %)
|> angledLine({ angle = 3 + 0, length = 32 + 0 }, %) |> angledLine({ angle: 3 + 0, length: 32 + 0 }, %)
|> lineTo([33, 11.5 + 0], %) |> lineTo([33, 11.5 + 0], %)
|> xLineTo(9 - 5, %) |> xLineTo(9 - 5, %)
|> yLineTo(-10.77, %, $a) |> yLineTo(-10.77, %, $a)
|> xLine(26.04, %) |> xLine(26.04, %)
|> yLine(21.14 + 0, %) |> yLine(21.14 + 0, %)
|> angledLineOfXLength({ angle = 181 + 0, length = 23.14 }, %) |> angledLineOfXLength({ angle: 181 + 0, length: 23.14 }, %)
|> angledLineOfYLength({ angle = -91, length = 19 + 0 }, %) |> angledLineOfYLength({ angle: -91, length: 19 + 0 }, %)
|> angledLineToX({ angle = 3 + 0, to = 26 }, %) |> angledLineToX({ angle: 3 + 0, to: 26 }, %)
|> angledLineToY({ angle = 89, to = 9.14 + 0 }, %) |> angledLineToY({ angle: 89, to: 9.14 + 0 }, %)
|> angledLineThatIntersects({ |> angledLineThatIntersects({
angle = 4.14, angle: 4.14,
intersectTag = a, intersectTag: a,
offset = 9 offset: 9
}, %) }, %)
|> tangentialArcTo([3.14 + 13, 1.14], %) |> tangentialArcTo([3.14 + 13, 1.14], %)
` `
) )
localStorage.setItem('disableAxis', 'true') localStorage.setItem('disableAxis', 'true')
}) })
const u = await getUtils(page) const u = await getUtils(page)
await page.setViewportSize({ width: 1200, height: 500 }) await page.setViewportSize({ width: 1200, height: 500 })
await u.waitForAuthSkipAppStart() await homePage.goToModelingScene()
// wait for execution done // wait for execution done
await u.openDebugPanel() await u.openDebugPanel()
@ -615,10 +594,9 @@ part001 = startSketchOn('XZ')
await clickConstrained({ await clickConstrained({
hoverPos: { x: angledLineToX.x, y: angledLineToX.y }, hoverPos: { x: angledLineToX.x, y: angledLineToX.y },
constraintType: 'angle', constraintType: 'angle',
expectBeforeUnconstrained: expectBeforeUnconstrained: 'angledLineToX({ angle: 3 + 0, to: 26 }, %)',
'angledLineToX({ angle = 3 + 0, to = 26 }, %)', expectAfterUnconstrained: 'angledLineToX({ angle: 3, to: 26 }, %)',
expectAfterUnconstrained: 'angledLineToX({ angle = 3, to = 26 }, %)', expectFinal: 'angledLineToX({ angle: angle001, to: 26 }, %)',
expectFinal: 'angledLineToX({ angle = angle001, to = 26 }, %)',
ang: ang + 180, ang: ang + 180,
locator: '[data-overlay-toolbar-index="9"]', locator: '[data-overlay-toolbar-index="9"]',
}) })
@ -627,10 +605,10 @@ part001 = startSketchOn('XZ')
hoverPos: { x: angledLineToX.x, y: angledLineToX.y }, hoverPos: { x: angledLineToX.x, y: angledLineToX.y },
constraintType: 'xAbsolute', constraintType: 'xAbsolute',
expectBeforeUnconstrained: expectBeforeUnconstrained:
'angledLineToX({ angle = angle001, to = 26 }, %)', 'angledLineToX({ angle: angle001, to: 26 }, %)',
expectAfterUnconstrained: expectAfterUnconstrained:
'angledLineToX({ angle = angle001, to = xAbs001 }, %)', 'angledLineToX({ angle: angle001, to: xAbs001 }, %)',
expectFinal: 'angledLineToX({ angle = angle001, to = 26 }, %)', expectFinal: 'angledLineToX({ angle: angle001, to: 26 }, %)',
ang: ang + 180, ang: ang + 180,
locator: '[data-overlay-toolbar-index="9"]', locator: '[data-overlay-toolbar-index="9"]',
}) })
@ -642,10 +620,10 @@ part001 = startSketchOn('XZ')
hoverPos: { x: angledLineToY.x, y: angledLineToY.y }, hoverPos: { x: angledLineToY.x, y: angledLineToY.y },
constraintType: 'angle', constraintType: 'angle',
expectBeforeUnconstrained: expectBeforeUnconstrained:
'angledLineToY({ angle = 89, to = 9.14 + 0 }, %)', 'angledLineToY({ angle: 89, to: 9.14 + 0 }, %)',
expectAfterUnconstrained: expectAfterUnconstrained:
'angledLineToY({ angle = angle002, to = 9.14 + 0 }, %)', 'angledLineToY({ angle: angle002, to: 9.14 + 0 }, %)',
expectFinal: 'angledLineToY({ angle = 89, to = 9.14 + 0 }, %)', expectFinal: 'angledLineToY({ angle: 89, to: 9.14 + 0 }, %)',
steps: process.platform === 'darwin' ? 8 : 9, steps: process.platform === 'darwin' ? 8 : 9,
ang: ang + 180, ang: ang + 180,
locator: '[data-overlay-toolbar-index="10"]', locator: '[data-overlay-toolbar-index="10"]',
@ -655,9 +633,9 @@ part001 = startSketchOn('XZ')
hoverPos: { x: angledLineToY.x, y: angledLineToY.y }, hoverPos: { x: angledLineToY.x, y: angledLineToY.y },
constraintType: 'yAbsolute', constraintType: 'yAbsolute',
expectBeforeUnconstrained: expectBeforeUnconstrained:
'angledLineToY({ angle = 89, to = 9.14 + 0 }, %)', 'angledLineToY({ angle: 89, to: 9.14 + 0 }, %)',
expectAfterUnconstrained: 'angledLineToY({ angle = 89, to = 9.14 }, %)', expectAfterUnconstrained: 'angledLineToY({ angle: 89, to: 9.14 }, %)',
expectFinal: 'angledLineToY({ angle = 89, to = yAbs001 }, %)', expectFinal: 'angledLineToY({ angle: 89, to: yAbs001 }, %)',
ang: ang + 180, ang: ang + 180,
locator: '[data-overlay-toolbar-index="10"]', locator: '[data-overlay-toolbar-index="10"]',
}) })
@ -674,19 +652,19 @@ part001 = startSketchOn('XZ')
}, },
constraintType: 'angle', constraintType: 'angle',
expectBeforeUnconstrained: `angledLineThatIntersects({ expectBeforeUnconstrained: `angledLineThatIntersects({
angle = 4.14, angle: 4.14,
intersectTag = a, intersectTag: a,
offset = 9 offset: 9
}, %)`, }, %)`,
expectAfterUnconstrained: `angledLineThatIntersects({ expectAfterUnconstrained: `angledLineThatIntersects({
angle = angle003, angle: angle003,
intersectTag = a, intersectTag: a,
offset = 9 offset: 9
}, %)`, }, %)`,
expectFinal: `angledLineThatIntersects({ expectFinal: `angledLineThatIntersects({
angle = -176, angle: -176,
offset = 9, offset: 9,
intersectTag = a intersectTag: a
}, %)`, }, %)`,
ang: ang + 180, ang: ang + 180,
locator: '[data-overlay-toolbar-index="11"]', locator: '[data-overlay-toolbar-index="11"]',
@ -699,45 +677,43 @@ part001 = startSketchOn('XZ')
}, },
constraintType: 'intersectionOffset', constraintType: 'intersectionOffset',
expectBeforeUnconstrained: `angledLineThatIntersects({ expectBeforeUnconstrained: `angledLineThatIntersects({
angle = -176, angle: -176,
offset = 9, offset: 9,
intersectTag = a intersectTag: a
}, %)`, }, %)`,
expectAfterUnconstrained: `angledLineThatIntersects({ expectAfterUnconstrained: `angledLineThatIntersects({
angle = -176, angle: -176,
offset = perpDist001, offset: perpDist001,
intersectTag = a intersectTag: a
}, %)`, }, %)`,
expectFinal: `angledLineThatIntersects({ expectFinal: `angledLineThatIntersects({
angle = -176, angle: -176,
offset = 9, offset: 9,
intersectTag = a intersectTag: a
}, %)`, }, %)`,
ang: ang + 180, ang: ang + 180,
locator: '[data-overlay-toolbar-index="11"]', locator: '[data-overlay-toolbar-index="11"]',
}) }) })
}) test('for segment [tangentialArcTo]', async ({ page, homePage }) => { await page.addInitScript(async () => {
test('for segment [tangentialArcTo]', async ({ page }) => {
await page.addInitScript(async () => {
localStorage.setItem( localStorage.setItem(
'persistCode', 'persistCode',
`part001 = startSketchOn('XZ') `part001 = startSketchOn('XZ')
|> startProfileAt([0, 0], %) |> startProfileAt([0, 0], %)
|> line([0.5, -14 + 0], %) |> line([0.5, -14 + 0], %)
|> angledLine({ angle = 3 + 0, length = 32 + 0 }, %) |> angledLine({ angle: 3 + 0, length: 32 + 0 }, %)
|> lineTo([33, 11.5 + 0], %) |> lineTo([33, 11.5 + 0], %)
|> xLineTo(9 - 5, %) |> xLineTo(9 - 5, %)
|> yLineTo(-10.77, %, $a) |> yLineTo(-10.77, %, $a)
|> xLine(26.04, %) |> xLine(26.04, %)
|> yLine(21.14 + 0, %) |> yLine(21.14 + 0, %)
|> angledLineOfXLength({ angle = 181 + 0, length = 23.14 }, %) |> angledLineOfXLength({ angle: 181 + 0, length: 23.14 }, %)
|> angledLineOfYLength({ angle = -91, length = 19 + 0 }, %) |> angledLineOfYLength({ angle: -91, length: 19 + 0 }, %)
|> angledLineToX({ angle = 3 + 0, to = 26 }, %) |> angledLineToX({ angle: 3 + 0, to: 26 }, %)
|> angledLineToY({ angle = 89, to = 9.14 + 0 }, %) |> angledLineToY({ angle: 89, to: 9.14 + 0 }, %)
|> angledLineThatIntersects({ |> angledLineThatIntersects({
angle = 4.14, angle: 4.14,
intersectTag = a, intersectTag: a,
offset = 9 offset: 9
}, %) }, %)
|> tangentialArcTo([3.14 + 13, -3.14], %) |> tangentialArcTo([3.14 + 13, -3.14], %)
` `
@ -747,7 +723,7 @@ part001 = startSketchOn('XZ')
const u = await getUtils(page) const u = await getUtils(page)
await page.setViewportSize({ width: 1200, height: 500 }) await page.setViewportSize({ width: 1200, height: 500 })
await u.waitForAuthSkipAppStart() await homePage.goToModelingScene()
// wait for execution done // wait for execution done
await u.openDebugPanel() await u.openDebugPanel()
@ -789,22 +765,20 @@ part001 = startSketchOn('XZ')
ang: ang + 180, ang: ang + 180,
steps: 10, steps: 10,
locator: '[data-overlay-toolbar-index="12"]', locator: '[data-overlay-toolbar-index="12"]',
}) }) })
}) test('for segment [circle]', async ({ page, homePage }) => { await page.addInitScript(async () => {
test('for segment [circle]', async ({ page }) => {
await page.addInitScript(async () => {
localStorage.setItem( localStorage.setItem(
'persistCode', 'persistCode',
`part001 = startSketchOn('XZ') `part001 = startSketchOn('XZ')
|> circle({ center = [1 + 0, 0], radius = 8 }, %) |> circle({ center: [1 + 0, 0], radius: 8 }, %)
` `
) )
localStorage.setItem('disableAxis', 'true') localStorage.setItem('disableAxis', 'true')
}) })
const u = await getUtils(page) const u = await getUtils(page)
await page.setViewportSize({ width: 1200, height: 500 }) await page.setViewportSize({ width: 1200, height: 500 })
await u.waitForAuthSkipAppStart() await homePage.goToModelingScene()
// wait for execution done // wait for execution done
await u.openDebugPanel() await u.openDebugPanel()
@ -812,7 +786,7 @@ part001 = startSketchOn('XZ')
await u.closeDebugPanel() await u.closeDebugPanel()
await page await page
.getByText('circle({ center = [1 + 0, 0], radius = 8 }, %)') .getByText('circle({ center: [1 + 0, 0], radius: 8 }, %)')
.click() .click()
await page.waitForTimeout(100) await page.waitForTimeout(100)
await page.getByRole('button', { name: 'Edit Sketch' }).click() await page.getByRole('button', { name: 'Edit Sketch' }).click()
@ -831,9 +805,9 @@ part001 = startSketchOn('XZ')
hoverPos, hoverPos,
constraintType: 'xAbsolute', constraintType: 'xAbsolute',
expectBeforeUnconstrained: expectBeforeUnconstrained:
'circle({ center = [1 + 0, 0], radius = 8 }, %)', 'circle({ center: [1 + 0, 0], radius: 8 }, %)',
expectAfterUnconstrained: 'circle({ center = [1, 0], radius = 8 }, %)', expectAfterUnconstrained: 'circle({ center: [1, 0], radius: 8 }, %)',
expectFinal: 'circle({ center = [xAbs001, 0], radius = 8 }, %)', expectFinal: 'circle({ center: [xAbs001, 0], radius: 8 }, %)',
ang: ang + 105, ang: ang + 105,
steps: 6, steps: 6,
locator: '[data-overlay-toolbar-index="0"]', locator: '[data-overlay-toolbar-index="0"]',
@ -843,10 +817,10 @@ part001 = startSketchOn('XZ')
hoverPos, hoverPos,
constraintType: 'yAbsolute', constraintType: 'yAbsolute',
expectBeforeUnconstrained: expectBeforeUnconstrained:
'circle({ center = [xAbs001, 0], radius = 8 }, %)', 'circle({ center: [xAbs001, 0], radius: 8 }, %)',
expectAfterUnconstrained: expectAfterUnconstrained:
'circle({ center = [xAbs001, yAbs001], radius = 8 }, %)', 'circle({ center: [xAbs001, yAbs001], radius: 8 }, %)',
expectFinal: 'circle({ center = [xAbs001, 0], radius = 8 }, %)', expectFinal: 'circle({ center: [xAbs001, 0], radius: 8 }, %)',
ang: ang + 105, ang: ang + 105,
steps: 10, steps: 10,
locator: '[data-overlay-toolbar-index="0"]', locator: '[data-overlay-toolbar-index="0"]',
@ -856,15 +830,14 @@ part001 = startSketchOn('XZ')
hoverPos, hoverPos,
constraintType: 'radius', constraintType: 'radius',
expectBeforeUnconstrained: expectBeforeUnconstrained:
'circle({ center = [xAbs001, 0], radius = 8 }, %)', 'circle({ center: [xAbs001, 0], radius: 8 }, %)',
expectAfterUnconstrained: expectAfterUnconstrained:
'circle({ center = [xAbs001, 0], radius = radius001 }, %)', 'circle({ center: [xAbs001, 0], radius: radius001 }, %)',
expectFinal: 'circle({ center = [xAbs001, 0], radius = 8 }, %)', expectFinal: 'circle({ center: [xAbs001, 0], radius: 8 }, %)',
ang: ang + 105, ang: ang + 105,
steps: 10, steps: 10,
locator: '[data-overlay-toolbar-index="0"]', locator: '[data-overlay-toolbar-index="0"]',
}) }) })
})
}) })
test.describe('Testing deleting a segment', () => { test.describe('Testing deleting a segment', () => {
const _deleteSegmentSequence = const _deleteSegmentSequence =
@ -904,27 +877,27 @@ part001 = startSketchOn('XZ')
codeToBeDeleted codeToBeDeleted
) )
} }
test('all segment types', async ({ page }) => {
await page.addInitScript(async () => { test('all segment types', async ({ page, homePage }) => { await page.addInitScript(async () => {
localStorage.setItem( localStorage.setItem(
'persistCode', 'persistCode',
`part001 = startSketchOn('XZ') `part001 = startSketchOn('XZ')
|> startProfileAt([0, 0], %) |> startProfileAt([0, 0], %)
|> line([0.5, -14 + 0], %) |> line([0.5, -14 + 0], %)
|> angledLine({ angle = 3 + 0, length = 32 + 0 }, %) |> angledLine({ angle: 3 + 0, length: 32 + 0 }, %)
|> lineTo([33, 11.5 + 0], %) |> lineTo([33, 11.5 + 0], %)
|> xLineTo(9 - 5, %) |> xLineTo(9 - 5, %)
|> yLineTo(-10.77, %, $a) |> yLineTo(-10.77, %, $a)
|> xLine(26.04, %) |> xLine(26.04, %)
|> yLine(21.14 + 0, %) |> yLine(21.14 + 0, %)
|> angledLineOfXLength({ angle = 181 + 0, length = 23.14 }, %) |> angledLineOfXLength({ angle: 181 + 0, length: 23.14 }, %)
|> angledLineOfYLength({ angle = -91, length = 19 + 0 }, %) |> angledLineOfYLength({ angle: -91, length: 19 + 0 }, %)
|> angledLineToX({ angle = 3 + 0, to = 26 }, %) |> angledLineToX({ angle: 3 + 0, to: 26 }, %)
|> angledLineToY({ angle = 89, to = 9.14 + 0 }, %) |> angledLineToY({ angle: 89, to: 9.14 + 0 }, %)
|> angledLineThatIntersects({ |> angledLineThatIntersects({
angle = 4.14, angle: 4.14,
intersectTag = a, intersectTag: a,
offset = 9 offset: 9
}, %) }, %)
|> tangentialArcTo([3.14 + 13, 1.14], %) |> tangentialArcTo([3.14 + 13, 1.14], %)
` `
@ -934,7 +907,7 @@ part001 = startSketchOn('XZ')
const u = await getUtils(page) const u = await getUtils(page)
await page.setViewportSize({ width: 1200, height: 500 }) await page.setViewportSize({ width: 1200, height: 500 })
await u.waitForAuthSkipAppStart() await homePage.goToModelingScene()
// wait for execution done // wait for execution done
await u.openDebugPanel() await u.openDebugPanel()
@ -969,9 +942,9 @@ part001 = startSketchOn('XZ')
await deleteSegmentSequence({ await deleteSegmentSequence({
hoverPos: { x: segmentToDelete.x, y: segmentToDelete.y }, hoverPos: { x: segmentToDelete.x, y: segmentToDelete.y },
codeToBeDeleted: `angledLineThatIntersects({ codeToBeDeleted: `angledLineThatIntersects({
angle = 4.14, angle: 4.14,
intersectTag = a, intersectTag: a,
offset = 9 offset: 9
}, %)`, }, %)`,
stdLibFnName: 'angledLineThatIntersects', stdLibFnName: 'angledLineThatIntersects',
ang: ang + 180, ang: ang + 180,
@ -983,7 +956,7 @@ part001 = startSketchOn('XZ')
ang = await u.getAngle(`[data-overlay-index="${10}"]`) ang = await u.getAngle(`[data-overlay-index="${10}"]`)
await deleteSegmentSequence({ await deleteSegmentSequence({
hoverPos: { x: segmentToDelete.x, y: segmentToDelete.y }, hoverPos: { x: segmentToDelete.x, y: segmentToDelete.y },
codeToBeDeleted: 'angledLineToY({ angle = 89, to = 9.14 + 0 }, %)', codeToBeDeleted: 'angledLineToY({ angle: 89, to: 9.14 + 0 }, %)',
stdLibFnName: 'angledLineToY', stdLibFnName: 'angledLineToY',
ang: ang + 180, ang: ang + 180,
locator: '[data-overlay-toolbar-index="10"]', locator: '[data-overlay-toolbar-index="10"]',
@ -993,7 +966,7 @@ part001 = startSketchOn('XZ')
ang = await u.getAngle(`[data-overlay-index="${9}"]`) ang = await u.getAngle(`[data-overlay-index="${9}"]`)
await deleteSegmentSequence({ await deleteSegmentSequence({
hoverPos: { x: segmentToDelete.x, y: segmentToDelete.y }, hoverPos: { x: segmentToDelete.x, y: segmentToDelete.y },
codeToBeDeleted: 'angledLineToX({ angle = 3 + 0, to = 26 }, %)', codeToBeDeleted: 'angledLineToX({ angle: 3 + 0, to: 26 }, %)',
stdLibFnName: 'angledLineToX', stdLibFnName: 'angledLineToX',
ang: ang + 180, ang: ang + 180,
locator: '[data-overlay-toolbar-index="9"]', locator: '[data-overlay-toolbar-index="9"]',
@ -1004,7 +977,7 @@ part001 = startSketchOn('XZ')
await deleteSegmentSequence({ await deleteSegmentSequence({
hoverPos: { x: segmentToDelete.x, y: segmentToDelete.y }, hoverPos: { x: segmentToDelete.x, y: segmentToDelete.y },
codeToBeDeleted: codeToBeDeleted:
'angledLineOfYLength({ angle = -91, length = 19 + 0 }, %)', 'angledLineOfYLength({ angle: -91, length: 19 + 0 }, %)',
stdLibFnName: 'angledLineOfYLength', stdLibFnName: 'angledLineOfYLength',
ang: ang + 180, ang: ang + 180,
locator: '[data-overlay-toolbar-index="8"]', locator: '[data-overlay-toolbar-index="8"]',
@ -1015,7 +988,7 @@ part001 = startSketchOn('XZ')
await deleteSegmentSequence({ await deleteSegmentSequence({
hoverPos: { x: segmentToDelete.x, y: segmentToDelete.y }, hoverPos: { x: segmentToDelete.x, y: segmentToDelete.y },
codeToBeDeleted: codeToBeDeleted:
'angledLineOfXLength({ angle = 181 + 0, length = 23.14 }, %)', 'angledLineOfXLength({ angle: 181 + 0, length: 23.14 }, %)',
stdLibFnName: 'angledLineOfXLength', stdLibFnName: 'angledLineOfXLength',
ang: ang + 180, ang: ang + 180,
locator: '[data-overlay-toolbar-index="7"]', locator: '[data-overlay-toolbar-index="7"]',
@ -1095,7 +1068,7 @@ part001 = startSketchOn('XZ')
ang = await u.getAngle(`[data-overlay-index="${1}"]`) ang = await u.getAngle(`[data-overlay-index="${1}"]`)
await deleteSegmentSequence({ await deleteSegmentSequence({
hoverPos: { x: segmentToDelete.x, y: segmentToDelete.y }, hoverPos: { x: segmentToDelete.x, y: segmentToDelete.y },
codeToBeDeleted: 'angledLine({ angle = 3 + 0, length = 32 + 0 }, %)', codeToBeDeleted: 'angledLine({ angle: 3 + 0, length: 32 + 0 }, %)',
stdLibFnName: 'angledLine', stdLibFnName: 'angledLine',
ang: ang + 180, ang: ang + 180,
locator: '[data-overlay-toolbar-index="1"]', locator: '[data-overlay-toolbar-index="1"]',
@ -1110,8 +1083,7 @@ part001 = startSketchOn('XZ')
ang: ang + 180, ang: ang + 180,
}) })
await page.waitForTimeout(200) await page.waitForTimeout(200) })
})
}) })
test.describe('Testing delete with dependent segments', () => { test.describe('Testing delete with dependent segments', () => {
const cases = [ const cases = [
@ -1135,8 +1107,7 @@ part001 = startSketchOn('XZ')
const isObj = lineOfInterest.includes('{ angle = 3,') const isObj = lineOfInterest.includes('{ angle = 3,')
test(`${lineOfInterest.split('(')[0]}${isObj ? '-[obj-input]' : ''}${ test(`${lineOfInterest.split('(')[0]}${isObj ? '-[obj-input]' : ''}${
doesHaveTagOutsideSketch ? '-[tagOutsideSketch]' : '' doesHaveTagOutsideSketch ? '-[tagOutsideSketch]' : ''
}`, async ({ page }) => { }`, async ({ page, homePage }) => { await page.addInitScript(
await page.addInitScript(
async ({ lineToBeDeleted, extraLine }) => { async ({ lineToBeDeleted, extraLine }) => {
localStorage.setItem( localStorage.setItem(
'persistCode', 'persistCode',
@ -1145,7 +1116,7 @@ part001 = startSketchOn('XZ')
|> ${lineToBeDeleted} |> ${lineToBeDeleted}
|> line([-10, -15], %) |> line([-10, -15], %)
|> angledLine([-176, segLen(seg01)], %) |> angledLine([-176, segLen(seg01)], %)
${extraLine ? 'myVar = segLen(seg01)' : ''}` ${extraLine ? 'myVar = segLen(seg01)' : ''}`
) )
}, },
{ {
@ -1156,7 +1127,7 @@ ${extraLine ? 'myVar = segLen(seg01)' : ''}`
const u = await getUtils(page) const u = await getUtils(page)
await page.setViewportSize({ width: 1200, height: 500 }) await page.setViewportSize({ width: 1200, height: 500 })
await u.waitForAuthSkipAppStart() await homePage.goToModelingScene()
await page.waitForTimeout(300) await page.waitForTimeout(300)
await page.getByText(lineOfInterest).click() await page.getByText(lineOfInterest).click()
@ -1225,8 +1196,7 @@ ${extraLine ? 'myVar = segLen(seg01)' : ''}`
) )
// eslint-disable-next-line jest/no-conditional-expect // eslint-disable-next-line jest/no-conditional-expect
await expect(page.locator('.cm-content')).not.toContainText('seg01') await expect(page.locator('.cm-content')).not.toContainText('seg01')
} } })
})
} }
} }
}) })
@ -1292,11 +1262,8 @@ ${extraLine ? 'myVar = segLen(seg01)' : ''}`
] ]
for (const { before, after } of cases) { for (const { before, after } of cases) {
const isObj = before.includes('{ angle = 3') const isObj = before.includes('{ angle: 3')
test(`${before.split('(')[0]}${isObj ? '-[obj-input]' : ''}`, async ({ test(`${before.split('(')[0]}${isObj ? '-[obj-input]' : ''}`, async ({ page, homePage }) => { await page.addInitScript(
page,
}) => {
await page.addInitScript(
async ({ lineToBeDeleted }) => { async ({ lineToBeDeleted }) => {
localStorage.setItem( localStorage.setItem(
'persistCode', 'persistCode',
@ -1314,7 +1281,7 @@ ${extraLine ? 'myVar = segLen(seg01)' : ''}`
const u = await getUtils(page) const u = await getUtils(page)
await page.setViewportSize({ width: 1200, height: 500 }) await page.setViewportSize({ width: 1200, height: 500 })
await u.waitForAuthSkipAppStart() await homePage.goToModelingScene()
await page.waitForTimeout(300) await page.waitForTimeout(300)
await page.getByText(before).click() await page.getByText(before).click()
@ -1357,8 +1324,7 @@ ${extraLine ? 'myVar = segLen(seg01)' : ''}`
await expect(page.locator('.cm-content')).toContainText(after) await expect(page.locator('.cm-content')).toContainText(after)
// check the cursor was left in the correct place after transform // check the cursor was left in the correct place after transform
await expect(page.locator('.cm-activeLine')).toHaveText('|> ' + after) await expect(page.locator('.cm-activeLine')).toHaveText('|> ' + after)
await expect(page.getByTestId('segment-overlay')).toHaveCount(3) await expect(page.getByTestId('segment-overlay')).toHaveCount(3) })
})
} }
}) })
}) })