Previous: ``` startProfileAt([x, y], %) startProfileAt([x, y], sketch001) ``` New: ``` startProfile(%, at = [x, y]) startProfile(sketch001, at = [x, y]) ```
		
			
				
	
	
		
			109 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			109 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
import path from 'path'
 | 
						|
import { expect, test } from '@e2e/playwright/zoo-test'
 | 
						|
import * as fsp from 'fs/promises'
 | 
						|
 | 
						|
test.describe('Import UI tests', () => {
 | 
						|
  test('shows toast when trying to sketch on imported face, and hovering over imported geometry should NOT highlight any code', async ({
 | 
						|
    context,
 | 
						|
    page,
 | 
						|
    homePage,
 | 
						|
    toolbar,
 | 
						|
    scene,
 | 
						|
    editor,
 | 
						|
    cmdBar,
 | 
						|
  }) => {
 | 
						|
    await context.folderSetupFn(async (dir) => {
 | 
						|
      const projectDir = path.join(dir, 'import-test')
 | 
						|
      await fsp.mkdir(projectDir, { recursive: true })
 | 
						|
 | 
						|
      // Create the imported file
 | 
						|
      await fsp.writeFile(
 | 
						|
        path.join(projectDir, 'toBeImported.kcl'),
 | 
						|
        `sketch001 = startSketchOn(XZ)
 | 
						|
profile001 = startProfile(sketch001, at = [281.54, 305.81])
 | 
						|
  |> angledLine(angle = 0, length = 123.43, tag = $rectangleSegmentA001)
 | 
						|
  |> angledLine(angle = segAng(rectangleSegmentA001) - 90, length = 85.99)
 | 
						|
  |> angledLine(angle = segAng(rectangleSegmentA001), length = -segLen(rectangleSegmentA001))
 | 
						|
  |> line(endAbsolute = [profileStartX(%), profileStartY(%)])
 | 
						|
  |> close()
 | 
						|
extrude(profile001, length = 100)`
 | 
						|
      )
 | 
						|
 | 
						|
      // Create the main file that imports
 | 
						|
      await fsp.writeFile(
 | 
						|
        path.join(projectDir, 'main.kcl'),
 | 
						|
        `import "toBeImported.kcl" as importedCube
 | 
						|
 | 
						|
importedCube
 | 
						|
 | 
						|
sketch001 = startSketchOn(XZ)
 | 
						|
profile001 = startProfile(sketch001, at = [-134.53, -56.17])
 | 
						|
  |> angledLine(angle = 0, length = 79.05, tag = $rectangleSegmentA001)
 | 
						|
  |> angledLine(angle = segAng(rectangleSegmentA001) - 90, length = 76.28)
 | 
						|
  |> angledLine(angle = segAng(rectangleSegmentA001), length = -segLen(rectangleSegmentA001), tag = $seg01)
 | 
						|
  |> line(endAbsolute = [profileStartX(%), profileStartY(%)], tag = $seg02)
 | 
						|
  |> close()
 | 
						|
extrude001 = extrude(profile001, length = 100)
 | 
						|
sketch003 = startSketchOn(extrude001, face = seg02)
 | 
						|
sketch002 = startSketchOn(extrude001, face = seg01)`
 | 
						|
      )
 | 
						|
    })
 | 
						|
 | 
						|
    await homePage.openProject('import-test')
 | 
						|
    await scene.settled(cmdBar)
 | 
						|
 | 
						|
    await scene.moveCameraTo(
 | 
						|
      {
 | 
						|
        x: -114,
 | 
						|
        y: -897,
 | 
						|
        z: 475,
 | 
						|
      },
 | 
						|
      {
 | 
						|
        x: -114,
 | 
						|
        y: -51,
 | 
						|
        z: 83,
 | 
						|
      }
 | 
						|
    )
 | 
						|
    const [_, hoverOverNonImport] = scene.makeMouseHelpers(611, 364)
 | 
						|
    const [importedFaceClick, hoverOverImported] = scene.makeMouseHelpers(
 | 
						|
      940,
 | 
						|
      150
 | 
						|
    )
 | 
						|
 | 
						|
    await test.step('check code highlight works for code define in the file being edited', async () => {
 | 
						|
      await hoverOverNonImport()
 | 
						|
      await editor.expectState({
 | 
						|
        highlightedCode: 'startProfile(sketch001,at = [-134.53,-56.17])',
 | 
						|
        diagnostics: [],
 | 
						|
        activeLines: ['import"toBeImported.kcl"asimportedCube'],
 | 
						|
      })
 | 
						|
    })
 | 
						|
 | 
						|
    await test.step('check code does nothing when geometry is defined in an import', async () => {
 | 
						|
      await hoverOverImported()
 | 
						|
      await editor.expectState({
 | 
						|
        highlightedCode: '',
 | 
						|
        diagnostics: [],
 | 
						|
        activeLines: ['import"toBeImported.kcl"asimportedCube'],
 | 
						|
      })
 | 
						|
    })
 | 
						|
 | 
						|
    await test.step('check the user is warned when sketching on a imported face', async () => {
 | 
						|
      // Start sketch mode
 | 
						|
      await toolbar.startSketchPlaneSelection()
 | 
						|
 | 
						|
      // Click on a face from the imported model
 | 
						|
      await importedFaceClick()
 | 
						|
 | 
						|
      // Verify toast appears with correct content
 | 
						|
      await expect(page.getByText('This face is from an import')).toBeVisible()
 | 
						|
      await expect(
 | 
						|
        page.locator('.font-mono').getByText('toBeImported.kcl')
 | 
						|
      ).toBeVisible()
 | 
						|
      await expect(
 | 
						|
        page.getByText('Please select this from the files pane to edit')
 | 
						|
      ).toBeVisible()
 | 
						|
    })
 | 
						|
  })
 | 
						|
})
 |