* Remove deprecated syntax Signed-off-by: Nick Cameron <nrc@ncameron.org> * fix one test * fix sketch on revolved face test * fix test: empty-scene default-planes act as expected * fix up more tests * another fix * remove another const --------- Signed-off-by: Nick Cameron <nrc@ncameron.org> Co-authored-by: Kurt Hutten Irev-Dev <k.hutten@protonmail.ch>
		
			
				
	
	
		
			202 lines
		
	
	
		
			6.2 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			202 lines
		
	
	
		
			6.2 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
import type { Page } from '@playwright/test'
 | 
						|
 | 
						|
import type { HomePageFixture } from '@e2e/playwright/fixtures/homePageFixture'
 | 
						|
import type { CmdBarFixture } from '@e2e/playwright/fixtures/cmdBarFixture'
 | 
						|
import type { SceneFixture } from '@e2e/playwright/fixtures/sceneFixture'
 | 
						|
import type { EditorFixture } from '@e2e/playwright/fixtures/editorFixture'
 | 
						|
import {
 | 
						|
  PERSIST_MODELING_CONTEXT,
 | 
						|
  TEST_COLORS,
 | 
						|
  commonPoints,
 | 
						|
  getUtils,
 | 
						|
} from '@e2e/playwright/test-utils'
 | 
						|
import { expect, test } from '@e2e/playwright/zoo-test'
 | 
						|
 | 
						|
test.setTimeout(120000)
 | 
						|
 | 
						|
