From 2c48be3ec05f2d6cda4dc3762909576cec8672ad Mon Sep 17 00:00:00 2001 From: Sebastian Malton Date: Mon, 13 Jun 2022 14:58:09 -0400 Subject: [PATCH] Verify messages are serializable within tests Signed-off-by: Sebastian Malton --- .../override-messaging-from-main-to-window.ts | 36 +++++++------------ .../override-messaging-from-window-to-main.ts | 30 ++++++---------- ...override-requesting-from-window-to-main.ts | 11 +++++- 3 files changed, 33 insertions(+), 44 deletions(-) diff --git a/src/test-utils/channel-fakes/override-messaging-from-main-to-window.ts b/src/test-utils/channel-fakes/override-messaging-from-main-to-window.ts index e69dbc4405..7f31b9d480 100644 --- a/src/test-utils/channel-fakes/override-messaging-from-main-to-window.ts +++ b/src/test-utils/channel-fakes/override-messaging-from-main-to-window.ts @@ -8,7 +8,8 @@ import sendToChannelInElectronBrowserWindowInjectable from "../../main/start-mai import type { SendToViewArgs } from "../../main/start-main-application/lens-window/application-window/lens-window-injection-token"; import enlistMessageChannelListenerInjectableInRenderer from "../../renderer/utils/channel/channel-listeners/enlist-message-channel-listener.injectable"; import type { DiContainer } from "@ogre-tools/injectable"; -import assert from "assert"; +import { serialize } from "v8"; +import { getOrInsertSet } from "../../renderer/utils"; export const overrideMessagingFromMainToWindow = (mainDi: DiContainer) => { const messageChannelListenerFakesForRenderer = new Map< @@ -22,7 +23,7 @@ export const overrideMessagingFromMainToWindow = (mainDi: DiContainer) => { () => ( browserWindow, - { channel: channelId, frameInfo, data = [] }: SendToViewArgs, + { channel: channelId, frameInfo, data }: SendToViewArgs, ) => { const listeners = messageChannelListenerFakesForRenderer.get(channelId) || new Set(); @@ -41,6 +42,12 @@ export const overrideMessagingFromMainToWindow = (mainDi: DiContainer) => { ); } + try { + serialize(data); + } catch { + throw new Error(`Tried to send message to channel "${channelId}" but the value cannot be serialized.`); + } + listeners.forEach((listener) => listener.handler(data)); }, ); @@ -50,31 +57,12 @@ export const overrideMessagingFromMainToWindow = (mainDi: DiContainer) => { enlistMessageChannelListenerInjectableInRenderer, () => (listener) => { - if (!messageChannelListenerFakesForRenderer.has(listener.channel.id)) { - messageChannelListenerFakesForRenderer.set( - listener.channel.id, - new Set(), - ); - } + const listeners = getOrInsertSet(messageChannelListenerFakesForRenderer, listener.channel.id); - const listeners = messageChannelListenerFakesForRenderer.get( - listener.channel.id, - ); - - assert(listeners); - - // TODO: Figure out typing - listeners.add( - listener as unknown as MessageChannelListener>, - ); + listeners.add(listener); return () => { - // TODO: Figure out typing - listeners.delete( - listener as unknown as MessageChannelListener< - MessageChannel - >, - ); + listeners.delete(listener); }; }, ); diff --git a/src/test-utils/channel-fakes/override-messaging-from-window-to-main.ts b/src/test-utils/channel-fakes/override-messaging-from-window-to-main.ts index ba6813235b..995d476b67 100644 --- a/src/test-utils/channel-fakes/override-messaging-from-window-to-main.ts +++ b/src/test-utils/channel-fakes/override-messaging-from-window-to-main.ts @@ -3,10 +3,11 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ import type { DiContainer } from "@ogre-tools/injectable"; -import assert from "assert"; +import { serialize } from "v8"; import type { MessageChannel } from "../../common/utils/channel/message-channel-injection-token"; import type { MessageChannelListener } from "../../common/utils/channel/message-channel-listener-injection-token"; import enlistMessageChannelListenerInjectableInMain from "../../main/utils/channel/channel-listeners/enlist-message-channel-listener.injectable"; +import { getOrInsertSet } from "../../renderer/utils"; import sendToMainInjectable from "../../renderer/utils/channel/send-to-main.injectable"; export const overrideMessagingFromWindowToMain = (mainDi: DiContainer) => { @@ -20,27 +21,12 @@ export const overrideMessagingFromWindowToMain = (mainDi: DiContainer) => { () => (listener) => { const channelId = listener.channel.id; + const listeners = getOrInsertSet(messageChannelListenerFakesForMain, channelId); - if (!messageChannelListenerFakesForMain.has(channelId)) { - messageChannelListenerFakesForMain.set(channelId, new Set()); - } - - const listeners = messageChannelListenerFakesForMain.get( - channelId, - ); - - assert(listeners); - - // TODO: Figure out typing - listeners.add( - listener as unknown as MessageChannelListener>, - ); + listeners.add(listener); return () => { - // TODO: Figure out typing - listeners.delete( - listener as unknown as MessageChannelListener>, - ); + listeners.delete(listener); }; }, ); @@ -58,6 +44,12 @@ export const overrideMessagingFromWindowToMain = (mainDi: DiContainer) => { ); } + try { + serialize(message); + } catch { + throw new Error(`Tried to send message to main channel "${channelId}" but the value cannot be serialized.`); + } + listeners.forEach((listener) => listener.handler(message)); }); }; diff --git a/src/test-utils/channel-fakes/override-requesting-from-window-to-main.ts b/src/test-utils/channel-fakes/override-requesting-from-window-to-main.ts index 52c7f9b377..f170b5600f 100644 --- a/src/test-utils/channel-fakes/override-requesting-from-window-to-main.ts +++ b/src/test-utils/channel-fakes/override-requesting-from-window-to-main.ts @@ -3,6 +3,7 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ import type { DiContainer } from "@ogre-tools/injectable"; +import { serialize } from "v8"; import type { RequestChannel } from "../../common/utils/channel/request-channel-injection-token"; import type { RequestChannelHandler } from "../../common/utils/channel/request-channel-listener-injection-token"; import enlistRequestChannelListenerInjectableInMain from "../../main/utils/channel/channel-listeners/enlist-request-channel-listener.injectable"; @@ -46,7 +47,15 @@ export const overrideRequestingFromWindowToMain = (mainDi: DiContainer) => { ); } - return requestListener.handler(request); + const result = requestListener.handler(request); + + try { + serialize(result); + } catch { + throw new Error(`Tried to request value from channel "${id}" but the value cannot be serialized.`); + } + + return result; }, ); };