mirror of
https://github.com/lensapp/lens.git
synced 2025-05-20 05:10:56 +00:00
Verify messages are serializable within tests
Signed-off-by: Sebastian Malton <sebastian@malton.name>
This commit is contained in:
parent
78674e636f
commit
2c48be3ec0
@ -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<MessageChannel<any>>,
|
||||
);
|
||||
listeners.add(listener);
|
||||
|
||||
return () => {
|
||||
// TODO: Figure out typing
|
||||
listeners.delete(
|
||||
listener as unknown as MessageChannelListener<
|
||||
MessageChannel<any>
|
||||
>,
|
||||
);
|
||||
listeners.delete(listener);
|
||||
};
|
||||
},
|
||||
);
|
||||
|
||||
@ -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<MessageChannel<any>>,
|
||||
);
|
||||
listeners.add(listener);
|
||||
|
||||
return () => {
|
||||
// TODO: Figure out typing
|
||||
listeners.delete(
|
||||
listener as unknown as MessageChannelListener<MessageChannel<any>>,
|
||||
);
|
||||
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));
|
||||
});
|
||||
};
|
||||
|
||||
@ -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;
|
||||
},
|
||||
);
|
||||
};
|
||||
|
||||
Loading…
Reference in New Issue
Block a user