Files
standardnotes-app-web/packages/desktop/app/javascripts/Main/Utils/Testing.ts
2022-06-07 11:52:15 -05:00

62 lines
1.5 KiB
TypeScript

import { app, BrowserWindow } from 'electron'
import { AppMessageType, MessageType, TestIPCMessage } from '../../../../test/TestIpcMessage'
import { isTesting } from '../Utils/Utils'
const messageHandlers: {
[key in MessageType]?: (...args: any) => unknown
} = {}
export function handleTestMessage(type: MessageType, handler: (...args: any) => unknown): void {
if (!isTesting()) {
throw Error('Tried to invoke test handler in non-test build.')
}
messageHandlers[type] = handler
}
export function send(type: AppMessageType, data?: unknown): void {
if (!isTesting()) {
return
}
process.send!({ type, data })
}
export function setupTesting(): void {
process.on('message', async (message: TestIPCMessage) => {
const handler = messageHandlers[message.type]
if (!handler) {
process.send!({
id: message.id,
reject: `No handler registered for message type ${MessageType[message.type]}`,
})
return
}
try {
let returnValue = handler(...message.args)
if (returnValue instanceof Promise) {
returnValue = await returnValue
}
process.send!({
id: message.id,
resolve: returnValue,
})
} catch (error: any) {
process.send!({
id: message.id,
reject: error.toString(),
})
}
})
handleTestMessage(MessageType.WindowCount, () => BrowserWindow.getAllWindows().length)
app.on('ready', () => {
setTimeout(() => {
send(AppMessageType.Ready)
}, 200)
})
}