Add skipWin to a large set of playwright tests (#5254)
* WIP: disable more tests * Fix lint and add 2 windows skips * A snapshot a day keeps the bugs away! 📷🐛 (OS: namespace-profile-ubuntu-8-cores) * Two more skips on win * A snapshot a day keeps the bugs away! 📷🐛 (OS: namespace-profile-ubuntu-8-cores) * More skips * A snapshot a day keeps the bugs away! 📷🐛 (OS: namespace-profile-ubuntu-8-cores) * More skips * A snapshot a day keeps the bugs away! 📷🐛 (OS: namespace-profile-ubuntu-8-cores) * More skips * A snapshot a day keeps the bugs away! 📷🐛 (OS: namespace-profile-ubuntu-8-cores) * One more skip * A snapshot a day keeps the bugs away! 📷🐛 (OS: namespace-profile-ubuntu-8-cores) * More skips * A snapshot a day keeps the bugs away! 📷🐛 (OS: namespace-profile-ubuntu-8-cores) * Replace many win32 skips with tag @skipWin * More clean upp --------- Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
This commit is contained in:
@ -144,7 +144,7 @@ async function doBasicSketch(
|
|||||||
|> xLine(-segLen(seg01), %)`)
|
|> xLine(-segLen(seg01), %)`)
|
||||||
}
|
}
|
||||||
|
|
||||||
test.describe('Basic sketch', () => {
|
test.describe('Basic sketch', { tag: ['@skipWin'] }, () => {
|
||||||
test.fixme('code pane open at start', async ({ page, homePage }) => {
|
test.fixme('code pane open at start', async ({ page, homePage }) => {
|
||||||
await doBasicSketch(page, homePage, ['code'])
|
await doBasicSketch(page, homePage, ['code'])
|
||||||
})
|
})
|
||||||
|
|||||||
@ -4,112 +4,125 @@ import { getUtils } from './test-utils'
|
|||||||
import { EngineCommand } from 'lang/std/artifactGraph'
|
import { EngineCommand } from 'lang/std/artifactGraph'
|
||||||
import { uuidv4 } from 'lib/utils'
|
import { uuidv4 } from 'lib/utils'
|
||||||
|
|
||||||
test.describe('Can create sketches on all planes and their back sides', () => {
|
test.describe(
|
||||||
const sketchOnPlaneAndBackSideTest = async (
|
'Can create sketches on all planes and their back sides',
|
||||||
page: Page,
|
{ tag: ['@skipWin'] },
|
||||||
homePage: HomePageFixture,
|
() => {
|
||||||
plane: string,
|
const sketchOnPlaneAndBackSideTest = async (
|
||||||
clickCoords: { x: number; y: number }
|
page: Page,
|
||||||
) => {
|
homePage: HomePageFixture,
|
||||||
const u = await getUtils(page)
|
plane: string,
|
||||||
const PUR = 400 / 37.5 //pixeltoUnitRatio
|
clickCoords: { x: number; y: number }
|
||||||
await page.setBodyDimensions({ width: 1200, height: 500 })
|
) => {
|
||||||
|
const u = await getUtils(page)
|
||||||
|
const PUR = 400 / 37.5 //pixeltoUnitRatio
|
||||||
|
await page.setBodyDimensions({ width: 1200, height: 500 })
|
||||||
|
|
||||||
await homePage.goToModelingScene()
|
await homePage.goToModelingScene()
|
||||||
await u.openDebugPanel()
|
await u.openDebugPanel()
|
||||||
|
|
||||||
const coord =
|
const coord =
|
||||||
plane === '-XY' || plane === '-YZ' || plane === 'XZ' ? -100 : 100
|
plane === '-XY' || plane === '-YZ' || plane === 'XZ' ? -100 : 100
|
||||||
const camCommand: EngineCommand = {
|
const camCommand: EngineCommand = {
|
||||||
type: 'modeling_cmd_req',
|
type: 'modeling_cmd_req',
|
||||||
cmd_id: uuidv4(),
|
cmd_id: uuidv4(),
|
||||||
cmd: {
|
cmd: {
|
||||||
type: 'default_camera_look_at',
|
type: 'default_camera_look_at',
|
||||||
center: { x: 0, y: 0, z: 0 },
|
center: { x: 0, y: 0, z: 0 },
|
||||||
vantage: { x: coord, y: coord, z: coord },
|
vantage: { x: coord, y: coord, z: coord },
|
||||||
up: { x: 0, y: 0, z: 1 },
|
up: { x: 0, y: 0, z: 1 },
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
const updateCamCommand: EngineCommand = {
|
const updateCamCommand: EngineCommand = {
|
||||||
type: 'modeling_cmd_req',
|
type: 'modeling_cmd_req',
|
||||||
cmd_id: uuidv4(),
|
cmd_id: uuidv4(),
|
||||||
cmd: {
|
cmd: {
|
||||||
type: 'default_camera_get_settings',
|
type: 'default_camera_get_settings',
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
const code = `sketch001 = startSketchOn('${plane}')
|
const code = `sketch001 = startSketchOn('${plane}')
|
||||||
|> startProfileAt([0.9, -1.22], %)`
|
|> startProfileAt([0.9, -1.22], %)`
|
||||||
|
|
||||||
await u.openDebugPanel()
|
await u.openDebugPanel()
|
||||||
|
|
||||||
await u.clearCommandLogs()
|
await u.clearCommandLogs()
|
||||||
await page.getByRole('button', { name: 'Start Sketch' }).click()
|
await page.getByRole('button', { name: 'Start Sketch' }).click()
|
||||||
|
|
||||||
await u.sendCustomCmd(camCommand)
|
await u.sendCustomCmd(camCommand)
|
||||||
await page.waitForTimeout(100)
|
await page.waitForTimeout(100)
|
||||||
await u.sendCustomCmd(updateCamCommand)
|
await u.sendCustomCmd(updateCamCommand)
|
||||||
|
|
||||||
await u.closeDebugPanel()
|
await u.closeDebugPanel()
|
||||||
await page.mouse.click(clickCoords.x, clickCoords.y)
|
await page.mouse.click(clickCoords.x, clickCoords.y)
|
||||||
await page.waitForTimeout(300) // wait for animation
|
await page.waitForTimeout(300) // wait for animation
|
||||||
|
|
||||||
await expect(
|
await expect(
|
||||||
page.getByRole('button', { name: 'line Line', exact: true })
|
page.getByRole('button', { name: 'line Line', exact: true })
|
||||||
).toBeVisible()
|
).toBeVisible()
|
||||||
|
|
||||||
// draw a line
|
// draw a line
|
||||||
const startXPx = 600
|
const startXPx = 600
|
||||||
|
|
||||||
await u.closeDebugPanel()
|
await u.closeDebugPanel()
|
||||||
await page.mouse.click(startXPx + PUR * 10, 500 - PUR * 10)
|
await page.mouse.click(startXPx + PUR * 10, 500 - PUR * 10)
|
||||||
|
|
||||||
await expect(page.locator('.cm-content')).toHaveText(code)
|
await expect(page.locator('.cm-content')).toHaveText(code)
|
||||||
|
|
||||||
await page
|
await page
|
||||||
.getByRole('button', { name: 'line Line', exact: true })
|
.getByRole('button', { name: 'line Line', exact: true })
|
||||||
.first()
|
.first()
|
||||||
.click()
|
.click()
|
||||||
await u.openAndClearDebugPanel()
|
await u.openAndClearDebugPanel()
|
||||||
await page.getByRole('button', { name: 'Exit Sketch' }).click()
|
await page.getByRole('button', { name: 'Exit Sketch' }).click()
|
||||||
await u.expectCmdLog('[data-message-type="execution-done"]')
|
await u.expectCmdLog('[data-message-type="execution-done"]')
|
||||||
|
|
||||||
await u.clearCommandLogs()
|
await u.clearCommandLogs()
|
||||||
await u.removeCurrentCode()
|
await u.removeCurrentCode()
|
||||||
|
}
|
||||||
|
test('XY', async ({ page, homePage }) => {
|
||||||
|
await sketchOnPlaneAndBackSideTest(
|
||||||
|
page,
|
||||||
|
homePage,
|
||||||
|
'XY',
|
||||||
|
{ x: 600, y: 388 } // red plane
|
||||||
|
// { x: 600, y: 400 }, // red plane // clicks grid helper and that causes problems, should fix so that these coords work too.
|
||||||
|
)
|
||||||
|
})
|
||||||
|
|
||||||
|
test('YZ', async ({ page, homePage }) => {
|
||||||
|
await sketchOnPlaneAndBackSideTest(page, homePage, 'YZ', {
|
||||||
|
x: 700,
|
||||||
|
y: 250,
|
||||||
|
}) // green plane
|
||||||
|
})
|
||||||
|
|
||||||
|
test('XZ', async ({ page, homePage }) => {
|
||||||
|
await sketchOnPlaneAndBackSideTest(page, homePage, '-XZ', {
|
||||||
|
x: 700,
|
||||||
|
y: 80,
|
||||||
|
}) // blue plane
|
||||||
|
})
|
||||||
|
|
||||||
|
test('-XY', async ({ page, homePage }) => {
|
||||||
|
await sketchOnPlaneAndBackSideTest(page, homePage, '-XY', {
|
||||||
|
x: 600,
|
||||||
|
y: 118,
|
||||||
|
}) // back of red plane
|
||||||
|
})
|
||||||
|
|
||||||
|
test('-YZ', async ({ page, homePage }) => {
|
||||||
|
await sketchOnPlaneAndBackSideTest(page, homePage, '-YZ', {
|
||||||
|
x: 700,
|
||||||
|
y: 219,
|
||||||
|
}) // back of green plan
|
||||||
|
})
|
||||||
|
|
||||||
|
test('-XZ', async ({ page, homePage }) => {
|
||||||
|
await sketchOnPlaneAndBackSideTest(page, homePage, 'XZ', {
|
||||||
|
x: 700,
|
||||||
|
y: 427,
|
||||||
|
}) // back of blue plane
|
||||||
|
})
|
||||||
}
|
}
|
||||||
test('XY', async ({ page, homePage }) => {
|
)
|
||||||
await sketchOnPlaneAndBackSideTest(
|
|
||||||
page,
|
|
||||||
homePage,
|
|
||||||
'XY',
|
|
||||||
{ x: 600, y: 388 } // red plane
|
|
||||||
// { x: 600, y: 400 }, // red plane // clicks grid helper and that causes problems, should fix so that these coords work too.
|
|
||||||
)
|
|
||||||
})
|
|
||||||
|
|
||||||
test('YZ', async ({ page, homePage }) => {
|
|
||||||
await sketchOnPlaneAndBackSideTest(page, homePage, 'YZ', { x: 700, y: 250 }) // green plane
|
|
||||||
})
|
|
||||||
|
|
||||||
test('XZ', async ({ page, homePage }) => {
|
|
||||||
await sketchOnPlaneAndBackSideTest(page, homePage, '-XZ', { x: 700, y: 80 }) // blue plane
|
|
||||||
})
|
|
||||||
|
|
||||||
test('-XY', async ({ page, homePage }) => {
|
|
||||||
await sketchOnPlaneAndBackSideTest(page, homePage, '-XY', {
|
|
||||||
x: 600,
|
|
||||||
y: 118,
|
|
||||||
}) // back of red plane
|
|
||||||
})
|
|
||||||
|
|
||||||
test('-YZ', async ({ page, homePage }) => {
|
|
||||||
await sketchOnPlaneAndBackSideTest(page, homePage, '-YZ', {
|
|
||||||
x: 700,
|
|
||||||
y: 219,
|
|
||||||
}) // back of green plan
|
|
||||||
})
|
|
||||||
|
|
||||||
test('-XZ', async ({ page, homePage }) => {
|
|
||||||
await sketchOnPlaneAndBackSideTest(page, homePage, 'XZ', { x: 700, y: 427 }) // back of blue plane
|
|
||||||
})
|
|
||||||
})
|
|
||||||
|
|||||||
@ -6,7 +6,7 @@ import { bracket } from 'lib/exampleKcl'
|
|||||||
import { TEST_CODE_LONG_WITH_ERROR_OUT_OF_VIEW } from './storageStates'
|
import { TEST_CODE_LONG_WITH_ERROR_OUT_OF_VIEW } from './storageStates'
|
||||||
import fsp from 'fs/promises'
|
import fsp from 'fs/promises'
|
||||||
|
|
||||||
test.describe('Code pane and errors', () => {
|
test.describe('Code pane and errors', { tag: ['@skipWin'] }, () => {
|
||||||
test('Typing KCL errors induces a badge on the code pane button', async ({
|
test('Typing KCL errors induces a badge on the code pane button', async ({
|
||||||
page,
|
page,
|
||||||
homePage,
|
homePage,
|
||||||
|
|||||||
@ -4,7 +4,7 @@ import { executorInputPath, getUtils } from './test-utils'
|
|||||||
import { KCL_DEFAULT_LENGTH } from 'lib/constants'
|
import { KCL_DEFAULT_LENGTH } from 'lib/constants'
|
||||||
import path from 'path'
|
import path from 'path'
|
||||||
|
|
||||||
test.describe('Command bar tests', () => {
|
test.describe('Command bar tests', { tag: ['@skipWin'] }, () => {
|
||||||
test('Extrude from command bar selects extrude line after', async ({
|
test('Extrude from command bar selects extrude line after', async ({
|
||||||
page,
|
page,
|
||||||
homePage,
|
homePage,
|
||||||
|
|||||||
@ -10,7 +10,7 @@ import {
|
|||||||
|
|
||||||
import { join } from 'path'
|
import { join } from 'path'
|
||||||
|
|
||||||
test.describe('Editor tests', () => {
|
test.describe('Editor tests', { tag: ['@skipWin'] }, () => {
|
||||||
test('can comment out code with ctrl+/', async ({ page, homePage }) => {
|
test('can comment out code with ctrl+/', async ({ page, homePage }) => {
|
||||||
const u = await getUtils(page)
|
const u = await getUtils(page)
|
||||||
await page.setBodyDimensions({ width: 1000, height: 500 })
|
await page.setBodyDimensions({ width: 1000, height: 500 })
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@ -134,7 +134,7 @@ test.fixme('Check the happy path, for basic changing color', () => {
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
test.describe('bad path', () => {
|
test.describe('bad path', { tag: ['@skipWin'] }, () => {
|
||||||
test(`bad edit prompt`, async ({
|
test(`bad edit prompt`, async ({
|
||||||
context,
|
context,
|
||||||
homePage,
|
homePage,
|
||||||
|
|||||||
@ -5,7 +5,7 @@ import { getUtils, executorInputPath } from './test-utils'
|
|||||||
import { TEST_CODE_TRIGGER_ENGINE_EXPORT_ERROR } from './storageStates'
|
import { TEST_CODE_TRIGGER_ENGINE_EXPORT_ERROR } from './storageStates'
|
||||||
import { bracket } from 'lib/exampleKcl'
|
import { bracket } from 'lib/exampleKcl'
|
||||||
|
|
||||||
test.describe('Regression tests', () => {
|
test.describe('Regression tests', { tag: ['@skipWin'] }, () => {
|
||||||
// bugs we found that don't fit neatly into other categories
|
// bugs we found that don't fit neatly into other categories
|
||||||
test('bad model has inline error #3251', async ({
|
test('bad model has inline error #3251', async ({
|
||||||
context,
|
context,
|
||||||
@ -239,12 +239,6 @@ extrude001 = extrude(sketch001, length = 50)
|
|||||||
'Position _ Is Out Of Range... regression test',
|
'Position _ Is Out Of Range... regression test',
|
||||||
{ tag: ['@skipWin'] },
|
{ tag: ['@skipWin'] },
|
||||||
async ({ context, page, homePage }) => {
|
async ({ context, page, homePage }) => {
|
||||||
// SKip on windows, its being weird.
|
|
||||||
test.skip(
|
|
||||||
process.platform === 'win32',
|
|
||||||
'This test is being weird on windows'
|
|
||||||
)
|
|
||||||
|
|
||||||
const u = await getUtils(page)
|
const u = await getUtils(page)
|
||||||
// const PUR = 400 / 37.5 //pixeltoUnitRatio
|
// const PUR = 400 / 37.5 //pixeltoUnitRatio
|
||||||
await page.setBodyDimensions({ width: 1200, height: 500 })
|
await page.setBodyDimensions({ width: 1200, height: 500 })
|
||||||
@ -425,13 +419,6 @@ extrude001 = extrude(sketch001, length = 50)
|
|||||||
'ensure you can not export while an export is already going',
|
'ensure you can not export while an export is already going',
|
||||||
{ tag: ['@skipLinux', '@skipWin'] },
|
{ tag: ['@skipLinux', '@skipWin'] },
|
||||||
async ({ page, homePage }) => {
|
async ({ page, homePage }) => {
|
||||||
// This is being weird on ubuntu and windows.
|
|
||||||
test.skip(
|
|
||||||
// eslint-disable-next-line jest/valid-title
|
|
||||||
process.platform === 'linux' || process.platform === 'win32',
|
|
||||||
'This test is being weird on ubuntu'
|
|
||||||
)
|
|
||||||
|
|
||||||
const u = await getUtils(page)
|
const u = await getUtils(page)
|
||||||
await test.step('Set up the code and durations', async () => {
|
await test.step('Set up the code and durations', async () => {
|
||||||
await page.addInitScript(
|
await page.addInitScript(
|
||||||
@ -560,8 +547,6 @@ extrude001 = extrude(sketch001, length = 50)
|
|||||||
page,
|
page,
|
||||||
homePage,
|
homePage,
|
||||||
}) => {
|
}) => {
|
||||||
// TODO: fix this test on windows after the electron migration
|
|
||||||
test.skip(process.platform === 'win32', 'Skip on windows')
|
|
||||||
const u = await getUtils(page)
|
const u = await getUtils(page)
|
||||||
|
|
||||||
// Constants and locators
|
// Constants and locators
|
||||||
|
|||||||
@ -10,7 +10,7 @@ import {
|
|||||||
} from './test-utils'
|
} from './test-utils'
|
||||||
import { uuidv4, roundOff } from 'lib/utils'
|
import { uuidv4, roundOff } from 'lib/utils'
|
||||||
|
|
||||||
test.describe('Sketch tests', () => {
|
test.describe('Sketch tests', { tag: ['@skipWin'] }, () => {
|
||||||
test('multi-sketch file shows multiple Edit Sketch buttons', async ({
|
test('multi-sketch file shows multiple Edit Sketch buttons', async ({
|
||||||
page,
|
page,
|
||||||
context,
|
context,
|
||||||
@ -644,8 +644,6 @@ test.describe('Sketch tests', () => {
|
|||||||
|> revolve({ axis = "X" }, %)`)
|
|> revolve({ axis = "X" }, %)`)
|
||||||
})
|
})
|
||||||
test('Can add multiple sketches', async ({ page, homePage }) => {
|
test('Can add multiple sketches', async ({ page, homePage }) => {
|
||||||
// TODO: fix this test on windows after the electron migration
|
|
||||||
test.skip(process.platform === 'win32', 'Skip on windows')
|
|
||||||
const u = await getUtils(page)
|
const u = await getUtils(page)
|
||||||
|
|
||||||
const viewportSize = { width: 1200, height: 500 }
|
const viewportSize = { width: 1200, height: 500 }
|
||||||
@ -843,8 +841,6 @@ test.describe('Sketch tests', () => {
|
|||||||
page,
|
page,
|
||||||
homePage,
|
homePage,
|
||||||
}) => {
|
}) => {
|
||||||
// TODO: fix this test on windows after the electron migration
|
|
||||||
test.skip(process.platform === 'win32', 'Skip on windows')
|
|
||||||
// this was a regression https://github.com/KittyCAD/modeling-app/issues/2832
|
// this was a regression https://github.com/KittyCAD/modeling-app/issues/2832
|
||||||
await page.addInitScript(async () => {
|
await page.addInitScript(async () => {
|
||||||
localStorage.setItem(
|
localStorage.setItem(
|
||||||
|
|||||||
@ -55,13 +55,6 @@ test.skip(
|
|||||||
'exports of each format should work',
|
'exports of each format should work',
|
||||||
{ tag: ['@snapshot', '@skipWin', '@skipMacos'] },
|
{ tag: ['@snapshot', '@skipWin', '@skipMacos'] },
|
||||||
async ({ page, context }) => {
|
async ({ page, context }) => {
|
||||||
// skip on macos and windows.
|
|
||||||
test.skip(
|
|
||||||
// eslint-disable-next-line jest/valid-title
|
|
||||||
process.platform === 'darwin' || process.platform === 'win32',
|
|
||||||
'Skip on macos and windows'
|
|
||||||
)
|
|
||||||
|
|
||||||
// FYI this test doesn't work with only engine running locally
|
// FYI this test doesn't work with only engine running locally
|
||||||
// And you will need to have the KittyCAD CLI installed
|
// And you will need to have the KittyCAD CLI installed
|
||||||
const u = await getUtils(page)
|
const u = await getUtils(page)
|
||||||
|
|||||||
@ -3,13 +3,8 @@ import { EngineCommand } from 'lang/std/artifactGraph'
|
|||||||
import { uuidv4 } from 'lib/utils'
|
import { uuidv4 } from 'lib/utils'
|
||||||
import { getUtils } from './test-utils'
|
import { getUtils } from './test-utils'
|
||||||
|
|
||||||
test.describe('Testing Camera Movement', () => {
|
test.describe('Testing Camera Movement', { tag: ['@skipWin'] }, () => {
|
||||||
test('Can move camera reliably', async ({ page, context, homePage }) => {
|
test('Can move camera reliably', async ({ page, context, homePage }) => {
|
||||||
// TODO: fix this test on windows too after the electron migration
|
|
||||||
const winOrMac =
|
|
||||||
process.platform === 'win32' || process.platform === 'darwin'
|
|
||||||
// eslint-disable-next-line
|
|
||||||
test.skip(winOrMac, 'Skip on windows')
|
|
||||||
const u = await getUtils(page)
|
const u = await getUtils(page)
|
||||||
await page.setBodyDimensions({ width: 1200, height: 500 })
|
await page.setBodyDimensions({ width: 1200, height: 500 })
|
||||||
|
|
||||||
@ -347,8 +342,6 @@ test.describe('Testing Camera Movement', () => {
|
|||||||
homePage,
|
homePage,
|
||||||
page,
|
page,
|
||||||
}) => {
|
}) => {
|
||||||
// TODO: fix this test on windows after the electron migration
|
|
||||||
test.skip(process.platform === 'win32', 'Skip on windows')
|
|
||||||
/**
|
/**
|
||||||
* Currently we only allow zooming by scroll when no other camera movement is happening,
|
* Currently we only allow zooming by scroll when no other camera movement is happening,
|
||||||
* set within cameraMouseDragGuards in cameraControls.ts,
|
* set within cameraMouseDragGuards in cameraControls.ts,
|
||||||
|
|||||||
@ -9,7 +9,7 @@ import {
|
|||||||
import { XOR } from 'lib/utils'
|
import { XOR } from 'lib/utils'
|
||||||
import path from 'node:path'
|
import path from 'node:path'
|
||||||
|
|
||||||
test.describe('Testing constraints', () => {
|
test.describe('Testing constraints', { tag: ['@skipWin'] }, () => {
|
||||||
test('Can constrain line length', async ({ page, homePage }) => {
|
test('Can constrain line length', async ({ page, homePage }) => {
|
||||||
await page.addInitScript(async () => {
|
await page.addInitScript(async () => {
|
||||||
localStorage.setItem(
|
localStorage.setItem(
|
||||||
@ -129,8 +129,6 @@ test.describe('Testing constraints', () => {
|
|||||||
await expect(page.getByTestId('segment-overlay')).toHaveCount(4)
|
await expect(page.getByTestId('segment-overlay')).toHaveCount(4)
|
||||||
})
|
})
|
||||||
test.describe('Test perpendicular distance constraint', () => {
|
test.describe('Test perpendicular distance constraint', () => {
|
||||||
// TODO: fix this test on windows after the electron migration
|
|
||||||
test.skip(process.platform === 'win32', 'Skip on windows')
|
|
||||||
const cases = [
|
const cases = [
|
||||||
{
|
{
|
||||||
testName: 'Add variable',
|
testName: 'Add variable',
|
||||||
@ -251,8 +249,6 @@ test.describe('Testing constraints', () => {
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
test.describe('Test distance between constraint', () => {
|
test.describe('Test distance between constraint', () => {
|
||||||
// TODO: fix this test on windows after the electron migration
|
|
||||||
test.skip(process.platform === 'win32', 'Skip on windows')
|
|
||||||
const cases = [
|
const cases = [
|
||||||
{
|
{
|
||||||
testName: 'Add variable',
|
testName: 'Add variable',
|
||||||
@ -472,8 +468,6 @@ test.describe('Testing constraints', () => {
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
test.describe('Test Angle constraint double segment selection', () => {
|
test.describe('Test Angle constraint double segment selection', () => {
|
||||||
// TODO: fix this test on windows after the electron migration
|
|
||||||
test.skip(process.platform === 'win32', 'Skip on windows')
|
|
||||||
const cases = [
|
const cases = [
|
||||||
{
|
{
|
||||||
testName: 'Add variable',
|
testName: 'Add variable',
|
||||||
@ -664,8 +658,6 @@ test.describe('Testing constraints', () => {
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
test.describe('Test Length constraint single selection', () => {
|
test.describe('Test Length constraint single selection', () => {
|
||||||
// TODO: fix this test on windows after the electron migration
|
|
||||||
test.skip(process.platform === 'win32', 'Skip on windows')
|
|
||||||
const cases = [
|
const cases = [
|
||||||
{
|
{
|
||||||
testName: 'Length - Add variable',
|
testName: 'Length - Add variable',
|
||||||
@ -851,8 +843,6 @@ part002 = startSketchOn('XZ')
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
test.describe('Two segment - no modal constraints', () => {
|
test.describe('Two segment - no modal constraints', () => {
|
||||||
// TODO: fix this test on windows after the electron migration
|
|
||||||
test.skip(process.platform === 'win32', 'Skip on windows')
|
|
||||||
const cases = [
|
const cases = [
|
||||||
{
|
{
|
||||||
codeAfter: `|> angledLine([83, segLen(seg01)], %)`,
|
codeAfter: `|> angledLine([83, segLen(seg01)], %)`,
|
||||||
|
|||||||
@ -3,9 +3,7 @@ import { getUtils } from './test-utils'
|
|||||||
import { uuidv4 } from 'lib/utils'
|
import { uuidv4 } from 'lib/utils'
|
||||||
import { TEST_CODE_GIZMO } from './storageStates'
|
import { TEST_CODE_GIZMO } from './storageStates'
|
||||||
|
|
||||||
test.describe('Testing Gizmo', () => {
|
test.describe('Testing Gizmo', { tag: ['@skipWin'] }, () => {
|
||||||
// TODO: fix this test on windows after the electron migration
|
|
||||||
test.skip(process.platform === 'win32', 'Skip on windows')
|
|
||||||
const cases = [
|
const cases = [
|
||||||
{
|
{
|
||||||
testDescription: 'top view',
|
testDescription: 'top view',
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@ -5,256 +5,248 @@ import { Coords2d } from 'lang/std/sketch'
|
|||||||
import { KCL_DEFAULT_LENGTH } from 'lib/constants'
|
import { KCL_DEFAULT_LENGTH } from 'lib/constants'
|
||||||
import { uuidv4 } from 'lib/utils'
|
import { uuidv4 } from 'lib/utils'
|
||||||
|
|
||||||
test.describe('Testing selections', () => {
|
test.describe('Testing selections', { tag: ['@skipWin'] }, () => {
|
||||||
test.setTimeout(90_000)
|
test.setTimeout(90_000)
|
||||||
test(
|
test('Selections work on fresh and edited sketch', async ({
|
||||||
'Selections work on fresh and edited sketch',
|
page,
|
||||||
{ tag: ['@skipWin'] },
|
homePage,
|
||||||
async ({ page, homePage }) => {
|
}) => {
|
||||||
// Skip on windows its being weird.
|
// tests mapping works on fresh sketch and edited sketch
|
||||||
test.skip(process.platform === 'win32', 'Skip on windows')
|
// tests using hovers which is the same as selections, because if
|
||||||
|
// source ranges are wrong, hovers won't work
|
||||||
|
const u = await getUtils(page)
|
||||||
|
const PUR = 400 / 37.5 //pixeltoUnitRatio
|
||||||
|
await page.setBodyDimensions({ width: 1200, height: 500 })
|
||||||
|
|
||||||
// tests mapping works on fresh sketch and edited sketch
|
await homePage.goToModelingScene()
|
||||||
// tests using hovers which is the same as selections, because if
|
await u.openDebugPanel()
|
||||||
// source ranges are wrong, hovers won't work
|
|
||||||
const u = await getUtils(page)
|
|
||||||
const PUR = 400 / 37.5 //pixeltoUnitRatio
|
|
||||||
await page.setBodyDimensions({ width: 1200, height: 500 })
|
|
||||||
|
|
||||||
await homePage.goToModelingScene()
|
const yAxisClick = () =>
|
||||||
await u.openDebugPanel()
|
test.step('Click on Y axis', async () => {
|
||||||
|
await page.mouse.move(600, 200, { steps: 5 })
|
||||||
|
await page.mouse.click(600, 200)
|
||||||
|
await page.waitForTimeout(100)
|
||||||
|
})
|
||||||
|
const xAxisClickAfterExitingSketch = () =>
|
||||||
|
test.step(`Click on X axis after exiting sketch, which shifts it at the moment`, async () => {
|
||||||
|
await page.mouse.click(639, 278)
|
||||||
|
await page.waitForTimeout(100)
|
||||||
|
})
|
||||||
|
const emptySpaceHover = () =>
|
||||||
|
test.step('Hover over empty space', async () => {
|
||||||
|
await page.mouse.move(700, 143, { steps: 5 })
|
||||||
|
await expect(page.locator('.hover-highlight')).not.toBeVisible()
|
||||||
|
})
|
||||||
|
const emptySpaceClick = () =>
|
||||||
|
test.step(`Click in empty space`, async () => {
|
||||||
|
await page.mouse.click(700, 143)
|
||||||
|
await expect(page.locator('.cm-line').last()).toHaveClass(
|
||||||
|
/cm-activeLine/
|
||||||
|
)
|
||||||
|
})
|
||||||
|
const topHorzSegmentClick = () =>
|
||||||
|
page.mouse
|
||||||
|
.click(startXPx, 500 - PUR * 20)
|
||||||
|
.then(() => page.waitForTimeout(100))
|
||||||
|
const bottomHorzSegmentClick = () =>
|
||||||
|
page.mouse
|
||||||
|
.click(startXPx + PUR * 10, 500 - PUR * 10)
|
||||||
|
.then(() => page.waitForTimeout(100))
|
||||||
|
|
||||||
const yAxisClick = () =>
|
await u.clearCommandLogs()
|
||||||
test.step('Click on Y axis', async () => {
|
await expect(
|
||||||
await page.mouse.move(600, 200, { steps: 5 })
|
page.getByRole('button', { name: 'Start Sketch' })
|
||||||
await page.mouse.click(600, 200)
|
).not.toBeDisabled()
|
||||||
await page.waitForTimeout(100)
|
await page.getByRole('button', { name: 'Start Sketch' }).click()
|
||||||
})
|
|
||||||
const xAxisClickAfterExitingSketch = () =>
|
|
||||||
test.step(`Click on X axis after exiting sketch, which shifts it at the moment`, async () => {
|
|
||||||
await page.mouse.click(639, 278)
|
|
||||||
await page.waitForTimeout(100)
|
|
||||||
})
|
|
||||||
const emptySpaceHover = () =>
|
|
||||||
test.step('Hover over empty space', async () => {
|
|
||||||
await page.mouse.move(700, 143, { steps: 5 })
|
|
||||||
await expect(page.locator('.hover-highlight')).not.toBeVisible()
|
|
||||||
})
|
|
||||||
const emptySpaceClick = () =>
|
|
||||||
test.step(`Click in empty space`, async () => {
|
|
||||||
await page.mouse.click(700, 143)
|
|
||||||
await expect(page.locator('.cm-line').last()).toHaveClass(
|
|
||||||
/cm-activeLine/
|
|
||||||
)
|
|
||||||
})
|
|
||||||
const topHorzSegmentClick = () =>
|
|
||||||
page.mouse
|
|
||||||
.click(startXPx, 500 - PUR * 20)
|
|
||||||
.then(() => page.waitForTimeout(100))
|
|
||||||
const bottomHorzSegmentClick = () =>
|
|
||||||
page.mouse
|
|
||||||
.click(startXPx + PUR * 10, 500 - PUR * 10)
|
|
||||||
.then(() => page.waitForTimeout(100))
|
|
||||||
|
|
||||||
await u.clearCommandLogs()
|
// select a plane
|
||||||
await expect(
|
await page.mouse.click(700, 200)
|
||||||
page.getByRole('button', { name: 'Start Sketch' })
|
await page.waitForTimeout(700) // wait for animation
|
||||||
).not.toBeDisabled()
|
|
||||||
await page.getByRole('button', { name: 'Start Sketch' }).click()
|
|
||||||
|
|
||||||
// select a plane
|
const startXPx = 600
|
||||||
await page.mouse.click(700, 200)
|
await u.closeDebugPanel()
|
||||||
await page.waitForTimeout(700) // wait for animation
|
await page.mouse.click(startXPx + PUR * 10, 500 - PUR * 10)
|
||||||
|
await expect(page.locator('.cm-content'))
|
||||||
const startXPx = 600
|
.toHaveText(`sketch001 = startSketchOn('XZ')
|
||||||
await u.closeDebugPanel()
|
|
||||||
await page.mouse.click(startXPx + PUR * 10, 500 - PUR * 10)
|
|
||||||
await expect(page.locator('.cm-content'))
|
|
||||||
.toHaveText(`sketch001 = startSketchOn('XZ')
|
|
||||||
|> startProfileAt(${commonPoints.startAt}, %)`)
|
|> startProfileAt(${commonPoints.startAt}, %)`)
|
||||||
|
|
||||||
await page.waitForTimeout(100)
|
await page.waitForTimeout(100)
|
||||||
await page.mouse.click(startXPx + PUR * 20, 500 - PUR * 10)
|
await page.mouse.click(startXPx + PUR * 20, 500 - PUR * 10)
|
||||||
|
|
||||||
await expect(page.locator('.cm-content'))
|
await expect(page.locator('.cm-content'))
|
||||||
.toHaveText(`sketch001 = startSketchOn('XZ')
|
.toHaveText(`sketch001 = startSketchOn('XZ')
|
||||||
|> startProfileAt(${commonPoints.startAt}, %)
|
|> startProfileAt(${commonPoints.startAt}, %)
|
||||||
|> xLine(${commonPoints.num1}, %)`)
|
|> xLine(${commonPoints.num1}, %)`)
|
||||||
|
|
||||||
await page.waitForTimeout(100)
|
await page.waitForTimeout(100)
|
||||||
await page.mouse.click(startXPx + PUR * 20, 500 - PUR * 20)
|
await page.mouse.click(startXPx + PUR * 20, 500 - PUR * 20)
|
||||||
await expect(page.locator('.cm-content'))
|
await expect(page.locator('.cm-content'))
|
||||||
.toHaveText(`sketch001 = startSketchOn('XZ')
|
.toHaveText(`sketch001 = startSketchOn('XZ')
|
||||||
|> startProfileAt(${commonPoints.startAt}, %)
|
|> startProfileAt(${commonPoints.startAt}, %)
|
||||||
|> xLine(${commonPoints.num1}, %)
|
|> xLine(${commonPoints.num1}, %)
|
||||||
|> yLine(${commonPoints.num1 + 0.01}, %)`)
|
|> yLine(${commonPoints.num1 + 0.01}, %)`)
|
||||||
await page.waitForTimeout(100)
|
await page.waitForTimeout(100)
|
||||||
await page.mouse.click(startXPx, 500 - PUR * 20)
|
await page.mouse.click(startXPx, 500 - PUR * 20)
|
||||||
await expect(page.locator('.cm-content'))
|
await expect(page.locator('.cm-content'))
|
||||||
.toHaveText(`sketch001 = startSketchOn('XZ')
|
.toHaveText(`sketch001 = startSketchOn('XZ')
|
||||||
|> startProfileAt(${commonPoints.startAt}, %)
|
|> startProfileAt(${commonPoints.startAt}, %)
|
||||||
|> xLine(${commonPoints.num1}, %)
|
|> xLine(${commonPoints.num1}, %)
|
||||||
|> yLine(${commonPoints.num1 + 0.01}, %)
|
|> yLine(${commonPoints.num1 + 0.01}, %)
|
||||||
|> xLine(${commonPoints.num2 * -1}, %)`)
|
|> xLine(${commonPoints.num2 * -1}, %)`)
|
||||||
|
|
||||||
// deselect line tool
|
// deselect line tool
|
||||||
await page.getByRole('button', { name: 'line Line', exact: true }).click()
|
await page.getByRole('button', { name: 'line Line', exact: true }).click()
|
||||||
|
|
||||||
await u.closeDebugPanel()
|
await u.closeDebugPanel()
|
||||||
const selectionSequence = async () => {
|
const selectionSequence = async () => {
|
||||||
await expect(page.getByTestId('hover-highlight')).not.toBeVisible()
|
await expect(page.getByTestId('hover-highlight')).not.toBeVisible()
|
||||||
|
|
||||||
await page.waitForTimeout(100)
|
|
||||||
await page.mouse.move(startXPx + PUR * 15, 500 - PUR * 10)
|
|
||||||
|
|
||||||
await expect(page.getByTestId('hover-highlight').first()).toBeVisible()
|
|
||||||
// bg-yellow-300/70 is more brittle than hover-highlight, but is closer to the user experience
|
|
||||||
// and will be an easy fix if it breaks because we change the colour
|
|
||||||
await expect(page.locator('.bg-yellow-300\\/70')).toBeVisible()
|
|
||||||
// check mousing off, than mousing onto another line
|
|
||||||
await page.mouse.move(startXPx + PUR * 10, 500 - PUR * 15) // mouse off
|
|
||||||
await expect(page.getByTestId('hover-highlight')).not.toBeVisible()
|
|
||||||
await page.mouse.move(startXPx + PUR * 10, 500 - PUR * 20) // mouse onto another line
|
|
||||||
await expect(page.getByTestId('hover-highlight').first()).toBeVisible()
|
|
||||||
|
|
||||||
// now check clicking works including axis
|
|
||||||
|
|
||||||
// click a segment hold shift and click an axis, see that a relevant constraint is enabled
|
|
||||||
const constrainButton = page.getByRole('button', {
|
|
||||||
name: 'Length: open menu',
|
|
||||||
})
|
|
||||||
const absXButton = page.getByRole('button', { name: 'Absolute X' })
|
|
||||||
|
|
||||||
await test.step(`Select a segment and an axis, see that a relevant constraint is enabled`, async () => {
|
|
||||||
await topHorzSegmentClick()
|
|
||||||
await page.keyboard.down('Shift')
|
|
||||||
await constrainButton.click()
|
|
||||||
await expect(absXButton).toBeDisabled()
|
|
||||||
await page.waitForTimeout(100)
|
|
||||||
await yAxisClick()
|
|
||||||
await page.keyboard.up('Shift')
|
|
||||||
await constrainButton.click()
|
|
||||||
await absXButton.and(page.locator(':not([disabled])')).waitFor()
|
|
||||||
await expect(absXButton).not.toBeDisabled()
|
|
||||||
})
|
|
||||||
|
|
||||||
await emptySpaceClick()
|
|
||||||
await page.waitForTimeout(100)
|
|
||||||
|
|
||||||
await test.step(`Same selection but click the axis first`, async () => {
|
|
||||||
await yAxisClick()
|
|
||||||
await constrainButton.click()
|
|
||||||
await expect(absXButton).toBeDisabled()
|
|
||||||
await page.keyboard.down('Shift')
|
|
||||||
await page.waitForTimeout(100)
|
|
||||||
await topHorzSegmentClick()
|
|
||||||
await page.waitForTimeout(100)
|
|
||||||
|
|
||||||
await page.keyboard.up('Shift')
|
|
||||||
await constrainButton.click()
|
|
||||||
await expect(absXButton).not.toBeDisabled()
|
|
||||||
})
|
|
||||||
|
|
||||||
// clear selection by clicking on nothing
|
|
||||||
await emptySpaceClick()
|
|
||||||
|
|
||||||
// check the same selection again by putting cursor in code first then selecting axis
|
|
||||||
await test.step(`Same selection but code selection then axis`, async () => {
|
|
||||||
await page
|
|
||||||
.getByText(` |> xLine(${commonPoints.num2 * -1}, %)`)
|
|
||||||
.click()
|
|
||||||
await page.keyboard.down('Shift')
|
|
||||||
await constrainButton.click()
|
|
||||||
await expect(absXButton).toBeDisabled()
|
|
||||||
await page.waitForTimeout(100)
|
|
||||||
await yAxisClick()
|
|
||||||
await page.keyboard.up('Shift')
|
|
||||||
await constrainButton.click()
|
|
||||||
await expect(absXButton).not.toBeDisabled()
|
|
||||||
})
|
|
||||||
|
|
||||||
// clear selection by clicking on nothing
|
|
||||||
await emptySpaceClick()
|
|
||||||
|
|
||||||
// select segment in editor than another segment in scene and check there are two cursors
|
|
||||||
// TODO change this back to shift click in the scene, not cmd click in the editor
|
|
||||||
await bottomHorzSegmentClick()
|
|
||||||
|
|
||||||
await expect(page.locator('.cm-cursor')).toHaveCount(1)
|
|
||||||
|
|
||||||
await page.keyboard.down(
|
|
||||||
process.platform === 'linux' ? 'Control' : 'Meta'
|
|
||||||
)
|
|
||||||
await page.waitForTimeout(100)
|
|
||||||
await page.getByText(` |> xLine(${commonPoints.num2 * -1}, %)`).click()
|
|
||||||
|
|
||||||
await expect(page.locator('.cm-cursor')).toHaveCount(2)
|
|
||||||
await page.waitForTimeout(500)
|
|
||||||
await page.keyboard.up(
|
|
||||||
process.platform === 'linux' ? 'Control' : 'Meta'
|
|
||||||
)
|
|
||||||
|
|
||||||
// clear selection by clicking on nothing
|
|
||||||
await emptySpaceClick()
|
|
||||||
}
|
|
||||||
|
|
||||||
await test.step(`Test hovering and selecting on fresh sketch`, async () => {
|
|
||||||
await selectionSequence()
|
|
||||||
})
|
|
||||||
|
|
||||||
// hovering in fresh sketch worked, lets try exiting and re-entering
|
|
||||||
await u.openAndClearDebugPanel()
|
|
||||||
await page.getByRole('button', { name: 'Exit Sketch' }).click()
|
|
||||||
await page.waitForTimeout(200)
|
|
||||||
// wait for execution done
|
|
||||||
|
|
||||||
await u.expectCmdLog('[data-message-type="execution-done"]')
|
|
||||||
await u.closeDebugPanel()
|
|
||||||
|
|
||||||
// select a line, this verifies that sketches in the scene can be selected outside of sketch mode
|
|
||||||
await topHorzSegmentClick()
|
|
||||||
await xAxisClickAfterExitingSketch()
|
|
||||||
await page.waitForTimeout(100)
|
await page.waitForTimeout(100)
|
||||||
await emptySpaceHover()
|
await page.mouse.move(startXPx + PUR * 15, 500 - PUR * 10)
|
||||||
|
|
||||||
// enter sketch again
|
await expect(page.getByTestId('hover-highlight').first()).toBeVisible()
|
||||||
await u.doAndWaitForCmd(
|
// bg-yellow-300/70 is more brittle than hover-highlight, but is closer to the user experience
|
||||||
() => page.getByRole('button', { name: 'Edit Sketch' }).click(),
|
// and will be an easy fix if it breaks because we change the colour
|
||||||
'default_camera_get_settings'
|
await expect(page.locator('.bg-yellow-300\\/70')).toBeVisible()
|
||||||
)
|
// check mousing off, than mousing onto another line
|
||||||
|
await page.mouse.move(startXPx + PUR * 10, 500 - PUR * 15) // mouse off
|
||||||
|
await expect(page.getByTestId('hover-highlight')).not.toBeVisible()
|
||||||
|
await page.mouse.move(startXPx + PUR * 10, 500 - PUR * 20) // mouse onto another line
|
||||||
|
await expect(page.getByTestId('hover-highlight').first()).toBeVisible()
|
||||||
|
|
||||||
await page.waitForTimeout(450) // wait for animation
|
// now check clicking works including axis
|
||||||
|
|
||||||
await u.openAndClearDebugPanel()
|
// click a segment hold shift and click an axis, see that a relevant constraint is enabled
|
||||||
await u.sendCustomCmd({
|
const constrainButton = page.getByRole('button', {
|
||||||
type: 'modeling_cmd_req',
|
name: 'Length: open menu',
|
||||||
cmd_id: uuidv4(),
|
|
||||||
cmd: {
|
|
||||||
type: 'default_camera_look_at',
|
|
||||||
center: { x: 0, y: 0, z: 0 },
|
|
||||||
vantage: { x: 0, y: -1378.01, z: 0 },
|
|
||||||
up: { x: 0, y: 0, z: 1 },
|
|
||||||
},
|
|
||||||
})
|
})
|
||||||
await page.waitForTimeout(100)
|
const absXButton = page.getByRole('button', { name: 'Absolute X' })
|
||||||
await u.sendCustomCmd({
|
|
||||||
type: 'modeling_cmd_req',
|
await test.step(`Select a segment and an axis, see that a relevant constraint is enabled`, async () => {
|
||||||
cmd_id: uuidv4(),
|
await topHorzSegmentClick()
|
||||||
cmd: {
|
await page.keyboard.down('Shift')
|
||||||
type: 'default_camera_get_settings',
|
await constrainButton.click()
|
||||||
},
|
await expect(absXButton).toBeDisabled()
|
||||||
|
await page.waitForTimeout(100)
|
||||||
|
await yAxisClick()
|
||||||
|
await page.keyboard.up('Shift')
|
||||||
|
await constrainButton.click()
|
||||||
|
await absXButton.and(page.locator(':not([disabled])')).waitFor()
|
||||||
|
await expect(absXButton).not.toBeDisabled()
|
||||||
})
|
})
|
||||||
await page.waitForTimeout(100)
|
|
||||||
|
|
||||||
await emptySpaceClick()
|
await emptySpaceClick()
|
||||||
|
await page.waitForTimeout(100)
|
||||||
|
|
||||||
await u.closeDebugPanel()
|
await test.step(`Same selection but click the axis first`, async () => {
|
||||||
|
await yAxisClick()
|
||||||
|
await constrainButton.click()
|
||||||
|
await expect(absXButton).toBeDisabled()
|
||||||
|
await page.keyboard.down('Shift')
|
||||||
|
await page.waitForTimeout(100)
|
||||||
|
await topHorzSegmentClick()
|
||||||
|
await page.waitForTimeout(100)
|
||||||
|
|
||||||
await test.step(`Test hovering and selecting on edited sketch`, async () => {
|
await page.keyboard.up('Shift')
|
||||||
await selectionSequence()
|
await constrainButton.click()
|
||||||
|
await expect(absXButton).not.toBeDisabled()
|
||||||
})
|
})
|
||||||
|
|
||||||
|
// clear selection by clicking on nothing
|
||||||
|
await emptySpaceClick()
|
||||||
|
|
||||||
|
// check the same selection again by putting cursor in code first then selecting axis
|
||||||
|
await test.step(`Same selection but code selection then axis`, async () => {
|
||||||
|
await page.getByText(` |> xLine(${commonPoints.num2 * -1}, %)`).click()
|
||||||
|
await page.keyboard.down('Shift')
|
||||||
|
await constrainButton.click()
|
||||||
|
await expect(absXButton).toBeDisabled()
|
||||||
|
await page.waitForTimeout(100)
|
||||||
|
await yAxisClick()
|
||||||
|
await page.keyboard.up('Shift')
|
||||||
|
await constrainButton.click()
|
||||||
|
await expect(absXButton).not.toBeDisabled()
|
||||||
|
})
|
||||||
|
|
||||||
|
// clear selection by clicking on nothing
|
||||||
|
await emptySpaceClick()
|
||||||
|
|
||||||
|
// select segment in editor than another segment in scene and check there are two cursors
|
||||||
|
// TODO change this back to shift click in the scene, not cmd click in the editor
|
||||||
|
await bottomHorzSegmentClick()
|
||||||
|
|
||||||
|
await expect(page.locator('.cm-cursor')).toHaveCount(1)
|
||||||
|
|
||||||
|
await page.keyboard.down(
|
||||||
|
process.platform === 'linux' ? 'Control' : 'Meta'
|
||||||
|
)
|
||||||
|
await page.waitForTimeout(100)
|
||||||
|
await page.getByText(` |> xLine(${commonPoints.num2 * -1}, %)`).click()
|
||||||
|
|
||||||
|
await expect(page.locator('.cm-cursor')).toHaveCount(2)
|
||||||
|
await page.waitForTimeout(500)
|
||||||
|
await page.keyboard.up(process.platform === 'linux' ? 'Control' : 'Meta')
|
||||||
|
|
||||||
|
// clear selection by clicking on nothing
|
||||||
|
await emptySpaceClick()
|
||||||
}
|
}
|
||||||
)
|
|
||||||
|
await test.step(`Test hovering and selecting on fresh sketch`, async () => {
|
||||||
|
await selectionSequence()
|
||||||
|
})
|
||||||
|
|
||||||
|
// hovering in fresh sketch worked, lets try exiting and re-entering
|
||||||
|
await u.openAndClearDebugPanel()
|
||||||
|
await page.getByRole('button', { name: 'Exit Sketch' }).click()
|
||||||
|
await page.waitForTimeout(200)
|
||||||
|
// wait for execution done
|
||||||
|
|
||||||
|
await u.expectCmdLog('[data-message-type="execution-done"]')
|
||||||
|
await u.closeDebugPanel()
|
||||||
|
|
||||||
|
// select a line, this verifies that sketches in the scene can be selected outside of sketch mode
|
||||||
|
await topHorzSegmentClick()
|
||||||
|
await xAxisClickAfterExitingSketch()
|
||||||
|
await page.waitForTimeout(100)
|
||||||
|
await emptySpaceHover()
|
||||||
|
|
||||||
|
// enter sketch again
|
||||||
|
await u.doAndWaitForCmd(
|
||||||
|
() => page.getByRole('button', { name: 'Edit Sketch' }).click(),
|
||||||
|
'default_camera_get_settings'
|
||||||
|
)
|
||||||
|
|
||||||
|
await page.waitForTimeout(450) // wait for animation
|
||||||
|
|
||||||
|
await u.openAndClearDebugPanel()
|
||||||
|
await u.sendCustomCmd({
|
||||||
|
type: 'modeling_cmd_req',
|
||||||
|
cmd_id: uuidv4(),
|
||||||
|
cmd: {
|
||||||
|
type: 'default_camera_look_at',
|
||||||
|
center: { x: 0, y: 0, z: 0 },
|
||||||
|
vantage: { x: 0, y: -1378.01, z: 0 },
|
||||||
|
up: { x: 0, y: 0, z: 1 },
|
||||||
|
},
|
||||||
|
})
|
||||||
|
await page.waitForTimeout(100)
|
||||||
|
await u.sendCustomCmd({
|
||||||
|
type: 'modeling_cmd_req',
|
||||||
|
cmd_id: uuidv4(),
|
||||||
|
cmd: {
|
||||||
|
type: 'default_camera_get_settings',
|
||||||
|
},
|
||||||
|
})
|
||||||
|
await page.waitForTimeout(100)
|
||||||
|
|
||||||
|
await emptySpaceClick()
|
||||||
|
|
||||||
|
await u.closeDebugPanel()
|
||||||
|
|
||||||
|
await test.step(`Test hovering and selecting on edited sketch`, async () => {
|
||||||
|
await selectionSequence()
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
test('Solids should be select and deletable', async ({ page, homePage }) => {
|
test('Solids should be select and deletable', async ({ page, homePage }) => {
|
||||||
test.setTimeout(90_000)
|
test.setTimeout(90_000)
|
||||||
@ -492,8 +484,6 @@ test.describe('Testing selections', () => {
|
|||||||
page,
|
page,
|
||||||
homePage,
|
homePage,
|
||||||
}) => {
|
}) => {
|
||||||
// TODO: fix this test on windows after the electron migration
|
|
||||||
test.skip(process.platform === 'win32', 'Skip on windows')
|
|
||||||
const u = await getUtils(page)
|
const u = await getUtils(page)
|
||||||
await page.addInitScript(async (KCL_DEFAULT_LENGTH) => {
|
await page.addInitScript(async (KCL_DEFAULT_LENGTH) => {
|
||||||
localStorage.setItem(
|
localStorage.setItem(
|
||||||
|
|||||||
@ -435,11 +435,6 @@ test.describe('Text-to-CAD tests', () => {
|
|||||||
async ({ page, homePage }) => {
|
async ({ page, homePage }) => {
|
||||||
// Let this test run longer since we've seen it timeout.
|
// Let this test run longer since we've seen it timeout.
|
||||||
test.setTimeout(180_000)
|
test.setTimeout(180_000)
|
||||||
// skip on windows
|
|
||||||
test.skip(
|
|
||||||
process.platform === 'win32',
|
|
||||||
'This test is flaky, skipping for now'
|
|
||||||
)
|
|
||||||
|
|
||||||
const u = await getUtils(page)
|
const u = await getUtils(page)
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user