Pass segment-overlays (minor ache) and ability to switch to web if needed :)

This commit is contained in:
49lf
2024-12-03 13:13:01 -05:00
parent c31a9a4a88
commit d9c081611f
4 changed files with 162 additions and 151 deletions

View File

@ -119,6 +119,9 @@ export class HomePageFixture {
}
goToModelingScene = async (name?: string = 'testDefault') => {
// On web this is a no-op. There is no project view.
if (process.env.PLATFORM === 'web') return
await this.createAndGoToProject(name)
}
}

View File

@ -16,7 +16,7 @@ test.describe('Testing segment overlays', () => {
* @param {number} options.steps - The number of steps to perform
*/
const _clickConstrained =
(page: Page) =>
(page: Page, editor: EditorFixture) =>
async ({
hoverPos,
constraintType,
@ -50,10 +50,9 @@ test.describe('Testing segment overlays', () => {
y = hoverPos.y - Math.sin(ang * deg) * 32
await page.mouse.move(x, y)
await wiggleMove(page, x, y, 20, 30, ang, 10, 5, locator)
await page.mouse.move(x, y)
await expect(page.locator('.cm-content')).toContainText(
expectBeforeUnconstrained
)
await editor.expectEditor.toContain(expectBeforeUnconstrained, { shouldNormalise: true })
const constrainedLocator = page.locator(
`[data-constraint-type="${constraintType}"][data-is-constrained="true"]`
)
@ -63,9 +62,7 @@ test.describe('Testing segment overlays', () => {
await page.getByTestId('constraint-symbol-popover').count()
).toBeGreaterThan(0)
await constrainedLocator.click()
await expect(page.locator('.cm-content')).toContainText(
expectAfterUnconstrained
)
await editor.expectEditor.toContain(expectAfterUnconstrained, { shouldNormalise: true })
await page.mouse.move(0, 0)
await page.waitForTimeout(1000)
@ -73,6 +70,7 @@ test.describe('Testing segment overlays', () => {
y = hoverPos.y - Math.sin(ang * deg) * 32
await page.mouse.move(x, y)
await wiggleMove(page, x, y, 20, 30, ang, 10, 5, locator)
await page.mouse.move(x, y)
const unconstrainedLocator = page.locator(
`[data-constraint-type="${constraintType}"][data-is-constrained="false"]`
@ -92,6 +90,7 @@ test.describe('Testing segment overlays', () => {
})
.click()
await expect(page.locator('.cm-content')).toContainText(expectFinal)
await editor.expectEditor.toContain(expectFinal, { shouldNormalise: true })
}
/**
@ -104,7 +103,7 @@ test.describe('Testing segment overlays', () => {
* @param {number} options.steps - The number of steps to perform
*/
const _clickUnconstrained =
(page: Page) =>
(page: Page, editor: EditorFixture) =>
async ({
hoverPos,
constraintType,
@ -136,11 +135,10 @@ test.describe('Testing segment overlays', () => {
y = hoverPos.y - Math.sin(ang * deg) * 32
await page.mouse.move(x, y)
await wiggleMove(page, x, y, 20, 30, ang, 10, 5, locator)
await page.mouse.move(x, y)
await expect(page.getByText('Added variable')).not.toBeVisible()
await expect(page.locator('.cm-content')).toContainText(
expectBeforeUnconstrained
)
await editor.expectEditor.toContain(expectBeforeUnconstrained, { shouldNormalise: true })
const unconstrainedLocator = page.locator(
`[data-constraint-type="${constraintType}"][data-is-constrained="false"]`
)
@ -158,9 +156,7 @@ test.describe('Testing segment overlays', () => {
name: 'arrow right Continue',
})
.click()
await expect(page.locator('.cm-content')).toContainText(
expectAfterUnconstrained
)
await editor.expectEditor.toContain(expectAfterUnconstrained, { shouldNormalise: true })
await expect(page.getByText('Added variable')).not.toBeVisible()
await page.mouse.move(0, 0)
@ -169,6 +165,7 @@ test.describe('Testing segment overlays', () => {
y = hoverPos.y - Math.sin(ang * deg) * 32
await page.mouse.move(x, y)
await wiggleMove(page, x, y, 20, 30, ang, 10, 5, locator)
await page.mouse.move(x, y)
const constrainedLocator = page.locator(
`[data-constraint-type="${constraintType}"][data-is-constrained="true"]`
@ -179,11 +176,12 @@ test.describe('Testing segment overlays', () => {
await page.getByTestId('constraint-symbol-popover').count()
).toBeGreaterThan(0)
await constrainedLocator.click()
await expect(page.locator('.cm-content')).toContainText(expectFinal)
await editor.expectEditor.toContain(expectFinal, { shouldNormalise: true })
}
test.setTimeout(120000)
test('for segments [line, angledLine, lineTo, xLineTo]', async ({
page,
editor,
homePage,
}) => {
await page.addInitScript(async () => {
@ -192,20 +190,20 @@ test.describe('Testing segment overlays', () => {
`part001 = startSketchOn('XZ')
|> startProfileAt([5 + 0, 20 + 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], %)
|> xLineTo(5 + 9 - 5, %)
|> yLineTo(20 + -10.77, %, $a)
|> xLine(26.04, %)
|> yLine(21.14 + 0, %)
|> angledLineOfXLength({ angle: 181 + 0, length: 23.14 }, %)
|> angledLineOfYLength({ angle: -91, length: 19 + 0 }, %)
|> angledLineToX({ angle: 3 + 0, to: 5 + 26 }, %)
|> angledLineToY({ angle: 89, to: 20 + 9.14 + 0 }, %)
|> angledLineOfXLength({ angle = 181 + 0, length = 23.14 }, %)
|> angledLineOfYLength({ angle = -91, length = 19 + 0 }, %)
|> angledLineToX({ angle = 3 + 0, to = 5 + 26 }, %)
|> angledLineToY({ angle = 89, to = 20 + 9.14 + 0 }, %)
|> angledLineThatIntersects({
angle: 4.14,
intersectTag: a,
offset: 9
angle = 4.14,
intersectTag = a,
offset = 9
}, %)
|> tangentialArcTo([5 + 3.14 + 13, 20 + 3.14], %)
`
@ -228,8 +226,8 @@ test.describe('Testing segment overlays', () => {
await expect(page.getByTestId('segment-overlay')).toHaveCount(13)
const clickUnconstrained = _clickUnconstrained(page)
const clickConstrained = _clickConstrained(page)
const clickUnconstrained = _clickUnconstrained(page, editor)
const clickConstrained = _clickConstrained(page, editor)
await u.openAndClearDebugPanel()
await u.sendCustomCmd({
@ -346,7 +344,7 @@ test.describe('Testing segment overlays', () => {
locator: '[data-overlay-toolbar-index="3"]',
})
})
test('for segments [yLineTo, xLine]', async ({ page, homePage }) => {
test('for segments [yLineTo, xLine]', async ({ page, editor, homePage }) => {
await page.addInitScript(async () => {
localStorage.setItem(
'persistCode',
@ -360,13 +358,13 @@ test.describe('Testing segment overlays', () => {
part001 = startSketchOn('XZ')
|> startProfileAt([0, 0], %)
|> line([0.5, yRel001], %)
|> angledLine({ angle: angle001, length: len001 }, %)
|> angledLine({ angle = angle001, length = len001 }, %)
|> lineTo([33, yAbs001], %)
|> xLineTo(xAbs002, %)
|> yLineTo(-10.77, %, $a)
|> xLine(26.04, %)
|> yLine(21.14 + 0, %)
|> angledLineOfXLength({ angle: 181 + 0, length: 23.14 }, %)
|> angledLineOfXLength({ angle = 181 + 0, length = 23.14 }, %)
`
)
})
@ -387,7 +385,7 @@ test.describe('Testing segment overlays', () => {
await expect(page.getByTestId('segment-overlay')).toHaveCount(8)
const clickUnconstrained = _clickUnconstrained(page)
const clickUnconstrained = _clickUnconstrained(page, editor)
await page.mouse.move(700, 250)
await page.waitForTimeout(100)
@ -423,6 +421,7 @@ test.describe('Testing segment overlays', () => {
})
test('for segments [yLine, angledLineOfXLength, angledLineOfYLength]', async ({
page,
editor,
homePage,
}) => {
await page.addInitScript(async () => {
@ -431,20 +430,20 @@ test.describe('Testing segment overlays', () => {
`part001 = startSketchOn('XZ')
|> startProfileAt([0, 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], %)
|> xLineTo(9 - 5, %)
|> yLineTo(-10.77, %, $a)
|> xLine(26.04, %)
|> yLine(21.14 + 0, %)
|> angledLineOfXLength({ angle: 181 + 0, length: 23.14 }, %)
|> angledLineOfYLength({ angle: -91, length: 19 + 0 }, %)
|> angledLineToX({ angle: 3 + 0, to: 26 }, %)
|> angledLineToY({ angle: 89, to: 9.14 + 0 }, %)
|> angledLineOfXLength({ angle = 181 + 0, length = 23.14 }, %)
|> angledLineOfYLength({ angle = -91, length = 19 + 0 }, %)
|> angledLineToX({ angle = 3 + 0, to = 26 }, %)
|> angledLineToY({ angle = 89, to = 9.14 + 0 }, %)
|> angledLineThatIntersects({
angle: 4.14,
intersectTag: a,
offset: 9
angle = 4.14,
intersectTag = a,
offset = 9
}, %)
|> tangentialArcTo([3.14 + 13, 3.14], %)
`
@ -469,8 +468,8 @@ test.describe('Testing segment overlays', () => {
await expect(page.getByTestId('segment-overlay')).toHaveCount(13)
const clickUnconstrained = _clickUnconstrained(page)
const clickConstrained = _clickConstrained(page)
const clickUnconstrained = _clickUnconstrained(page, editor)
const clickConstrained = _clickConstrained(page, editor)
let ang = 0
@ -552,6 +551,7 @@ test.describe('Testing segment overlays', () => {
})
test('for segments [angledLineToX, angledLineToY, angledLineThatIntersects]', async ({
page,
editor,
homePage,
}) => {
await page.addInitScript(async () => {
@ -560,20 +560,20 @@ test.describe('Testing segment overlays', () => {
`part001 = startSketchOn('XZ')
|> startProfileAt([0, 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], %)
|> xLineTo(9 - 5, %)
|> yLineTo(-10.77, %, $a)
|> xLine(26.04, %)
|> yLine(21.14 + 0, %)
|> angledLineOfXLength({ angle: 181 + 0, length: 23.14 }, %)
|> angledLineOfYLength({ angle: -91, length: 19 + 0 }, %)
|> angledLineToX({ angle: 3 + 0, to: 26 }, %)
|> angledLineToY({ angle: 89, to: 9.14 + 0 }, %)
|> angledLineOfXLength({ angle = 181 + 0, length = 23.14 }, %)
|> angledLineOfYLength({ angle = -91, length = 19 + 0 }, %)
|> angledLineToX({ angle = 3 + 0, to = 26 }, %)
|> angledLineToY({ angle = 89, to = 9.14 + 0 }, %)
|> angledLineThatIntersects({
angle: 4.14,
intersectTag: a,
offset: 9
angle = 4.14,
intersectTag = a,
offset = 9
}, %)
|> tangentialArcTo([3.14 + 13, 1.14], %)
`
@ -597,8 +597,8 @@ test.describe('Testing segment overlays', () => {
await expect(page.getByTestId('segment-overlay')).toHaveCount(13)
const clickUnconstrained = _clickUnconstrained(page)
const clickConstrained = _clickConstrained(page)
const clickUnconstrained = _clickUnconstrained(page, editor)
const clickConstrained = _clickConstrained(page, editor)
let ang = 0
@ -666,19 +666,19 @@ test.describe('Testing segment overlays', () => {
},
constraintType: 'angle',
expectBeforeUnconstrained: `angledLineThatIntersects({
angle: 4.14,
intersectTag: a,
offset: 9
angle = 4.14,
intersectTag = a,
offset = 9
}, %)`,
expectAfterUnconstrained: `angledLineThatIntersects({
angle: angle003,
intersectTag: a,
offset: 9
angle = angle003,
intersectTag = a,
offset = 9
}, %)`,
expectFinal: `angledLineThatIntersects({
angle: -176,
offset: 9,
intersectTag: a
angle = -176,
offset = 9,
intersectTag = a
}, %)`,
ang: ang + 180,
locator: '[data-overlay-toolbar-index="11"]',
@ -691,45 +691,45 @@ test.describe('Testing segment overlays', () => {
},
constraintType: 'intersectionOffset',
expectBeforeUnconstrained: `angledLineThatIntersects({
angle: -176,
offset: 9,
intersectTag: a
angle = -176,
offset = 9,
intersectTag = a
}, %)`,
expectAfterUnconstrained: `angledLineThatIntersects({
angle: -176,
offset: perpDist001,
intersectTag: a
angle = -176,
offset = perpDist001,
intersectTag = a
}, %)`,
expectFinal: `angledLineThatIntersects({
angle: -176,
offset: 9,
intersectTag: a
angle = -176,
offset = 9,
intersectTag = a
}, %)`,
ang: ang + 180,
locator: '[data-overlay-toolbar-index="11"]',
})
})
test('for segment [tangentialArcTo]', async ({ page, homePage }) => {
test('for segment [tangentialArcTo]', async ({ page, editor, homePage }) => {
await page.addInitScript(async () => {
localStorage.setItem(
'persistCode',
`part001 = startSketchOn('XZ')
|> startProfileAt([0, 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], %)
|> xLineTo(9 - 5, %)
|> yLineTo(-10.77, %, $a)
|> xLine(26.04, %)
|> yLine(21.14 + 0, %)
|> angledLineOfXLength({ angle: 181 + 0, length: 23.14 }, %)
|> angledLineOfYLength({ angle: -91, length: 19 + 0 }, %)
|> angledLineToX({ angle: 3 + 0, to: 26 }, %)
|> angledLineToY({ angle: 89, to: 9.14 + 0 }, %)
|> angledLineOfXLength({ angle = 181 + 0, length = 23.14 }, %)
|> angledLineOfYLength({ angle = -91, length = 19 + 0 }, %)
|> angledLineToX({ angle = 3 + 0, to = 26 }, %)
|> angledLineToY({ angle = 89, to = 9.14 + 0 }, %)
|> angledLineThatIntersects({
angle: 4.14,
intersectTag: a,
offset: 9
angle = 4.14,
intersectTag = a,
offset = 9
}, %)
|> tangentialArcTo([3.14 + 13, -3.14], %)
`
@ -753,8 +753,8 @@ test.describe('Testing segment overlays', () => {
await expect(page.getByTestId('segment-overlay')).toHaveCount(13)
const clickUnconstrained = _clickUnconstrained(page)
const clickConstrained = _clickConstrained(page)
const clickUnconstrained = _clickUnconstrained(page, editor)
const clickConstrained = _clickConstrained(page, editor)
const tangentialArcTo = await u.getBoundingBox(
'[data-overlay-index="12"]'
@ -783,12 +783,12 @@ test.describe('Testing segment overlays', () => {
locator: '[data-overlay-toolbar-index="12"]',
})
})
test('for segment [circle]', async ({ page, homePage }) => {
test('for segment [circle]', async ({ page, editor, homePage }) => {
await page.addInitScript(async () => {
localStorage.setItem(
'persistCode',
`part001 = startSketchOn('XZ')
|> circle({ center: [1 + 0, 0], radius: 8 }, %)
|> circle({ center = [1 + 0, 0], radius = 8 }, %)
`
)
localStorage.setItem('disableAxis', 'true')
@ -812,8 +812,8 @@ test.describe('Testing segment overlays', () => {
await expect(page.getByTestId('segment-overlay')).toHaveCount(1)
const clickUnconstrained = _clickUnconstrained(page)
const clickConstrained = _clickConstrained(page)
const clickUnconstrained = _clickUnconstrained(page, editor)
const clickConstrained = _clickConstrained(page, editor)
const hoverPos = { x: 789, y: 114 } as const
let ang = await u.getAngle('[data-overlay-index="0"]')
@ -837,10 +837,10 @@ test.describe('Testing segment overlays', () => {
expectBeforeUnconstrained:
'circle({ center: [xAbs001, 0], radius: 8 }, %)',
expectAfterUnconstrained:
'circle({ center: [xAbs001, yAbs001], radius: 8 }, %)',
expectFinal: 'circle({ center: [xAbs001, 0], radius: 8 }, %)',
ang: ang + 105,
steps: 10,
'circle({ center = [xAbs001, yAbs001], radius = 8 }, %)',
expectFinal: 'circle({ center = [xAbs001, 0], radius = 8 }, %)',
ang: ang + 180,
steps: 30,
locator: '[data-overlay-toolbar-index="0"]',
})
console.log('circle radius')
@ -860,7 +860,7 @@ test.describe('Testing segment overlays', () => {
})
test.describe('Testing deleting a segment', () => {
const _deleteSegmentSequence =
(page: Page) =>
(page: Page, editor: EditorFixture) =>
async ({
hoverPos,
codeToBeDeleted,
@ -886,37 +886,36 @@ test.describe('Testing segment overlays', () => {
y = hoverPos.y - Math.sin(ang * deg) * 32
await page.mouse.move(x, y)
await wiggleMove(page, x, y, 20, 30, ang, 10, 5, locator)
await page.mouse.move(x, y)
await expect(page.locator('.cm-content')).toContainText(codeToBeDeleted)
await editor.expectEditor.toContain(codeToBeDeleted, { shouldNormalise: true })
await page.locator(`[data-stdlib-fn-name="${stdLibFnName}"]`).click()
await page.getByText('Delete Segment').click()
await expect(page.locator('.cm-content')).not.toContainText(
codeToBeDeleted
)
await editor.expectEditor.not.toContain(codeToBeDeleted, { shouldNormalise: true })
}
test('all segment types', async ({ page, homePage }) => {
test('all segment types', async ({ page, editor, homePage }) => {
await page.addInitScript(async () => {
localStorage.setItem(
'persistCode',
`part001 = startSketchOn('XZ')
|> startProfileAt([0, 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], %)
|> xLineTo(9 - 5, %)
|> yLineTo(-10.77, %, $a)
|> xLine(26.04, %)
|> yLine(21.14 + 0, %)
|> angledLineOfXLength({ angle: 181 + 0, length: 23.14 }, %)
|> angledLineOfYLength({ angle: -91, length: 19 + 0 }, %)
|> angledLineToX({ angle: 3 + 0, to: 26 }, %)
|> angledLineToY({ angle: 89, to: 9.14 + 0 }, %)
|> angledLineOfXLength({ angle = 181 + 0, length = 23.14 }, %)
|> angledLineOfYLength({ angle = -91, length = 19 + 0 }, %)
|> angledLineToX({ angle = 3 + 0, to = 26 }, %)
|> angledLineToY({ angle = 89, to = 9.14 + 0 }, %)
|> angledLineThatIntersects({
angle: 4.14,
intersectTag: a,
offset: 9
angle = 4.14,
intersectTag = a,
offset = 9
}, %)
|> tangentialArcTo([3.14 + 13, 1.14], %)
`
@ -927,6 +926,7 @@ test.describe('Testing segment overlays', () => {
await page.setViewportSize({ width: 1200, height: 500 })
await homePage.goToModelingScene()
await u.waitForPageLoad()
// wait for execution done
await u.openDebugPanel()
@ -939,7 +939,7 @@ test.describe('Testing segment overlays', () => {
await page.waitForTimeout(500)
await expect(page.getByTestId('segment-overlay')).toHaveCount(13)
const deleteSegmentSequence = _deleteSegmentSequence(page)
const deleteSegmentSequence = _deleteSegmentSequence(page, editor)
let segmentToDelete
@ -961,9 +961,9 @@ test.describe('Testing segment overlays', () => {
await deleteSegmentSequence({
hoverPos: { x: segmentToDelete.x, y: segmentToDelete.y },
codeToBeDeleted: `angledLineThatIntersects({
angle: 4.14,
intersectTag: a,
offset: 9
angle = 4.14,
intersectTag = a,
offset = 9
}, %)`,
stdLibFnName: 'angledLineThatIntersects',
ang: ang + 180,
@ -1072,16 +1072,15 @@ test.describe('Testing segment overlays', () => {
5,
'[data-overlay-toolbar-index="2"]'
)
await page.mouse.move(hoverPos.x, hoverPos.y)
const codeToBeDeleted = 'lineTo([33, 11.5 + 0], %)'
await expect(page.locator('.cm-content')).toContainText(codeToBeDeleted)
await editor.expectEditor.toContain(codeToBeDeleted, { shouldNormalise: true })
await page.getByTestId('overlay-menu').click()
await page.getByText('Delete Segment').click()
await expect(page.locator('.cm-content')).not.toContainText(
codeToBeDeleted
)
await editor.expectEditor.not.toContain(codeToBeDeleted, { shouldNormalise: true })
segmentToDelete = await getOverlayByIndex(1)
ang = await u.getAngle(`[data-overlay-index="${1}"]`)
@ -1127,7 +1126,7 @@ test.describe('Testing segment overlays', () => {
const isObj = lineOfInterest.includes('{ angle = 3,')
test(`${lineOfInterest.split('(')[0]}${isObj ? '-[obj-input]' : ''}${
doesHaveTagOutsideSketch ? '-[tagOutsideSketch]' : ''
}`, async ({ page, homePage }) => {
}`, async ({ page, editor, homePage }) => {
await page.addInitScript(
async ({ lineToBeDeleted, extraLine }) => {
localStorage.setItem(
@ -1176,9 +1175,7 @@ test.describe('Testing segment overlays', () => {
await page.mouse.move(hoverPos.x + x, hoverPos.y + y)
await page.mouse.move(hoverPos.x, hoverPos.y, { steps: 5 })
await expect(page.locator('.cm-content')).toContainText(
lineOfInterest
)
await editor.expectEditor.toContain(lineOfInterest, { shouldNormalise: true })
await page.getByTestId('overlay-menu').click()
await page.waitForTimeout(100)
@ -1189,9 +1186,7 @@ test.describe('Testing segment overlays', () => {
await page.mouse.move(hoverPos.x + x, hoverPos.y + y)
await page.mouse.move(hoverPos.x, hoverPos.y, { steps: 5 })
await expect(page.locator('.cm-content')).toContainText(
lineOfInterest
)
await editor.expectEditor.toContain(lineOfInterest, { shouldNormalise: true })
await page.getByTestId('overlay-menu').click()
await page.waitForTimeout(100)
@ -1207,16 +1202,12 @@ test.describe('Testing segment overlays', () => {
)
).toBeTruthy()
// eslint-disable-next-line jest/no-conditional-expect
await expect(page.locator('.cm-content')).toContainText(
lineOfInterest
)
await editor.expectEditor.toContain(lineOfInterest, { shouldNormalise: true })
} else {
// eslint-disable-next-line jest/no-conditional-expect
await expect(page.locator('.cm-content')).not.toContainText(
lineOfInterest
)
await editor.expectEditor.not.toContain(lineOfInterest, { shouldNormalise: true })
// eslint-disable-next-line jest/no-conditional-expect
await expect(page.locator('.cm-content')).not.toContainText('seg01')
await editor.expectEditor.not.toContain('seg01', { shouldNormalise: true })
}
})
}
@ -1287,6 +1278,7 @@ test.describe('Testing segment overlays', () => {
const isObj = before.includes('{ angle: 3')
test(`${before.split('(')[0]}${isObj ? '-[obj-input]' : ''}`, async ({
page,
editor,
homePage,
}) => {
await page.addInitScript(
@ -1308,6 +1300,7 @@ test.describe('Testing segment overlays', () => {
await page.setViewportSize({ width: 1200, height: 500 })
await homePage.goToModelingScene()
await u.waitForPageLoad()
await page.waitForTimeout(300)
await page.getByText(before).click()
@ -1340,14 +1333,16 @@ test.describe('Testing segment overlays', () => {
5,
'[data-overlay-toolbar-index="0"]'
)
await page.mouse.move(x, y)
await expect(page.locator('.cm-content')).toContainText(before)
await editor.expectEditor.toContain(before, { shouldNormalise: true })
await page.getByTestId('overlay-menu').click()
await page.waitForTimeout(100)
await page.getByText('Remove constraints').click()
await expect(page.locator('.cm-content')).toContainText(after)
await editor.expectEditor.toContain(after, { shouldNormalise: true })
// 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)

View File

@ -3,6 +3,7 @@ import {
fixtures,
Fixtures,
AuthenticatedTronApp,
AuthenticatedApp,
} from './fixtures/fixtureSetup'
export { expect, Page, BrowserContext, TestInfo } from '@playwright/test'
@ -24,8 +25,17 @@ export function test(desc, objOrFn, fnMaybe) {
{ page, context, cmdBar, editor, toolbar, scene, homePage },
testInfo
) => {
// To switch to web, change this to AuthenticatedApp from fixtureSetup.ts
const tronApp = new AuthenticatedTronApp(context, page, testInfo)
// To switch to web, use PLATFORM=web environment variable.
// Only use this for debugging, since the playwright tracer is busted
// for electron.
let tronApp;
if (process.env.PLATFORM === 'web') {
tronApp = new AuthenticatedApp(context, page, testInfo)
} else {
tronApp = new AuthenticatedTronApp(context, page, testInfo)
}
const fixtures: Fixtures = { cmdBar, editor, toolbar, scene, homePage }
const options = {
@ -51,33 +61,35 @@ export function test(desc, objOrFn, fnMaybe) {
await tronApp.page.reload()
}
// Create a consistent way to resize the page across electron and web.
// (lee) I had to do everyhting in the book to make electron change its
// damn window size. I succeded in making it consistently and reliably
// do it after a whole afternoon.
tronApp.page.setBodyDimensions = async function (dims: {
width: number
height: number
}) {
await tronApp.electronApp.evaluateHandle(async ({ app }, dims) => {
await app.resizeWindow(dims.width, dims.height)
}, dims)
if (tronApp instanceof AuthenticatedTronApp) {
// Create a consistent way to resize the page across electron and web.
// (lee) I had to do everyhting in the book to make electron change its
// damn window size. I succeded in making it consistently and reliably
// do it after a whole afternoon.
tronApp.page.setBodyDimensions = async function (dims: {
width: number
height: number
}) {
await tronApp.electronApp.evaluateHandle(async ({ app }, dims) => {
await app.resizeWindow(dims.width, dims.height)
}, dims)
await tronApp.page.setViewportSize(dims)
return tronApp.page.evaluate(async (dims) => {
await window.electron.resizeWindow(dims.width, dims.height)
window.document.body.style.width = dims.width + 'px'
window.document.body.style.height = dims.height + 'px'
window.document.documentElement.style.width = dims.width + 'px'
window.document.documentElement.style.height = dims.height + 'px'
}, dims)
}
await tronApp.page.setViewportSize(dims)
return tronApp.page.evaluate(async (dims) => {
await window.electron.resizeWindow(dims.width, dims.height)
window.document.body.style.width = dims.width + 'px'
window.document.body.style.height = dims.height + 'px'
window.document.documentElement.style.width = dims.width + 'px'
window.document.documentElement.style.height = dims.height + 'px'
}, dims)
}
// We need to expose this in order for some tests that require folder
// creation. Before they used to do this by their own electronSetup({...})
// calls.
tronApp.context.folderSetupFn = function (fn) {
return fn(tronApp.dir).then(() => ({ dir: tronApp.dir }))
// We need to expose this in order for some tests that require folder
// creation. Before they used to do this by their own electronSetup({...})
// calls.
tronApp.context.folderSetupFn = function (fn) {
return fn(tronApp.dir).then(() => ({ dir: tronApp.dir }))
}
}
await fn(

View File

@ -105,6 +105,7 @@
"tron:package": "electron-forge package",
"tron:make": "electron-forge make",
"tron:publish": "electron-forge publish",
"chrome:test": "PLATFORM=web NODE_ENV=development yarn playwright test --config=playwright.config.ts --project='Google Chrome' --grep-invert='@snapshot'",
"tron:test": "NODE_ENV=development yarn playwright test --config=playwright.electron.config.ts --grep-invert='@snapshot'",
"tronb:vite": "vite build -c vite.main.config.ts && vite build -c vite.preload.config.ts && vite build -c vite.renderer.config.ts",
"tronb:package": "electron-builder --config electron-builder.yml",