feat: add desktop repo (#1071)
This commit is contained in:
61
packages/desktop/app/javascripts/Main/Utils/Testing.ts
Normal file
61
packages/desktop/app/javascripts/Main/Utils/Testing.ts
Normal file
@@ -0,0 +1,61 @@
|
||||
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)
|
||||
})
|
||||
}
|
||||
Reference in New Issue
Block a user