Merge branch 'main' into move-tests-to-electon
This commit is contained in:
		@ -33,7 +33,7 @@ test(
 | 
			
		||||
    await test.step('check code model connection works and that button is still enable once circle is selected ', async () => {
 | 
			
		||||
      await moveToCircle()
 | 
			
		||||
      const circleSnippet =
 | 
			
		||||
        'circle({ center: [318.33, 168.1], radius: 182.8 }, %)'
 | 
			
		||||
        'circle({ center = [318.33, 168.1], radius = 182.8 }, %)'
 | 
			
		||||
      await editor.expectState({
 | 
			
		||||
        activeLines: [
 | 
			
		||||
          "constsketch002=startSketchOn('XZ')"
 | 
			
		||||
@ -184,7 +184,7 @@ test.describe('verify sketch on chamfer works', () => {
 | 
			
		||||
        cameraPos: { x: 16020, y: -2000, z: 10500 },
 | 
			
		||||
        cameraTarget: { x: -150, y: -4500, z: -80 },
 | 
			
		||||
        beforeChamferSnippet: `angledLine([segAng(rectangleSegmentA001)-90,217.26],%,$seg01)
 | 
			
		||||
      chamfer({length:30,tags:[
 | 
			
		||||
      chamfer({length = 30,tags = [
 | 
			
		||||
      seg01,
 | 
			
		||||
      getNextAdjacentEdge(yo),
 | 
			
		||||
      getNextAdjacentEdge(seg02),
 | 
			
		||||
@ -215,8 +215,8 @@ test.describe('verify sketch on chamfer works', () => {
 | 
			
		||||
         segAng(rectangleSegmentA001) - 90,
 | 
			
		||||
         217.26
 | 
			
		||||
       ], %, $seg01)chamfer({
 | 
			
		||||
         length: 30,
 | 
			
		||||
         tags: [
 | 
			
		||||
         length = 30,
 | 
			
		||||
         tags = [
 | 
			
		||||
           seg01,
 | 
			
		||||
           getNextAdjacentEdge(yo),
 | 
			
		||||
           getNextAdjacentEdge(seg02)
 | 
			
		||||
@ -243,8 +243,8 @@ test.describe('verify sketch on chamfer works', () => {
 | 
			
		||||
        cameraPos: { x: -6200, y: 1500, z: 6200 },
 | 
			
		||||
        cameraTarget: { x: 8300, y: 1100, z: 4800 },
 | 
			
		||||
        beforeChamferSnippet: `angledLine([0, 268.43], %, $rectangleSegmentA001)chamfer({
 | 
			
		||||
         length: 30,
 | 
			
		||||
         tags: [
 | 
			
		||||
         length = 30,
 | 
			
		||||
         tags = [
 | 
			
		||||
           getNextAdjacentEdge(yo),
 | 
			
		||||
           getNextAdjacentEdge(seg02)
 | 
			
		||||
         ]
 | 
			
		||||
@ -270,8 +270,8 @@ test.describe('verify sketch on chamfer works', () => {
 | 
			
		||||
        cameraPos: { x: -1100, y: -7700, z: 1600 },
 | 
			
		||||
        cameraTarget: { x: 1450, y: 670, z: 4000 },
 | 
			
		||||
        beforeChamferSnippet: `chamfer({
 | 
			
		||||
         length: 30,
 | 
			
		||||
         tags: [getNextAdjacentEdge(yo)]
 | 
			
		||||
         length = 30,
 | 
			
		||||
         tags = [getNextAdjacentEdge(yo)]
 | 
			
		||||
       }, %)`,
 | 
			
		||||
        afterChamferSelectSnippet:
 | 
			
		||||
          'sketch005 = startSketchOn(extrude001, seg06)',
 | 
			
		||||
@ -308,17 +308,17 @@ test.describe('verify sketch on chamfer works', () => {
 | 
			
		||||
      |> close(%)
 | 
			
		||||
    extrude001 = extrude(100, sketch001)
 | 
			
		||||
      |> chamfer({
 | 
			
		||||
           length: 30,
 | 
			
		||||
           tags: [getOppositeEdge(seg01)]
 | 
			
		||||
           length = 30,
 | 
			
		||||
           tags = [getOppositeEdge(seg01)]
 | 
			
		||||
         }, %, $seg03)
 | 
			
		||||
      |> chamfer({ length: 30, tags: [seg01] }, %, $seg04)
 | 
			
		||||
      |> chamfer({ length = 30, tags = [seg01] }, %, $seg04)
 | 
			
		||||
      |> chamfer({
 | 
			
		||||
           length: 30,
 | 
			
		||||
           tags: [getNextAdjacentEdge(seg02)]
 | 
			
		||||
           length = 30,
 | 
			
		||||
           tags = [getNextAdjacentEdge(seg02)]
 | 
			
		||||
         }, %, $seg05)
 | 
			
		||||
      |> chamfer({
 | 
			
		||||
           length: 30,
 | 
			
		||||
           tags: [getNextAdjacentEdge(yo)]
 | 
			
		||||
           length = 30,
 | 
			
		||||
           tags = [getNextAdjacentEdge(yo)]
 | 
			
		||||
         }, %, $seg06)
 | 
			
		||||
    sketch005 = startSketchOn(extrude001, seg06)
 | 
			
		||||
      |> startProfileAt([-59.83,19.69], %)
 | 
			
		||||
@ -403,7 +403,7 @@ test.describe('verify sketch on chamfer works', () => {
 | 
			
		||||
        cameraPos: { x: 16020, y: -2000, z: 10500 },
 | 
			
		||||
        cameraTarget: { x: -150, y: -4500, z: -80 },
 | 
			
		||||
        beforeChamferSnippet: `angledLine([segAng(rectangleSegmentA001)-90,217.26],%,$seg01)
 | 
			
		||||
      chamfer({length:30,tags:[
 | 
			
		||||
      chamfer({length=30,tags=[
 | 
			
		||||
      seg01,
 | 
			
		||||
      getNextAdjacentEdge(yo),
 | 
			
		||||
      getNextAdjacentEdge(seg02),
 | 
			
		||||
@ -441,12 +441,12 @@ test.describe('verify sketch on chamfer works', () => {
 | 
			
		||||
  |> close(%)
 | 
			
		||||
extrude001 = extrude(100, sketch001)
 | 
			
		||||
chamf = chamfer({
 | 
			
		||||
       length: 30,
 | 
			
		||||
       tags: [getOppositeEdge(seg01)]
 | 
			
		||||
       length = 30,
 | 
			
		||||
       tags = [getOppositeEdge(seg01)]
 | 
			
		||||
     }, extrude001, $seg03)
 | 
			
		||||
  |> chamfer({
 | 
			
		||||
       length: 30,
 | 
			
		||||
       tags: [
 | 
			
		||||
       length = 30,
 | 
			
		||||
       tags = [
 | 
			
		||||
         seg01,
 | 
			
		||||
         getNextAdjacentEdge(yo),
 | 
			
		||||
         getNextAdjacentEdge(seg02)
 | 
			
		||||
@ -576,3 +576,129 @@ test(`Verify axis, origin, and horizontal snapping`, async ({
 | 
			
		||||
    )
 | 
			
		||||
  })
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
test(`Verify user can double-click to edit a sketch`, async ({
 | 
			
		||||
  app,
 | 
			
		||||
  editor,
 | 
			
		||||
  toolbar,
 | 
			
		||||
  scene,
 | 
			
		||||
}) => {
 | 
			
		||||
  const initialCode = `closedSketch = startSketchOn('XZ')
 | 
			
		||||
  |> circle({ center = [8, 5], radius = 2 }, %)
 | 
			
		||||
openSketch = startSketchOn('XY')
 | 
			
		||||
  |> startProfileAt([-5, 0], %)
 | 
			
		||||
  |> lineTo([0, 5], %)
 | 
			
		||||
  |> xLine(5, %)
 | 
			
		||||
  |> tangentialArcTo([10, 0], %)
 | 
			
		||||
`
 | 
			
		||||
  await app.initialise(initialCode)
 | 
			
		||||
 | 
			
		||||
  const pointInsideCircle = {
 | 
			
		||||
    x: app.viewPortSize.width * 0.63,
 | 
			
		||||
    y: app.viewPortSize.height * 0.5,
 | 
			
		||||
  }
 | 
			
		||||
  const pointOnPathAfterSketching = {
 | 
			
		||||
    x: app.viewPortSize.width * 0.58,
 | 
			
		||||
    y: app.viewPortSize.height * 0.5,
 | 
			
		||||
  }
 | 
			
		||||
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
 | 
			
		||||
  const [_clickOpenPath, moveToOpenPath, dblClickOpenPath] =
 | 
			
		||||
    scene.makeMouseHelpers(
 | 
			
		||||
      pointOnPathAfterSketching.x,
 | 
			
		||||
      pointOnPathAfterSketching.y
 | 
			
		||||
    )
 | 
			
		||||
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
 | 
			
		||||
  const [_clickCircle, moveToCircle, dblClickCircle] = scene.makeMouseHelpers(
 | 
			
		||||
    pointInsideCircle.x,
 | 
			
		||||
    pointInsideCircle.y
 | 
			
		||||
  )
 | 
			
		||||
 | 
			
		||||
  const exitSketch = async () => {
 | 
			
		||||
    await test.step(`Exit sketch mode`, async () => {
 | 
			
		||||
      await toolbar.exitSketchBtn.click()
 | 
			
		||||
      await expect(toolbar.exitSketchBtn).not.toBeVisible()
 | 
			
		||||
      await expect(toolbar.startSketchBtn).toBeEnabled()
 | 
			
		||||
    })
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  await test.step(`Double-click on the closed sketch`, async () => {
 | 
			
		||||
    await moveToCircle()
 | 
			
		||||
    await dblClickCircle()
 | 
			
		||||
    await expect(toolbar.startSketchBtn).not.toBeVisible()
 | 
			
		||||
    await expect(toolbar.exitSketchBtn).toBeVisible()
 | 
			
		||||
    await editor.expectState({
 | 
			
		||||
      activeLines: [`|>circle({center=[8,5],radius=2},%)`],
 | 
			
		||||
      highlightedCode: 'circle({center=[8,5],radius=2},%)',
 | 
			
		||||
      diagnostics: [],
 | 
			
		||||
    })
 | 
			
		||||
  })
 | 
			
		||||
 | 
			
		||||
  await exitSketch()
 | 
			
		||||
 | 
			
		||||
  await test.step(`Double-click on the open sketch`, async () => {
 | 
			
		||||
    await moveToOpenPath()
 | 
			
		||||
    await scene.expectPixelColor([250, 250, 250], pointOnPathAfterSketching, 15)
 | 
			
		||||
    // There is a full execution after exiting sketch that clears the scene.
 | 
			
		||||
    await app.page.waitForTimeout(500)
 | 
			
		||||
    await dblClickOpenPath()
 | 
			
		||||
    await expect(toolbar.startSketchBtn).not.toBeVisible()
 | 
			
		||||
    await expect(toolbar.exitSketchBtn).toBeVisible()
 | 
			
		||||
    // Wait for enter sketch mode to complete
 | 
			
		||||
    await app.page.waitForTimeout(500)
 | 
			
		||||
    await editor.expectState({
 | 
			
		||||
      activeLines: [`|>xLine(5,%)`],
 | 
			
		||||
      highlightedCode: 'xLine(5,%)',
 | 
			
		||||
      diagnostics: [],
 | 
			
		||||
    })
 | 
			
		||||
  })
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
test(`Offset plane point-and-click`, async ({
 | 
			
		||||
  app,
 | 
			
		||||
  scene,
 | 
			
		||||
  editor,
 | 
			
		||||
  toolbar,
 | 
			
		||||
  cmdBar,
 | 
			
		||||
}) => {
 | 
			
		||||
  await app.initialise()
 | 
			
		||||
 | 
			
		||||
  // One dumb hardcoded screen pixel value
 | 
			
		||||
  const testPoint = { x: 700, y: 150 }
 | 
			
		||||
  const [clickOnXzPlane] = scene.makeMouseHelpers(testPoint.x, testPoint.y)
 | 
			
		||||
  const expectedOutput = `plane001 = offsetPlane('XZ', 5)`
 | 
			
		||||
 | 
			
		||||
  await test.step(`Look for the blue of the XZ plane`, async () => {
 | 
			
		||||
    await scene.expectPixelColor([50, 51, 96], testPoint, 15)
 | 
			
		||||
  })
 | 
			
		||||
  await test.step(`Go through the command bar flow`, async () => {
 | 
			
		||||
    await toolbar.offsetPlaneButton.click()
 | 
			
		||||
    await cmdBar.expectState({
 | 
			
		||||
      stage: 'arguments',
 | 
			
		||||
      currentArgKey: 'plane',
 | 
			
		||||
      currentArgValue: '',
 | 
			
		||||
      headerArguments: { Plane: '', Distance: '' },
 | 
			
		||||
      highlightedHeaderArg: 'plane',
 | 
			
		||||
      commandName: 'Offset plane',
 | 
			
		||||
    })
 | 
			
		||||
    await clickOnXzPlane()
 | 
			
		||||
    await cmdBar.expectState({
 | 
			
		||||
      stage: 'arguments',
 | 
			
		||||
      currentArgKey: 'distance',
 | 
			
		||||
      currentArgValue: '5',
 | 
			
		||||
      headerArguments: { Plane: '1 plane', Distance: '' },
 | 
			
		||||
      highlightedHeaderArg: 'distance',
 | 
			
		||||
      commandName: 'Offset plane',
 | 
			
		||||
    })
 | 
			
		||||
    await cmdBar.progressCmdBar()
 | 
			
		||||
  })
 | 
			
		||||
 | 
			
		||||
  await test.step(`Confirm code is added to the editor, scene has changed`, async () => {
 | 
			
		||||
    await editor.expectEditor.toContain(expectedOutput)
 | 
			
		||||
    await editor.expectState({
 | 
			
		||||
      diagnostics: [],
 | 
			
		||||
      activeLines: [expectedOutput],
 | 
			
		||||
      highlightedCode: '',
 | 
			
		||||
    })
 | 
			
		||||
    await scene.expectPixelColor([74, 74, 74], testPoint, 15)
 | 
			
		||||
  })
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
		Reference in New Issue
	
	Block a user