95 lines
2.7 KiB
TypeScript
95 lines
2.7 KiB
TypeScript
import { createRequire } from 'node:module'
|
|
|
|
import { expect, test } from 'vitest'
|
|
|
|
const { prepareWindowForInput } = createRequire(import.meta.url)(
|
|
'../../../tests/install/e2e-assets/window-input.cjs',
|
|
)
|
|
|
|
test('does not finish when IPC reports 100% before the window factor settles', async () => {
|
|
let observations = 0
|
|
const previous = (globalThis as any).hermesDesktop
|
|
;(globalThis as any).hermesDesktop = { zoom: {
|
|
setPercent: () => undefined,
|
|
get: async () => ({ percent: 100 }),
|
|
} }
|
|
const appWindow = { evaluate: async (fn: any) => fn({ webContents: {
|
|
getZoomFactor: () => ++observations === 1 ? 0.9 : 1,
|
|
} }) }
|
|
const page = {
|
|
evaluate: async (fn: any) => fn(),
|
|
waitForTimeout: async () => undefined,
|
|
}
|
|
try {
|
|
await prepareWindowForInput({ browserWindow: async () => appWindow }, page)
|
|
expect(observations).toBeGreaterThan(1)
|
|
} finally {
|
|
;(globalThis as any).hermesDesktop = previous
|
|
}
|
|
})
|
|
|
|
test('reapplies zoom when startup overwrites the first request', async () => {
|
|
let requests = 0
|
|
let factor = 0.9
|
|
|
|
const previous = (globalThis as any).hermesDesktop
|
|
|
|
;(globalThis as any).hermesDesktop = { zoom: {
|
|
setPercent: () => { requests++;
|
|
|
|
if (requests > 1) {factor = 1} },
|
|
get: async () => ({ percent: factor * 100 }),
|
|
} }
|
|
const window = { evaluate: async (fn: any) => fn({ webContents: { getZoomFactor: () => factor } }) }
|
|
|
|
const page = {
|
|
evaluate: async (fn: any) => fn(),
|
|
waitForTimeout: async () => {
|
|
if (requests === 1) {throw new Error('startup overwrote zoom and the driver never reapplied it')}
|
|
},
|
|
}
|
|
|
|
try {
|
|
await prepareWindowForInput({ browserWindow: async () => window }, page)
|
|
expect(requests).toBeGreaterThan(1)
|
|
} finally {
|
|
;(globalThis as any).hermesDesktop = previous
|
|
}
|
|
})
|
|
|
|
test('awaits the zoom response instead of accepting a truthy Promise', async () => {
|
|
let reads = 0
|
|
let factor = 0.9
|
|
|
|
const zoom = {
|
|
setPercent: () => undefined,
|
|
get: async () => {
|
|
reads++
|
|
|
|
if (reads > 1) {factor = 1}
|
|
|
|
return { percent: factor * 100 }
|
|
},
|
|
}
|
|
|
|
const previous = (globalThis as any).hermesDesktop
|
|
|
|
;(globalThis as any).hermesDesktop = { zoom }
|
|
const window = { evaluate: async (fn: any) => fn({ webContents: { getZoomFactor: () => factor } }) }
|
|
|
|
const page = {
|
|
evaluate: async (fn: any) => fn(),
|
|
// Playwright 1.58 accepts the predicate's Promise before it resolves.
|
|
waitForFunction: async (fn: any) => { await fn() },
|
|
waitForTimeout: async () => undefined,
|
|
}
|
|
|
|
try {
|
|
await prepareWindowForInput({ browserWindow: async () => window }, page)
|
|
expect(reads).toBeGreaterThan(1)
|
|
expect(factor).toBe(1)
|
|
} finally {
|
|
;(globalThis as any).hermesDesktop = previous
|
|
}
|
|
})
|