* Add back stream idle mode
* Shut up codespell
* Correct serialization; only expose at user level
* cargo fmt
* tsc lint fmt
* Move engineStreamMachine as a global actor; tons of more work
* Fix up everything after bumping kittycad/lib
* Remove camera sync
* Use pause/play iconology
* Add back better ping indicator
* wip
* Fix streamIdleMode checkbox being wonky
* yarn fmt
* Massive extinction event for waitForExecutionDone; try to stop projects view switching from crashing
* Clear diagnostics when unmounting code editor!
* wip
* Rework initial root projects dir + deflake many projects tests
* More e2e fixes
* Deflake revolve some revolve tests
* Fix the rest of the mfing tests
* yarn fmt
* yarn lint
* yarn tsc
* Fix tsc after rebase
* wip
* less flaky point and click
* wip
* Fixup after rebase
* Fix more tests
* Fix 2 more
* Fix up named-views tests
* yarn fmt lint tsc
* Fix up new changes
* Get rid of 1 cyclic dependency
* Fix another cyclic mfer!
* fmt
* fmt tsc
* Fix zoom to fit being frigged
* a new list of circular deps
* Remove NetworkHealthIndicator test that was shit
* Fix the bad reload repeat issue kevin started on
* Fix zoom to fit at the right moments...
* Fix cache count numbers in editor test
* Remove a test race - poll window info.
* Qualify fail function
* Try something
* Use scene.connectionEstablished
* Hopefully fix snapshots at least
* Add app console.log
* Fix native menu tests more
* tsc lint
* Fix camera failure
* Try again
* Test attempt number 15345203, action!
* Add back old window detection heuristic
* Remove firstWindow to complete the work of 2342d04fe2
* Tweak some tests for MacOS
* Tweak "set appearance" test for MacOS
Revert this if it messes up any other platform's color checks!
* Are you serious? This was all that needed formatting?
* More color tweaks
Local MacOS and CI MacOS don't agree
* Fixes on apperance e2e test for stream idle branch (#6168)
pierremtb/stream-idle-revamp-appearance-fixes
* Another apperance fix
* Skip one native menu test to make stream idle green (#6169)
* pierremtb/stream-idle-revamp-more-fixes
* Fix lint
* Update snapshot for test_generate_settings_docs
---------
Co-authored-by: lee-at-zoo-corp <lee@zoo.dev>
Co-authored-by: Frank Noirot <frankjohnson1993@gmail.com>
Co-authored-by: Pierre Jacquier <pierrejacquier39@gmail.com>
Co-authored-by: Pierre Jacquier <pierre@zoo.dev>
120 lines
3.5 KiB
TypeScript
120 lines
3.5 KiB
TypeScript
import fs from 'node:fs/promises'
|
|
import path from 'node:path'
|
|
|
|
import { expect, test } from '@e2e/playwright/zoo-test'
|
|
|
|
test.describe('Point and click for boolean workflows', () => {
|
|
// Boolean operations to test
|
|
const booleanOperations = [
|
|
{
|
|
name: 'union',
|
|
code: 'union([extrude001, extrude006])',
|
|
},
|
|
{
|
|
name: 'subtract',
|
|
code: 'subtract([extrude001], tools = [extrude006])',
|
|
},
|
|
{
|
|
name: 'intersect',
|
|
code: 'intersect([extrude001, extrude006])',
|
|
},
|
|
] as const
|
|
for (let i = 0; i < booleanOperations.length; i++) {
|
|
const operation = booleanOperations[i]
|
|
const operationName = operation.name
|
|
const commandName = `Boolean ${
|
|
operationName.charAt(0).toUpperCase() + operationName.slice(1)
|
|
}`
|
|
test(`Create boolean operation -- ${operationName}`, async ({
|
|
context,
|
|
homePage,
|
|
cmdBar,
|
|
editor,
|
|
toolbar,
|
|
scene,
|
|
page,
|
|
}) => {
|
|
const file = await fs.readFile(
|
|
path.resolve(
|
|
__dirname,
|
|
'../../',
|
|
'./rust/kcl-lib/e2e/executor/inputs/boolean-setup-with'
|
|
),
|
|
'utf-8'
|
|
)
|
|
await context.addInitScript((file) => {
|
|
localStorage.setItem('persistCode', file)
|
|
}, file)
|
|
await homePage.goToModelingScene()
|
|
await scene.settled(cmdBar)
|
|
|
|
// Test coordinates for selection - these might need adjustment based on actual scene layout
|
|
const cylinderPoint = { x: 592, y: 174 }
|
|
const secondObjectPoint = { x: 683, y: 273 }
|
|
|
|
// Create mouse helpers for selecting objects
|
|
const [clickFirstObject] = scene.makeMouseHelpers(
|
|
cylinderPoint.x,
|
|
cylinderPoint.y,
|
|
{ steps: 10 }
|
|
)
|
|
const [clickSecondObject] = scene.makeMouseHelpers(
|
|
secondObjectPoint.x,
|
|
secondObjectPoint.y,
|
|
{ steps: 10 }
|
|
)
|
|
|
|
await test.step(`Test ${operationName} operation`, async () => {
|
|
// Click the boolean operation button in the toolbar
|
|
await toolbar.selectBoolean(operationName)
|
|
|
|
// Verify command bar is showing the right command
|
|
await expect(cmdBar.page.getByTestId('command-name')).toContainText(
|
|
commandName
|
|
)
|
|
|
|
// Select first object in the scene, expect there to be a pixel diff from the selection color change
|
|
await clickFirstObject({ pixelDiff: 50 })
|
|
await page.waitForTimeout(1000)
|
|
|
|
// For subtract, we need to proceed to the next step before selecting the second object
|
|
if (operationName !== 'subtract') {
|
|
// should down shift key to select multiple objects
|
|
await page.keyboard.down('Shift')
|
|
}
|
|
|
|
// Select second object
|
|
await clickSecondObject({ pixelDiff: 50 })
|
|
|
|
await page.waitForTimeout(1000)
|
|
|
|
// Confirm the operation in the command bar
|
|
await cmdBar.progressCmdBar()
|
|
|
|
if (operationName === 'union' || operationName === 'intersect') {
|
|
await cmdBar.expectState({
|
|
stage: 'review',
|
|
headerArguments: {
|
|
Solids: '2 paths',
|
|
},
|
|
commandName,
|
|
})
|
|
} else if (operationName === 'subtract') {
|
|
await cmdBar.expectState({
|
|
stage: 'review',
|
|
headerArguments: {
|
|
Tool: '1 path',
|
|
Target: '1 path',
|
|
},
|
|
commandName,
|
|
})
|
|
}
|
|
|
|
await cmdBar.submit()
|
|
|
|
await editor.expectEditor.toContain(operation.code)
|
|
})
|
|
})
|
|
}
|
|
})
|