Fix partial execution
This commit is contained in:
@ -1399,7 +1399,9 @@ test.describe('multi-profile sketching', () => {
|
||||
await endLineStartTanArc({ delay: 544 })
|
||||
|
||||
await endArcStartLine()
|
||||
await editor.expectEditor.toContain(`|> tangentialArcTo([16.61, 4.14], %)`)
|
||||
await editor.expectEditor.toContain(
|
||||
`|> tangentialArcTo([16.61, 4.14], %)`
|
||||
)
|
||||
await toolbar.lineBtn.click()
|
||||
await page.waitForTimeout(300)
|
||||
await endArcStartLine()
|
||||
@ -1461,15 +1463,16 @@ test.describe('multi-profile sketching', () => {
|
||||
`profile005 = startProfileAt([5.63, 3.05], sketch001)`
|
||||
)
|
||||
await crnRect1point2()
|
||||
await editor.expectEditor
|
||||
.toContain(`|> angledLine([0, 2.37], %, $rectangleSegmentA001)
|
||||
await editor.expectEditor.toContain(
|
||||
`|> angledLine([0, 2.37], %, $rectangleSegmentA001)
|
||||
|> angledLine([segAng(rectangleSegmentA001) - 90, 7.8], %)
|
||||
|> angledLine([
|
||||
segAng(rectangleSegmentA001),
|
||||
-segLen(rectangleSegmentA001)
|
||||
], %)
|
||||
|> lineTo([profileStartX(%), profileStartY(%)], %)
|
||||
|> close(%)`.replaceAll("\n", ""))
|
||||
|> close(%)`.replaceAll('\n', '')
|
||||
)
|
||||
|
||||
await crnRect2point1()
|
||||
await page.waitForTimeout(300)
|
||||
@ -1478,8 +1481,8 @@ test.describe('multi-profile sketching', () => {
|
||||
)
|
||||
await crnRect2point2()
|
||||
await page.waitForTimeout(300)
|
||||
await editor.expectEditor
|
||||
.toContain(`|> angledLine([0, 5.49], %, $rectangleSegmentA002)
|
||||
await editor.expectEditor.toContain(
|
||||
`|> angledLine([0, 5.49], %, $rectangleSegmentA002)
|
||||
|> angledLine([
|
||||
segAng(rectangleSegmentA002) - 90,
|
||||
4.14
|
||||
@ -1489,7 +1492,8 @@ test.describe('multi-profile sketching', () => {
|
||||
-segLen(rectangleSegmentA002)
|
||||
], %)
|
||||
|> lineTo([profileStartX(%), profileStartY(%)], %)
|
||||
|> close(%)`.replaceAll("\n", ""))
|
||||
|> close(%)`.replaceAll('\n', '')
|
||||
)
|
||||
})
|
||||
|
||||
await test.step('create two center rectangles in a row without unequip', async () => {
|
||||
@ -1502,8 +1506,8 @@ test.describe('multi-profile sketching', () => {
|
||||
)
|
||||
await cntrRect1point2()
|
||||
await page.waitForTimeout(300)
|
||||
await editor.expectEditor
|
||||
.toContain(`|> angledLine([0, 7.06], %, $rectangleSegmentA003)
|
||||
await editor.expectEditor.toContain(
|
||||
`|> angledLine([0, 7.06], %, $rectangleSegmentA003)
|
||||
|> angledLine([
|
||||
segAng(rectangleSegmentA003) + 90,
|
||||
4.34
|
||||
@ -1513,7 +1517,8 @@ test.describe('multi-profile sketching', () => {
|
||||
-segLen(rectangleSegmentA003)
|
||||
], %)
|
||||
|> lineTo([profileStartX(%), profileStartY(%)], %)
|
||||
|> close(%)`.replaceAll("\n", ""))
|
||||
|> close(%)`.replaceAll('\n', '')
|
||||
)
|
||||
await page.waitForTimeout(300)
|
||||
|
||||
await cntrRect2point1()
|
||||
@ -1523,8 +1528,8 @@ test.describe('multi-profile sketching', () => {
|
||||
)
|
||||
await cntrRect2point2()
|
||||
await page.waitForTimeout(300)
|
||||
await editor.expectEditor
|
||||
.toContain(`|> angledLine([0, 3.12], %, $rectangleSegmentA004)
|
||||
await editor.expectEditor.toContain(
|
||||
`|> angledLine([0, 3.12], %, $rectangleSegmentA004)
|
||||
|> angledLine([
|
||||
segAng(rectangleSegmentA004) + 90,
|
||||
6.24
|
||||
@ -1534,7 +1539,8 @@ test.describe('multi-profile sketching', () => {
|
||||
-segLen(rectangleSegmentA004)
|
||||
], %)
|
||||
|> lineTo([profileStartX(%), profileStartY(%)], %)
|
||||
|> close(%)`.replaceAll("\n", ""))
|
||||
|> close(%)`.replaceAll('\n', '')
|
||||
)
|
||||
})
|
||||
})
|
||||
|
||||
@ -1593,11 +1599,11 @@ profile003 = circle({ center = [6.92, -4.2], radius = 3.16 }, sketch001)
|
||||
const [rectEnd] = scene.makeMouseHelpers(757, 395)
|
||||
|
||||
await test.step('enter sketch and setup', async () => {
|
||||
await page.screenshot({ path: "toolbar1.png" })
|
||||
await page.screenshot({ path: 'toolbar1.png' })
|
||||
await pointOnSegment({ shouldDbClick: true })
|
||||
await page.waitForTimeout(600)
|
||||
|
||||
await page.screenshot({ path: "toolbar2.png" })
|
||||
await page.screenshot({ path: 'toolbar2.png' })
|
||||
await toolbar.lineBtn.click()
|
||||
await page.waitForTimeout(100)
|
||||
})
|
||||
@ -1648,8 +1654,8 @@ profile003 = circle({ center = [6.92, -4.2], radius = 3.16 }, sketch001)
|
||||
)
|
||||
await page.waitForTimeout(100)
|
||||
await rectEnd()
|
||||
await editor.expectEditor
|
||||
.toContain(`|> angledLine([180, 1.97], %, $rectangleSegmentA002)
|
||||
await editor.expectEditor.toContain(
|
||||
`|> angledLine([180, 1.97], %, $rectangleSegmentA002)
|
||||
|> angledLine([
|
||||
segAng(rectangleSegmentA002) + 90,
|
||||
3.88
|
||||
@ -1659,7 +1665,8 @@ profile003 = circle({ center = [6.92, -4.2], radius = 3.16 }, sketch001)
|
||||
-segLen(rectangleSegmentA002)
|
||||
], %)
|
||||
|> lineTo([profileStartX(%), profileStartY(%)], %)
|
||||
|> close(%)`.replaceAll("\n", ""))
|
||||
|> close(%)`.replaceAll('\n', '')
|
||||
)
|
||||
})
|
||||
})
|
||||
test('Can delete a profile in the editor while is sketch mode, and sketch mode does not break, can ctrl+z to undo after constraint with variable was added', async ({
|
||||
@ -1952,7 +1959,9 @@ extrude001 = extrude(75, thePart)
|
||||
})
|
||||
|
||||
await test.step('expect code to match initial conditions still', async () => {
|
||||
await editor.expectEditor.toContain(`thePart = startSketchOn('XZ') |> startProfileAt([7.53, 10.51], %)`)
|
||||
await editor.expectEditor.toContain(
|
||||
`thePart = startSketchOn('XZ') |> startProfileAt([7.53, 10.51], %)`
|
||||
)
|
||||
})
|
||||
|
||||
await test.step('equiping the line tool should break up the pipe expression', async () => {
|
||||
@ -2290,10 +2299,7 @@ loft([profile001, profile002])
|
||||
topProfileEdgeClickCoords.x,
|
||||
topProfileEdgeClickCoords.y
|
||||
)
|
||||
const [sideProfileEdgeClick] = scene.makeMouseHelpers(
|
||||
788,
|
||||
188,
|
||||
)
|
||||
const [sideProfileEdgeClick] = scene.makeMouseHelpers(788, 188)
|
||||
|
||||
const [rect1Crn1] = scene.makeMouseHelpers(592, 283)
|
||||
const [rect1Crn2] = scene.makeMouseHelpers(797, 268)
|
||||
|
@ -716,7 +716,7 @@ part002 = startSketchOn('XZ')
|
||||
|
||||
await editor.scrollToText('line([74.36, 130.4], %)', true)
|
||||
await page.getByText('line([74.36, 130.4], %)').click()
|
||||
await page.screenshot({ path: "ok.png" })
|
||||
await page.screenshot({ path: 'ok.png' })
|
||||
await page.getByRole('button', { name: 'Edit Sketch' }).click()
|
||||
|
||||
const line3 = await u.getSegmentBodyCoords(
|
||||
|
@ -261,7 +261,7 @@ const FileTreeItem = ({
|
||||
await codeManager.writeToFile()
|
||||
|
||||
// Prevent seeing the model built one piece at a time when changing files
|
||||
await kclManager.executeCode(true)
|
||||
await kclManager.executeCode({ zoomToFit: true })
|
||||
} else {
|
||||
// Let the lsp servers know we closed a file.
|
||||
onFileClose(currentFile?.path || null, project?.path || null)
|
||||
|
@ -195,7 +195,7 @@ export const ModelingMachineProvider = ({
|
||||
store.videoElement?.pause()
|
||||
|
||||
return kclManager
|
||||
.executeCode()
|
||||
.executeCode({ isPartialExecution: true })
|
||||
.then(() => {
|
||||
if (engineCommandManager.engineConnection?.idleMode) return
|
||||
|
||||
|
@ -188,7 +188,7 @@ export const SettingsAuthProviderBase = ({
|
||||
) {
|
||||
// Unit changes requires a re-exec of code
|
||||
// eslint-disable-next-line @typescript-eslint/no-floating-promises
|
||||
kclManager.executeCode(true)
|
||||
kclManager.executeCode({ zoomToFit: true })
|
||||
} else {
|
||||
// For any future logging we'd like to do
|
||||
// console.log(
|
||||
|
@ -59,7 +59,7 @@ export const Stream = () => {
|
||||
*/
|
||||
function executeCodeAndPlayStream() {
|
||||
// eslint-disable-next-line @typescript-eslint/no-floating-promises
|
||||
kclManager.executeCode(true).then(async () => {
|
||||
kclManager.executeCode({ zoomToFit: true }).then(async () => {
|
||||
await videoRef.current?.play().catch((e) => {
|
||||
console.warn('Video playing was prevented', e, videoRef.current)
|
||||
})
|
||||
|
@ -37,6 +37,7 @@ import { Operation } from 'wasm-lib/kcl/bindings/Operation'
|
||||
interface ExecuteArgs {
|
||||
ast?: Node<Program>
|
||||
zoomToFit?: boolean
|
||||
isPartialExecution?: boolean
|
||||
executionId?: number
|
||||
zoomOnRangeAndType?: {
|
||||
range: SourceRange
|
||||
@ -379,7 +380,8 @@ export class KclManager {
|
||||
await this.engineCommandManager.updateArtifactGraph(
|
||||
this.ast,
|
||||
execState.artifactCommands,
|
||||
execState.artifacts
|
||||
execState.artifacts,
|
||||
args.isPartialExecution,
|
||||
)
|
||||
this._executeCallback()
|
||||
if (!isInterrupted)
|
||||
@ -483,7 +485,7 @@ export class KclManager {
|
||||
this._cancelTokens.set(key, true)
|
||||
})
|
||||
}
|
||||
async executeCode(zoomToFit?: boolean): Promise<void> {
|
||||
async executeCode(opts?: { zoomToFit?: true, isPartialExecution?: true }): Promise<void> {
|
||||
const ast = await this.safeParse(codeManager.code)
|
||||
|
||||
if (!ast) {
|
||||
@ -491,10 +493,10 @@ export class KclManager {
|
||||
return
|
||||
}
|
||||
|
||||
zoomToFit = this.tryToZoomToFitOnCodeUpdate(ast, zoomToFit)
|
||||
zoomToFit = this.tryToZoomToFitOnCodeUpdate(ast, opts?.zoomToFit)
|
||||
|
||||
this.ast = { ...ast }
|
||||
return this.executeAst({ zoomToFit })
|
||||
return this.executeAst(opts)
|
||||
}
|
||||
/**
|
||||
* This will override the zoom to fit to zoom into the model if the previous AST was empty.
|
||||
|
@ -2090,14 +2090,22 @@ export class EngineCommandManager extends EventTarget {
|
||||
updateArtifactGraph(
|
||||
ast: Node<Program>,
|
||||
artifactCommands: ArtifactCommand[],
|
||||
execStateArtifacts: ExecState['artifacts']
|
||||
execStateArtifacts: ExecState['artifacts'],
|
||||
isPartialExecution?: true,
|
||||
) {
|
||||
this.artifactGraph = createArtifactGraph({
|
||||
const newGraphArtifacts = createArtifactGraph({
|
||||
artifactCommands,
|
||||
responseMap: this.responseMap,
|
||||
ast,
|
||||
execStateArtifacts,
|
||||
})
|
||||
if (isPartialExecution) {
|
||||
for (let [id, artifact] of newGraphArtifacts) {
|
||||
this.artifactGraph.set(id, artifact)
|
||||
}
|
||||
} else {
|
||||
this.artifactGraph = newGraphArtifacts
|
||||
}
|
||||
// TODO check if these still need to be deferred once e2e tests are working again.
|
||||
if (this.artifactGraph.size) {
|
||||
this.deferredArtifactEmptied(null)
|
||||
|
@ -109,7 +109,7 @@ function OnboardingWarningWeb(props: OnboardingResetWarningProps) {
|
||||
codeManager.updateCodeStateEditor(bracket)
|
||||
await codeManager.writeToFile()
|
||||
|
||||
await kclManager.executeCode(true)
|
||||
await kclManager.executeCode({ zoomToFit: true })
|
||||
props.setShouldShowWarning(false)
|
||||
}, reportRejection)}
|
||||
nextText="Overwrite code and continue"
|
||||
|
@ -11,7 +11,7 @@ export default function Sketching() {
|
||||
async function clearEditor() {
|
||||
// We do want to update both the state and editor here.
|
||||
codeManager.updateCodeStateEditor('')
|
||||
await kclManager.executeCode(true)
|
||||
await kclManager.executeCode({ zoomToFit: true })
|
||||
}
|
||||
|
||||
// eslint-disable-next-line @typescript-eslint/no-floating-promises
|
||||
|
@ -100,7 +100,7 @@ export function useDemoCode() {
|
||||
setTimeout(
|
||||
toSync(async () => {
|
||||
codeManager.updateCodeStateEditor(bracket)
|
||||
await kclManager.executeCode(true)
|
||||
await kclManager.executeCode({ zoomToFit: true })
|
||||
await codeManager.writeToFile()
|
||||
}, reportRejection)
|
||||
)
|
||||
|
Reference in New Issue
Block a user