Extreme time eaten by gizmo test fixes. All passing now.

This commit is contained in:
49lf
2024-11-28 18:11:28 -05:00
parent 566183ffa7
commit 78616f4074
8 changed files with 914 additions and 887 deletions

View File

@ -51,11 +51,10 @@ export class SceneFixture {
}
expectState = async (expected: SceneSerialised) => {
return expect
.poll(() => this._serialiseScene(), {
message: `Expected scene state to match`,
})
.toEqual(expected)
return expect.poll(async () => await this._serialiseScene(), {
intervals: [1_000, 2_000, 10_000],
timeout: 60000,
}).toEqual(expected)
}
reConstruct = (page: Page) => {
@ -176,7 +175,10 @@ export class SceneFixture {
type: 'default_camera_get_settings',
},
})
await this.waitForExecutionDone()
await this.page
.locator(`[data-receive-command-type="default_camera_get_settings"]`)
.first()
.waitFor()
const position = await Promise.all([
this.page.getByTestId('cam-x-position').inputValue().then(Number),
this.page.getByTestId('cam-y-position').inputValue().then(Number),
@ -227,6 +229,7 @@ export class SceneFixture {
}
async clickGizmoMenuItem(name: string) {
await this.gizmo.hover()
await this.gizmo.click({ button: 'right' })
const buttonToTest = this.page.getByRole('button', {
name: name,

View File

@ -98,12 +98,16 @@ async function removeCurrentCode(page: Page) {
}
export async function sendCustomCmd(page: Page, cmd: EngineCommand) {
await page.getByTestId('custom-cmd-input').fill(JSON.stringify(cmd))
const json = JSON.stringify(cmd)
await page.getByTestId('custom-cmd-input').fill(json)
await expect(page.getByTestId('custom-cmd-input')).toHaveValue(json)
await page.getByTestId('custom-cmd-send-button').scrollIntoViewIfNeeded()
await page.getByTestId('custom-cmd-send-button').click({ delay: 1000 })
await page.getByTestId('custom-cmd-send-button').click()
}
async function clearCommandLogs(page: Page) {
await page.getByTestId('custom-cmd-input').fill('')
await page.getByTestId('clear-commands').scrollIntoViewIfNeeded()
await page.getByTestId('clear-commands').click()
}

View File

@ -1,18 +1,11 @@
import { test, expect } from '@playwright/test'
import { test, expect } from './zoo-test'
import { getUtils, setup, tearDown, TEST_COLORS } from './test-utils'
import { getUtils, TEST_COLORS } from './test-utils'
import { XOR } from 'lib/utils'
test.beforeEach(async ({ context, page }, testInfo) => {
await setup(context, page, testInfo)
})
test.afterEach(async ({ page }, testInfo) => {
await tearDown(page, testInfo)
})
test.describe('Testing constraints', () => {
test('Can constrain line length', async ({ page }) => {
test('Can constrain line length', async ({ page, homePage }) => {
await page.addInitScript(async () => {
localStorage.setItem(
'persistCode',
@ -27,9 +20,10 @@ test.describe('Testing constraints', () => {
const u = await getUtils(page)
const PUR = 400 / 37.5 //pixeltoUnitRatio
await page.setViewportSize({ width: 1200, height: 500 })
await page.setBodyDimensions({ width: 1200, height: 500 })
await u.waitForAuthSkipAppStart()
await homePage.goToModelingScene()
await u.waitForPageLoad()
await u.openDebugPanel()
await u.expectCmdLog('[data-message-type="execution-done"]')
@ -70,10 +64,8 @@ test.describe('Testing constraints', () => {
await page.keyboard.press('Escape')
await expect(
page.getByRole('button', { name: 'Exit Sketch' })
).not.toBeVisible()
})
test(`Remove constraints`, async ({ page }) => {
await page.addInitScript(async () => {
).not.toBeVisible() })
test(`Remove constraints`, async ({ page, homePage }) => { await page.addInitScript(async () => {
localStorage.setItem(
'persistCode',
`yo = 79
@ -92,9 +84,10 @@ part002 = startSketchOn('XZ')
)
})
const u = await getUtils(page)
await page.setViewportSize({ width: 1200, height: 500 })
await page.setBodyDimensions({ width: 1200, height: 500 })
await u.waitForAuthSkipAppStart()
await homePage.goToModelingScene()
await u.waitForPageLoad()
await page.getByText('line([74.36, 130.4], %, $seg01)').click()
await page.getByRole('button', { name: 'Edit Sketch' }).click()
@ -116,8 +109,7 @@ part002 = startSketchOn('XZ')
await expect(activeLinesContent[0]).toHaveText('|> line([39.13, 68.63], %)')
// checking the count of the overlays is a good proxy check that the client sketch scene is in a good state
await expect(page.getByTestId('segment-overlay')).toHaveCount(4)
})
await expect(page.getByTestId('segment-overlay')).toHaveCount(4) })
test.describe('Test perpendicular distance constraint', () => {
const cases = [
{
@ -130,8 +122,7 @@ part002 = startSketchOn('XZ')
},
] as const
for (const { testName, offset } of cases) {
test(`${testName}`, async ({ page }) => {
await page.addInitScript(async () => {
test(`${testName}`, async ({ page, homePage }) => { await page.addInitScript(async () => {
localStorage.setItem(
'persistCode',
`yo = 5
@ -150,9 +141,10 @@ part002 = startSketchOn('XZ')
)
})
const u = await getUtils(page)
await page.setViewportSize({ width: 1200, height: 500 })
await page.setBodyDimensions({ width: 1200, height: 500 })
await u.waitForAuthSkipAppStart()
await homePage.goToModelingScene()
await u.waitForPageLoad()
await page.getByText('line([74.36, 130.4], %, $seg01)').click()
await page.getByRole('button', { name: 'Edit Sketch' }).click()
@ -201,8 +193,7 @@ part002 = startSketchOn('XZ')
await expect(activeLinesContent[1]).toHaveText(`}, %)`)
// checking the count of the overlays is a good proxy check that the client sketch scene is in a good state
await expect(page.getByTestId('segment-overlay')).toHaveCount(4)
})
await expect(page.getByTestId('segment-overlay')).toHaveCount(4) })
}
})
test.describe('Test distance between constraint', () => {
@ -229,8 +220,7 @@ part002 = startSketchOn('XZ')
},
] as const
for (const { testName, value, constraint } of cases) {
test(`${constraint} - ${testName}`, async ({ page }) => {
await page.addInitScript(async () => {
test(`${constraint} - ${testName}`, async ({ page, homePage }) => { await page.addInitScript(async () => {
localStorage.setItem(
'persistCode',
`yo = 5
@ -249,9 +239,10 @@ part002 = startSketchOn('XZ')
)
})
const u = await getUtils(page)
await page.setViewportSize({ width: 1200, height: 500 })
await page.setBodyDimensions({ width: 1200, height: 500 })
await u.waitForAuthSkipAppStart()
await homePage.goToModelingScene()
await u.waitForPageLoad()
await page.getByText('line([74.36, 130.4], %)').click()
await page.getByRole('button', { name: 'Edit Sketch' }).click()
@ -303,8 +294,7 @@ part002 = startSketchOn('XZ')
)
// checking the count of the overlays is a good proxy check that the client sketch scene is in a good state
await expect(page.getByTestId('segment-overlay')).toHaveCount(4)
})
await expect(page.getByTestId('segment-overlay')).toHaveCount(4) })
}
})
test.describe('Test ABS distance constraint', () => {
@ -335,8 +325,7 @@ part002 = startSketchOn('XZ')
},
] as const
for (const { testName, addVariable, value, constraint } of cases) {
test(`${constraint} - ${testName}`, async ({ page }) => {
await page.addInitScript(async () => {
test(`${constraint} - ${testName}`, async ({ page, homePage }) => { await page.addInitScript(async () => {
localStorage.setItem(
'persistCode',
`yo = 5
@ -355,9 +344,10 @@ part002 = startSketchOn('XZ')
)
})
const u = await getUtils(page)
await page.setViewportSize({ width: 1200, height: 500 })
await page.setBodyDimensions({ width: 1200, height: 500 })
await u.waitForAuthSkipAppStart()
await homePage.goToModelingScene()
await u.waitForPageLoad()
await page.getByText('line([74.36, 130.4], %)').click()
await page.getByRole('button', { name: 'Edit Sketch' }).click()
@ -410,8 +400,7 @@ part002 = startSketchOn('XZ')
)
// checking the count of the overlays is a good proxy check that the client sketch scene is in a good state
await expect(page.getByTestId('segment-overlay')).toHaveCount(4)
})
await expect(page.getByTestId('segment-overlay')).toHaveCount(4) })
}
})
test.describe('Test Angle constraint double segment selection', () => {
@ -442,8 +431,7 @@ part002 = startSketchOn('XZ')
},
] as const
for (const { testName, addVariable, value, axisSelect } of cases) {
test(`${testName}`, async ({ page }) => {
await page.addInitScript(async () => {
test(`${testName}`, async ({ page, homePage }) => { await page.addInitScript(async () => {
localStorage.setItem(
'persistCode',
`yo = 5
@ -462,9 +450,10 @@ part002 = startSketchOn('XZ')
)
})
const u = await getUtils(page)
await page.setViewportSize({ width: 1200, height: 500 })
await page.setBodyDimensions({ width: 1200, height: 500 })
await u.waitForAuthSkipAppStart()
await homePage.goToModelingScene()
await u.waitForPageLoad()
await page.getByText('line([74.36, 130.4], %)').click()
await page.getByRole('button', { name: 'Edit Sketch' }).click()
@ -520,8 +509,7 @@ part002 = startSketchOn('XZ')
)
// checking the count of the overlays is a good proxy check that the client sketch scene is in a good state
await expect(page.getByTestId('segment-overlay')).toHaveCount(4)
})
await expect(page.getByTestId('segment-overlay')).toHaveCount(4) })
}
})
test.describe('Test Angle/Length constraint single selection', () => {
@ -552,8 +540,7 @@ part002 = startSketchOn('XZ')
},
] as const
for (const { testName, addVariable, value, constraint } of cases) {
test(`${testName}`, async ({ page }) => {
await page.addInitScript(async () => {
test(`${testName}`, async ({ page, homePage }) => { await page.addInitScript(async () => {
localStorage.setItem(
'persistCode',
`yo = 5
@ -572,9 +559,10 @@ part002 = startSketchOn('XZ')
)
})
const u = await getUtils(page)
await page.setViewportSize({ width: 1200, height: 500 })
await page.setBodyDimensions({ width: 1200, height: 500 })
await u.waitForAuthSkipAppStart()
await homePage.goToModelingScene()
await u.waitForPageLoad()
await page.getByText('line([74.36, 130.4], %)').click()
await page.getByRole('button', { name: 'Edit Sketch' }).click()
@ -604,8 +592,7 @@ part002 = startSketchOn('XZ')
await expect(page.locator('.cm-activeLine')).toHaveText(changedCode)
// checking the count of the overlays is a good proxy check that the client sketch scene is in a good state
await expect(page.getByTestId('segment-overlay')).toHaveCount(4)
})
await expect(page.getByTestId('segment-overlay')).toHaveCount(4) })
}
})
test.describe('Many segments - no modal constraints', () => {
@ -628,8 +615,7 @@ part002 = startSketchOn('XZ')
},
] as const
for (const { codeAfter, constraintName } of cases) {
test(`${constraintName}`, async ({ page }) => {
await page.addInitScript(async (customCode) => {
test(`${constraintName}`, async ({ page, homePage }) => { await page.addInitScript(async (customCode) => {
localStorage.setItem(
'persistCode',
`yo = 5
@ -648,9 +634,10 @@ part002 = startSketchOn('XZ')
)
})
const u = await getUtils(page)
await page.setViewportSize({ width: 1200, height: 500 })
await page.setBodyDimensions({ width: 1200, height: 500 })
await u.waitForAuthSkipAppStart()
await homePage.goToModelingScene()
await u.waitForPageLoad()
await page.getByText('line([74.36, 130.4], %)').click()
await page.getByRole('button', { name: 'Edit Sketch' }).click()
@ -701,8 +688,7 @@ part002 = startSketchOn('XZ')
// if the code is an active line then the cursor should be on that line
await expect(line).toHaveText(codeAfter[i])
})
)
})
) })
}
})
test.describe('Two segment - no modal constraints', () => {
@ -725,8 +711,7 @@ part002 = startSketchOn('XZ')
},
] as const
for (const { codeAfter, constraintName } of cases) {
test(`${constraintName}`, async ({ page }) => {
await page.addInitScript(async () => {
test(`${constraintName}`, async ({ page, homePage }) => { await page.addInitScript(async () => {
localStorage.setItem(
'persistCode',
`yo = 5
@ -744,9 +729,10 @@ part002 = startSketchOn('XZ')
)
})
const u = await getUtils(page)
await page.setViewportSize({ width: 1200, height: 500 })
await page.setBodyDimensions({ width: 1200, height: 500 })
await u.waitForAuthSkipAppStart()
await homePage.goToModelingScene()
await u.waitForPageLoad()
await page.getByText('line([74.36, 130.4], %)').click()
await page.getByRole('button', { name: 'Edit Sketch' }).click()
@ -784,8 +770,7 @@ part002 = startSketchOn('XZ')
await expect(activeLinesContent[0]).toHaveText(
'|> line([74.36, 130.4], %, $seg01)'
)
await expect(activeLinesContent[1]).toHaveText(codeAfter)
})
await expect(activeLinesContent[1]).toHaveText(codeAfter) })
}
})
test.describe('Axis & segment - no modal constraints', () => {
@ -802,8 +787,7 @@ part002 = startSketchOn('XZ')
},
] as const
for (const { codeAfter, constraintName, axisClick } of cases) {
test(`${constraintName}`, async ({ page }) => {
await page.addInitScript(async () => {
test(`${constraintName}`, async ({ page, homePage }) => { await page.addInitScript(async () => {
localStorage.setItem(
'persistCode',
`yo = 5
@ -821,9 +805,10 @@ part002 = startSketchOn('XZ')
)
})
const u = await getUtils(page)
await page.setViewportSize({ width: 1200, height: 500 })
await page.setBodyDimensions({ width: 1200, height: 500 })
await u.waitForAuthSkipAppStart()
await homePage.goToModelingScene()
await u.waitForPageLoad()
await page.getByText('line([74.36, 130.4], %)').click()
await page.getByRole('button', { name: 'Edit Sketch' }).click()
@ -850,15 +835,11 @@ part002 = startSketchOn('XZ')
// check the cursor is where is should be after constraint is applied
await expect(page.locator('.cm-content')).toContainText(codeAfter)
await expect(page.locator('.cm-activeLine')).toHaveText(codeAfter)
})
await expect(page.locator('.cm-activeLine')).toHaveText(codeAfter) })
}
})
test('Horizontally constrained line remains selected after applying constraint', async ({
page,
}) => {
test.setTimeout(70_000)
test('Horizontally constrained line remains selected after applying constraint', async ({ page, homePage }) => { test.setTimeout(70_000)
await page.addInitScript(async () => {
localStorage.setItem(
'persistCode',
@ -869,9 +850,10 @@ part002 = startSketchOn('XZ')
)
})
const u = await getUtils(page)
await page.setViewportSize({ width: 1200, height: 500 })
await page.setBodyDimensions({ width: 1200, height: 500 })
await u.waitForAuthSkipAppStart()
await homePage.goToModelingScene()
await u.waitForPageLoad()
await page.getByText('line([3.79, 2.68], %, $seg01)').click()
await expect(page.getByRole('button', { name: 'Edit Sketch' })).toBeEnabled(
@ -935,6 +917,5 @@ part002 = startSketchOn('XZ')
await expect(activeLinesContent[0]).toHaveText(`|> xLine(length001, %)`)
// checking the count of the overlays is a good proxy check that the client sketch scene is in a good state
await expect(page.getByTestId('segment-overlay')).toHaveCount(2)
})
await expect(page.getByTestId('segment-overlay')).toHaveCount(2) })
})

View File

@ -1,18 +1,11 @@
import { _test, _expect } from './playwright-deprecated'
import { test } from './fixtures/fixtureSetup'
import { getUtils, setup, tearDown } from './test-utils'
import { test, expect } from './zoo-test'
import { getUtils, executorInputPath } from './test-utils'
import { uuidv4 } from 'lib/utils'
import { TEST_CODE_GIZMO } from './storageStates'
import path from 'node:path'
import fsp from 'fs/promises'
_test.beforeEach(async ({ context, page }, testInfo) => {
await setup(context, page, testInfo)
})
_test.afterEach(async ({ page }, testInfo) => {
await tearDown(page, testInfo)
})
_test.describe('Testing Gizmo', () => {
test.describe('Testing Gizmo', () => {
const cases = [
{
testDescription: 'top view',
@ -57,14 +50,17 @@ _test.describe('Testing Gizmo', () => {
expectedCameraTarget,
testDescription,
} of cases) {
_test(`check ${testDescription}`, async ({ page, browserName }) => {
test(`check ${testDescription}`, async ({ page, homePage }) => {
const u = await getUtils(page)
await page.addInitScript((TEST_CODE_GIZMO) => {
localStorage.setItem('persistCode', TEST_CODE_GIZMO)
}, TEST_CODE_GIZMO)
await page.setViewportSize({ width: 1000, height: 500 })
await u.waitForAuthSkipAppStart()
await page.setBodyDimensions({ width: 1000, height: 500 })
await homePage.goToModelingScene()
await u.waitForPageLoad()
await page.waitForTimeout(100)
// wait for execution done
await u.openDebugPanel()
@ -117,31 +113,29 @@ _test.describe('Testing Gizmo', () => {
await Promise.all([
// position
_expect(page.getByTestId('cam-x-position')).toHaveValue(
expect(page.getByTestId('cam-x-position')).toHaveValue(
expectedCameraPosition.x.toString()
),
_expect(page.getByTestId('cam-y-position')).toHaveValue(
expect(page.getByTestId('cam-y-position')).toHaveValue(
expectedCameraPosition.y.toString()
),
_expect(page.getByTestId('cam-z-position')).toHaveValue(
expect(page.getByTestId('cam-z-position')).toHaveValue(
expectedCameraPosition.z.toString()
),
// target
_expect(page.getByTestId('cam-x-target')).toHaveValue(
expect(page.getByTestId('cam-x-target')).toHaveValue(
expectedCameraTarget.x.toString()
),
_expect(page.getByTestId('cam-y-target')).toHaveValue(
expect(page.getByTestId('cam-y-target')).toHaveValue(
expectedCameraTarget.y.toString()
),
_expect(page.getByTestId('cam-z-target')).toHaveValue(
expect(page.getByTestId('cam-z-target')).toHaveValue(
expectedCameraTarget.z.toString()
),
])
})
]) })
}
_test('Context menu and popover menu', async ({ page }) => {
const testCase = {
test('Context menu and popover menu', async ({ page, homePage }) => { const testCase = {
testDescription: 'Right view',
expectedCameraPosition: { x: 5660.02, y: -152, z: 26 },
expectedCameraTarget: { x: 800, y: -152, z: 26 },
@ -152,9 +146,9 @@ _test.describe('Testing Gizmo', () => {
await page.addInitScript((TEST_CODE_GIZMO) => {
localStorage.setItem('persistCode', TEST_CODE_GIZMO)
}, TEST_CODE_GIZMO)
await page.setViewportSize({ width: 1000, height: 500 })
await page.setBodyDimensions({ width: 1000, height: 500 })
await u.waitForAuthSkipAppStart()
await homePage.goToModelingScene()
await page.waitForTimeout(100)
// wait for execution done
await u.openDebugPanel()
@ -196,7 +190,7 @@ _test.describe('Testing Gizmo', () => {
const buttonToTest = page.getByRole('button', {
name: testCase.testDescription,
})
await _expect(buttonToTest).toBeVisible()
await expect(buttonToTest).toBeVisible()
await buttonToTest.click()
// Now assert we've moved to the correct view
@ -215,23 +209,23 @@ _test.describe('Testing Gizmo', () => {
await Promise.all([
// position
_expect(page.getByTestId('cam-x-position')).toHaveValue(
expect(page.getByTestId('cam-x-position')).toHaveValue(
testCase.expectedCameraPosition.x.toString()
),
_expect(page.getByTestId('cam-y-position')).toHaveValue(
expect(page.getByTestId('cam-y-position')).toHaveValue(
testCase.expectedCameraPosition.y.toString()
),
_expect(page.getByTestId('cam-z-position')).toHaveValue(
expect(page.getByTestId('cam-z-position')).toHaveValue(
testCase.expectedCameraPosition.z.toString()
),
// target
_expect(page.getByTestId('cam-x-target')).toHaveValue(
expect(page.getByTestId('cam-x-target')).toHaveValue(
testCase.expectedCameraTarget.x.toString()
),
_expect(page.getByTestId('cam-y-target')).toHaveValue(
expect(page.getByTestId('cam-y-target')).toHaveValue(
testCase.expectedCameraTarget.y.toString()
),
_expect(page.getByTestId('cam-z-target')).toHaveValue(
expect(page.getByTestId('cam-z-target')).toHaveValue(
testCase.expectedCameraTarget.z.toString()
),
])
@ -242,32 +236,55 @@ _test.describe('Testing Gizmo', () => {
const gizmoPopoverButton = page.getByRole('button', {
name: 'view settings',
})
await _expect(gizmoPopoverButton).toBeVisible()
await expect(gizmoPopoverButton).toBeVisible()
await gizmoPopoverButton.click()
await _expect(buttonToTest).toBeVisible()
})
await expect(buttonToTest).toBeVisible() })
})
test.describe(`Testing gizmo, fixture-based`, () => {
test('Center on selection from menu', async ({
app,
context,
page,
homePage,
cmdBar,
editor,
toolbar,
scene,
}) => {
test.skip(
process.platform === 'win32',
'Fails on windows in CI, can not be replicated locally on windows.'
)
await context.addInitScript(() => {
localStorage.setItem('persistCode', `
const sketch002 = startSketchOn('XZ')
|> startProfileAt([-108.83, -57.48], %)
|> angledLine([0, 105.13], %, $rectangleSegmentA001)
|> angledLine([
segAng(rectangleSegmentA001) - 90,
77.9
], %)
|> angledLine([
segAng(rectangleSegmentA001),
-segLen(rectangleSegmentA001)
], %)
|> close(%)
const sketch001 = startSketchOn('XZ')
|> circle({
center: [818.33, 168.1],
radius: 182.8
}, %)
|> extrude(50, %)
`)
})
await page.setBodyDimensions({ width: 1000, height: 500 })
await homePage.goToModelingScene()
const u = await getUtils(page)
await u.waitForPageLoad()
await test.step(`Setup`, async () => {
const file = await app.getInputFile('test-circle-extrude.kcl')
await app.initialise(file)
await scene.expectState({
camera: {
position: [4982.21, -23865.37, 13810.64],
target: [4982.21, 0, 2737.1],
position: [11912.6, -39586.98, 21391.21],
target: [11912.6, -635, 3317.49],
},
})
})
@ -275,7 +292,7 @@ test.describe(`Testing gizmo, fixture-based`, () => {
await test.step(`Select an edge of this circle`, async () => {
const circleSnippet =
'circle({ center: [318.33, 168.1], radius: 182.8 }, %)'
'circle({ center: [818.33, 168.1], radius: 182.8 }, %)'
await moveToCircle()
await clickCircle()
await editor.expectState({
@ -292,8 +309,8 @@ test.describe(`Testing gizmo, fixture-based`, () => {
await test.step(`Verify the camera moved`, async () => {
await scene.expectState({
camera: {
position: [0, -23865.37, 11073.53],
target: [0, 0, 0],
position: [20785.58, -40221.98, 22343.46],
target: [20785.58, -1270, 4269.74],
},
})
})

View File

@ -52,13 +52,24 @@ export function test(desc, objOrFn, fnMaybe) {
}
// Create a consistent way to resize the page across electron and web.
// (lee) I had to do everyhting in the book to make electron change its
// damn window size. I succeded in making it consistently and reliably
// do it after a whole afternoon.
tronApp.page.setBodyDimensions = async function (dims: {
width: number
height: number
}) {
return this.evaluate((dims) => {
await tronApp.electronApp.evaluateHandle(async ({ app }, dims) => {
await app.resizeWindow(dims.width, dims.height)
}, dims)
await tronApp.page.setViewportSize(dims)
return tronApp.page.evaluate(async (dims) => {
await window.electron.resizeWindow(dims.width, dims.height)
window.document.body.style.width = dims.width + 'px'
window.document.body.style.height = dims.height + 'px'
window.document.documentElement.style.width = dims.width + 'px'
window.document.documentElement.style.height = dims.height + 'px'
}, dims)
}

1
interface.d.ts vendored
View File

@ -7,6 +7,7 @@ import { MachinesListing } from 'components/MachineManagerProvider'
type EnvFn = (value?: string) => string
export interface IElectronAPI {
resizeWindow: (width: number, height: number) => Promise<void>
open: typeof dialog.showOpenDialog
save: typeof dialog.showSaveDialog
openExternal: typeof shell.openExternal

View File

@ -139,6 +139,14 @@ app.on('ready', (event, data) => {
// There is just not enough code to warrant it and further abstracts everything
// which is already quite abstracted
app.resizeWindow = async (width: number, height: number) => {
return mainWindow?.setSize(width, height)
}
ipcMain.handle('app.resizeWindow', (event, data) => {
return mainWindow?.setSize(...data)
})
ipcMain.handle('app.getPath', (event, data) => {
return app.getPath(data)
})

View File

@ -7,6 +7,7 @@ import packageJson from '../package.json'
import { MachinesListing } from 'components/MachineManagerProvider'
import chokidar from 'chokidar'
const resizeWindow = (width: number, height: number) => ipcRenderer.invoke('app.resizeWindow', [width, height])
const open = (args: any) => ipcRenderer.invoke('dialog.showOpenDialog', args)
const save = (args: any) => ipcRenderer.invoke('dialog.showSaveDialog', args)
const openExternal = (url: any) => ipcRenderer.invoke('shell.openExternal', url)
@ -189,4 +190,5 @@ contextBridge.exposeInMainWorld('electron', {
onUpdateError,
appRestart,
getArgvParsed,
resizeWindow,
})