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 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 enlistMessageChannelListenerInjectableInRenderer from "../../renderer/utils/channel/channel-listeners/enlist-message-channel-listener.injectable";
|
||||||
import type { DiContainer } from "@ogre-tools/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) => {
|
export const overrideMessagingFromMainToWindow = (mainDi: DiContainer) => {
|
||||||
const messageChannelListenerFakesForRenderer = new Map<
|
const messageChannelListenerFakesForRenderer = new Map<
|
||||||
@ -22,7 +23,7 @@ export const overrideMessagingFromMainToWindow = (mainDi: DiContainer) => {
|
|||||||
() =>
|
() =>
|
||||||
(
|
(
|
||||||
browserWindow,
|
browserWindow,
|
||||||
{ channel: channelId, frameInfo, data = [] }: SendToViewArgs,
|
{ channel: channelId, frameInfo, data }: SendToViewArgs,
|
||||||
) => {
|
) => {
|
||||||
const listeners =
|
const listeners =
|
||||||
messageChannelListenerFakesForRenderer.get(channelId) || new Set();
|
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));
|
listeners.forEach((listener) => listener.handler(data));
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
@ -50,31 +57,12 @@ export const overrideMessagingFromMainToWindow = (mainDi: DiContainer) => {
|
|||||||
enlistMessageChannelListenerInjectableInRenderer,
|
enlistMessageChannelListenerInjectableInRenderer,
|
||||||
|
|
||||||
() => (listener) => {
|
() => (listener) => {
|
||||||
if (!messageChannelListenerFakesForRenderer.has(listener.channel.id)) {
|
const listeners = getOrInsertSet(messageChannelListenerFakesForRenderer, listener.channel.id);
|
||||||
messageChannelListenerFakesForRenderer.set(
|
|
||||||
listener.channel.id,
|
|
||||||
new Set(),
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
const listeners = messageChannelListenerFakesForRenderer.get(
|
listeners.add(listener);
|
||||||
listener.channel.id,
|
|
||||||
);
|
|
||||||
|
|
||||||
assert(listeners);
|
|
||||||
|
|
||||||
// TODO: Figure out typing
|
|
||||||
listeners.add(
|
|
||||||
listener as unknown as MessageChannelListener<MessageChannel<any>>,
|
|
||||||
);
|
|
||||||
|
|
||||||
return () => {
|
return () => {
|
||||||
// TODO: Figure out typing
|
listeners.delete(listener);
|
||||||
listeners.delete(
|
|
||||||
listener as unknown as MessageChannelListener<
|
|
||||||
MessageChannel<any>
|
|
||||||
>,
|
|
||||||
);
|
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
|
|||||||
@ -3,10 +3,11 @@
|
|||||||
* Licensed under MIT License. See LICENSE in root directory for more information.
|
* Licensed under MIT License. See LICENSE in root directory for more information.
|
||||||
*/
|
*/
|
||||||
import type { DiContainer } from "@ogre-tools/injectable";
|
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 { MessageChannel } from "../../common/utils/channel/message-channel-injection-token";
|
||||||
import type { MessageChannelListener } from "../../common/utils/channel/message-channel-listener-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 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";
|
import sendToMainInjectable from "../../renderer/utils/channel/send-to-main.injectable";
|
||||||
|
|
||||||
export const overrideMessagingFromWindowToMain = (mainDi: DiContainer) => {
|
export const overrideMessagingFromWindowToMain = (mainDi: DiContainer) => {
|
||||||
@ -20,27 +21,12 @@ export const overrideMessagingFromWindowToMain = (mainDi: DiContainer) => {
|
|||||||
|
|
||||||
() => (listener) => {
|
() => (listener) => {
|
||||||
const channelId = listener.channel.id;
|
const channelId = listener.channel.id;
|
||||||
|
const listeners = getOrInsertSet(messageChannelListenerFakesForMain, channelId);
|
||||||
|
|
||||||
if (!messageChannelListenerFakesForMain.has(channelId)) {
|
listeners.add(listener);
|
||||||
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>>,
|
|
||||||
);
|
|
||||||
|
|
||||||
return () => {
|
return () => {
|
||||||
// TODO: Figure out typing
|
listeners.delete(listener);
|
||||||
listeners.delete(
|
|
||||||
listener as unknown as MessageChannelListener<MessageChannel<any>>,
|
|
||||||
);
|
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
@ -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));
|
listeners.forEach((listener) => listener.handler(message));
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|||||||
@ -3,6 +3,7 @@
|
|||||||
* Licensed under MIT License. See LICENSE in root directory for more information.
|
* Licensed under MIT License. See LICENSE in root directory for more information.
|
||||||
*/
|
*/
|
||||||
import type { DiContainer } from "@ogre-tools/injectable";
|
import type { DiContainer } from "@ogre-tools/injectable";
|
||||||
|
import { serialize } from "v8";
|
||||||
import type { RequestChannel } from "../../common/utils/channel/request-channel-injection-token";
|
import type { RequestChannel } from "../../common/utils/channel/request-channel-injection-token";
|
||||||
import type { RequestChannelHandler } from "../../common/utils/channel/request-channel-listener-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";
|
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