From f43757e23b631ee6ae4af5471fa0a5284142a826 Mon Sep 17 00:00:00 2001 From: Sebastian Malton Date: Wed, 14 Dec 2022 08:34:42 -0500 Subject: [PATCH] Make startMainApplication not an injection time side effect Signed-off-by: Sebastian Malton --- src/main/index.ts | 3 +- .../start-main-application.injectable.ts | 26 +++++----- .../test-utils/get-application-builder.tsx | 48 ++++++++----------- 3 files changed, 36 insertions(+), 41 deletions(-) diff --git a/src/main/index.ts b/src/main/index.ts index 7289ea2280..0d30c2ac56 100644 --- a/src/main/index.ts +++ b/src/main/index.ts @@ -14,10 +14,11 @@ import { getDi } from "./getDi"; import startMainApplicationInjectable from "./start-main-application/start-main-application.injectable"; const di = getDi(); +const startMainApplication = di.inject(startMainApplicationInjectable); (async () => { try { - await di.inject(startMainApplicationInjectable); + await startMainApplication(); } catch (error) { console.error(error); process.exit(1); diff --git a/src/main/start-main-application/start-main-application.injectable.ts b/src/main/start-main-application/start-main-application.injectable.ts index ff52bd0f9d..51b0a7f3b7 100644 --- a/src/main/start-main-application/start-main-application.injectable.ts +++ b/src/main/start-main-application/start-main-application.injectable.ts @@ -29,19 +29,21 @@ const startMainApplicationInjectable = getInjectable({ const showInitialWindowRunnablePhase = runMany(showInitialWindowRunnablePhaseInjectionToken); const afterApplicationIsLoaded = runMany(afterApplicationIsLoadedInjectionToken); - // Stuff happening before application is ready needs to be synchronous because of - // https://github.com/electron/electron/issues/21370 - appPathsRunnablePhase(); - beforeElectronIsReady(); + return () => { + // Stuff happening before application is ready needs to be synchronous because of + // https://github.com/electron/electron/issues/21370 + appPathsRunnablePhase(); + beforeElectronIsReady(); - return (async () => { - await waitForElectronToBeReady(); - await beforeApplicationIsLoading(); - await showLoadingRunnablePhase(); - await onLoadOfApplication(); - await showInitialWindowRunnablePhase(); - await afterApplicationIsLoaded(); - })(); + return (async () => { + await waitForElectronToBeReady(); + await beforeApplicationIsLoading(); + await showLoadingRunnablePhase(); + await onLoadOfApplication(); + await showInitialWindowRunnablePhase(); + await afterApplicationIsLoaded(); + })(); + }; }, }); diff --git a/src/renderer/components/test-utils/get-application-builder.tsx b/src/renderer/components/test-utils/get-application-builder.tsx index 019dbd7dc7..7e2dde5296 100644 --- a/src/renderer/components/test-utils/get-application-builder.tsx +++ b/src/renderer/components/test-utils/get-application-builder.tsx @@ -290,6 +290,24 @@ export const getApplicationBuilder = () => { const namespaces = observable.set(); const namespaceItems = observable.array(); const selectedNamespaces = observable.set(); + const startMainApplication = mainDi.inject(startMainApplicationInjectable); + + const startApplication = async ({ shouldStartHidden }: { shouldStartHidden: boolean }) => { + mainDi.inject(lensProxyPortInjectable).set(42); + + for (const callback of beforeApplicationStartCallbacks) { + await callback(mainDi); + } + + mainDi.override(shouldStartHiddenInjectable, () => shouldStartHidden); + await startMainApplication(); + + for (const callback of afterApplicationStartCallbacks) { + await callback(mainDi); + } + + applicationHasStarted = true; + }; const builder: ApplicationBuilder = { mainDi, @@ -672,37 +690,11 @@ export const getApplicationBuilder = () => { }, startHidden: async () => { - mainDi.inject(lensProxyPortInjectable).set(42); - - for (const callback of beforeApplicationStartCallbacks) { - await callback(mainDi); - } - - mainDi.override(shouldStartHiddenInjectable, () => true); - await mainDi.inject(startMainApplicationInjectable); - - for (const callback of afterApplicationStartCallbacks) { - await callback(mainDi); - } - - applicationHasStarted = true; + await startApplication({ shouldStartHidden: true }); }, async render() { - mainDi.inject(lensProxyPortInjectable).set(42); - - for (const callback of beforeApplicationStartCallbacks) { - await callback(mainDi); - } - - mainDi.override(shouldStartHiddenInjectable, () => false); - await mainDi.inject(startMainApplicationInjectable); - - for (const callback of afterApplicationStartCallbacks) { - await callback(mainDi); - } - - applicationHasStarted = true; + await startApplication({ shouldStartHidden: false }); return builder .applicationWindow