async function doBasicSketch(
 | 
						|
  page: Page,
 | 
						|
  openPanes: string[],
 | 
						|
  fixtures: {
 | 
						|
    homePage: HomePageFixture
 | 
						|
    cmdBar: CmdBarFixture
 | 
						|
    scene: SceneFixture
 | 
						|
    editor: EditorFixture
 | 
						|
  }
 | 
						|
) {
 | 
						|
  const { cmdBar, scene, homePage, editor } = fixtures
 | 
						|
  const u = await getUtils(page)
 | 
						|
  await page.setBodyDimensions({ width: 1200, height: 500 })
 | 
						|
  const PUR = 400 / 37.5 //pixeltoUnitRatio
 | 
						|
 | 
						|
  await homePage.goToModelingScene()
 | 
						|
  await scene.settled(cmdBar)
 | 
						|
  await u.waitForPageLoad()
 | 
						|
  await page.waitForTimeout(1000)
 | 
						|
  await u.openDebugPanel()
 | 
						|
 | 
						|
  // If we have the code pane open, we should see the code.
 | 
						|
  if (openPanes.includes('code')) {
 | 
						|
    await expect(u.codeLocator).toHaveText(``)
 | 
						|
  } else {
 | 
						|
    // Ensure we don't see the code.
 | 
						|
    await expect(u.codeLocator).not.toBeVisible()
 | 
						|
  }
 | 
						|
 | 
						|
  await expect(
 | 
						|
    page.getByRole('button', { name: 'Start Sketch' })
 | 
						|
  ).not.toBeDisabled()
 | 
						|
  await expect(page.getByRole('button', { name: 'Start Sketch' })).toBeVisible()
 | 
						|
 | 
						|
  // click on "Start Sketch" button
 | 
						|
  await u.clearCommandLogs()
 | 
						|
  await page.getByRole('button', { name: 'Start Sketch' }).click()
 | 
						|
  await page.waitForTimeout(100)
 | 
						|
 | 
						|
  // select a plane
 | 
						|
  await page.mouse.click(700, 200)
 | 
						|
 | 
						|
  if (openPanes.includes('code')) {
 | 
						|
    await expect(u.codeLocator).toHaveText(`sketch001 = startSketchOn(XZ)`)
 | 
						|
  }
 | 
						|
  await u.closeDebugPanel()
 | 
						|
 | 
						|
  // wait for line button to have aria-pressed as proxy for sketch mode
 | 
						|
  await expect
 | 
						|
    .poll(async () => page.getByTestId('line').getAttribute('aria-pressed'), {
 | 
						|
      timeout: 10_000,
 | 
						|
    })
 | 
						|
    .toBe('true')
 | 
						|
  await page.waitForTimeout(200)
 | 
						|
 | 
						|
  const startXPx = 600
 | 
						|
  await page.mouse.click(startXPx + PUR * 10, 500 - PUR * 10)
 | 
						|
  if (openPanes.includes('code')) {
 | 
						|
    await expect(u.codeLocator).toContainText(
 | 
						|
      `sketch001 = startSketchOn(XZ)profile001 = startProfile(sketch001, at = ${commonPoints.startAt})`
 | 
						|
    )
 | 
						|
  }
 | 
						|
  await page.waitForTimeout(500)
 | 
						|
  await page.mouse.click(startXPx + PUR * 20, 500 - PUR * 10)
 | 
						|
  await page.waitForTimeout(500)
 | 
						|
 | 
						|
  if (openPanes.includes('code')) {
 | 
						|
    await expect(
 | 
						|
      u.codeLocator
 | 
						|
    ).toHaveText(`sketch001 = startSketchOn(XZ)profile001 = startProfile(sketch001, at = ${commonPoints.startAt})
 | 
						|
  |> xLine(length = ${commonPoints.num1})`)
 | 
						|
  }
 | 
						|
  await page.waitForTimeout(500)
 | 
						|
  await page.mouse.click(startXPx + PUR * 20, 500 - PUR * 20)
 | 
						|
  if (openPanes.includes('code')) {
 | 
						|
    await expect(
 | 
						|
      u.codeLocator
 | 
						|
    ).toHaveText(`sketch001 = startSketchOn(XZ)profile001 = startProfile(sketch001, at = ${
 | 
						|
      commonPoints.startAt
 | 
						|
    })
 | 
						|
  |> xLine(length = ${commonPoints.num1})
 | 
						|
  |> yLine(length = ${commonPoints.num1 + 0.01})`)
 | 
						|
  } else {
 | 
						|
    await page.waitForTimeout(500)
 | 
						|
  }
 | 
						|
  await page.waitForTimeout(200)
 | 
						|
  await page.mouse.click(startXPx, 500 - PUR * 20)
 | 
						|
  if (openPanes.includes('code')) {
 | 
						|
    await expect(
 | 
						|
      u.codeLocator
 | 
						|
    ).toHaveText(`@settings(defaultLengthUnit = in)sketch001 = startSketchOn(XZ)profile001 = startProfile(sketch001, ${
 | 
						|
      commonPoints.startAt
 | 
						|
    })
 | 
						|
  |> xLine(length = ${commonPoints.num1})
 | 
						|
  |> yLine(length = ${commonPoints.num1 + 0.01})
 | 
						|
  |> xLine(length = ${commonPoints.num2 * -1})`)
 | 
						|
  }
 | 
						|
 | 
						|
  // deselect line tool
 | 
						|
  const btnLine = page.getByTestId('line')
 | 
						|
  const btnLineAriaPressed = await btnLine.getAttribute('aria-pressed')
 | 
						|
  if (btnLineAriaPressed === 'true') {
 | 
						|
    await btnLine.click()
 | 
						|
  }
 | 
						|
 | 
						|
  await page.waitForTimeout(100)
 | 
						|
 | 
						|
  const line1 = await u.getSegmentBodyCoords(`[data-overlay-index="${0}"]`, 0)
 | 
						|
  if (openPanes.includes('code')) {
 | 
						|
    await expect
 | 
						|
      .poll(async () => u.getGreatestPixDiff(line1, TEST_COLORS.WHITE))
 | 
						|
      .toBeLessThan(3)
 | 
						|
    await page.waitForTimeout(100)
 | 
						|
    await expect
 | 
						|
      .poll(async () => u.getGreatestPixDiff(line1, [249, 249, 249]))
 | 
						|
      .toBeLessThan(3)
 | 
						|
    await page.waitForTimeout(100)
 | 
						|
  }
 | 
						|
 | 
						|
  // click between first two clicks to get center of the line
 | 
						|
  await page.mouse.click(startXPx + PUR * 15, 500 - PUR * 10)
 | 
						|
  await page.waitForTimeout(100)
 | 
						|
 | 
						|
  if (openPanes.includes('code')) {
 | 
						|
    expect(await u.getGreatestPixDiff(line1, TEST_COLORS.BLUE)).toBeLessThan(3)
 | 
						|
  }
 | 
						|
 | 
						|
  // hold down shift
 | 
						|
  await page.keyboard.down('Shift')
 | 
						|
  await page.waitForTimeout(100)
 | 
						|
 | 
						|
  // click between the latest two clicks to get center of the line
 | 
						|
  await page.mouse.click(startXPx + PUR * 10, 500 - PUR * 20)
 | 
						|
  await page.waitForTimeout(100)
 | 
						|
 | 
						|
  // selected two lines therefore there should be two cursors
 | 
						|
  if (openPanes.includes('code')) {
 | 
						|
    await expect(page.locator('.cm-cursor')).toHaveCount(2)
 | 
						|
    await page.waitForTimeout(100)
 | 
						|
  }
 | 
						|
 | 
						|
  await page.getByRole('button', { name: 'constraints: open menu' }).click()
 | 
						|
  await page.getByRole('button', { name: 'Equal Length' }).click()
 | 
						|
 | 
						|
  // Open the code pane.
 | 
						|
  await u.openKclCodePanel()
 | 
						|
  await editor.expectEditor.toContain(
 | 
						|
    `@settings(defaultLengthUnit = in)sketch001 = startSketchOn(XZ)profile001 = startProfile(sketch001, at = ${
 | 
						|
      commonPoints.startAt
 | 
						|
    })
 | 
						|
  |> xLine(length = ${commonPoints.num1}, tag = $seg01)
 | 
						|
  |> yLine(length = ${commonPoints.num1 + 0.01})
 | 
						|
  |> xLine(length = -segLen(seg01))`,
 | 
						|
    { shouldNormalise: true }
 | 
						|
  )
 | 
						|
}
 | 
						|
 | 
						|
test.describe('Basic sketch', () => {
 | 
						|
  test('code pane open at start', async ({
 | 
						|
    page,
 | 
						|
    homePage,
 | 
						|
    cmdBar,
 | 
						|
    scene,
 | 
						|
    editor,
 | 
						|
  }) => {
 | 
						|
    await doBasicSketch(page, ['code'], { cmdBar, scene, homePage, editor })
 | 
						|
  })
 | 
						|
 | 
						|
  test('code pane closed at start', async ({
 | 
						|
    page,
 | 
						|
    homePage,
 | 
						|
    cmdBar,
 | 
						|
    scene,
 | 
						|
    editor,
 | 
						|
  }) => {
 | 
						|
    // Load the app with the code panes
 | 
						|
    await page.addInitScript(async (persistModelingContext) => {
 | 
						|
      localStorage.setItem(
 | 
						|
        persistModelingContext,
 | 
						|
        JSON.stringify({ openPanes: [] })
 | 
						|
      )
 | 
						|
    }, PERSIST_MODELING_CONTEXT)
 | 
						|
    await doBasicSketch(page, [], { cmdBar, scene, homePage, editor })
 | 
						|
  })
 | 
						|
})
 |