From c8d924b08e420d03594f658ef1abe14a4fe8b1de Mon Sep 17 00:00:00 2001 From: Samuel Attard Date: Wed, 5 May 2021 11:25:44 -0700 Subject: [PATCH] spec: attempt to fix flaky nativeTheme spec --- spec-main/api-native-theme-spec.ts | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/spec-main/api-native-theme-spec.ts b/spec-main/api-native-theme-spec.ts index f4b63851cd90e..3a03eb1ef81a2 100644 --- a/spec-main/api-native-theme-spec.ts +++ b/spec-main/api-native-theme-spec.ts @@ -1,5 +1,5 @@ import { expect } from 'chai'; -import { nativeTheme, systemPreferences, BrowserWindow } from 'electron/main'; +import { nativeTheme, systemPreferences, BrowserWindow, ipcMain } from 'electron/main'; import * as os from 'os'; import * as path from 'path'; import * as semver from 'semver'; @@ -75,14 +75,24 @@ describe('nativeTheme module', () => { }; it('should override the result of prefers-color-scheme CSS media query', async () => { - const w = new BrowserWindow({ show: false }); + const w = new BrowserWindow({ show: false, webPreferences: { contextIsolation: false, nodeIntegration: true } }); await w.loadFile(path.resolve(__dirname, 'fixtures', 'blank.html')); + await w.webContents.executeJavaScript(` + window.matchMedia('(prefers-color-scheme: dark)') + .addEventListener('change', () => require('electron').ipcRenderer.send('theme-change')) + `); const originalSystemIsDark = await getPrefersColorSchemeIsDark(w); + let changePromise: Promise = emittedOnce(ipcMain, 'theme-change'); nativeTheme.themeSource = 'dark'; + if (!originalSystemIsDark) await changePromise; expect(await getPrefersColorSchemeIsDark(w)).to.equal(true); + changePromise = emittedOnce(ipcMain, 'theme-change'); nativeTheme.themeSource = 'light'; + await changePromise; expect(await getPrefersColorSchemeIsDark(w)).to.equal(false); + changePromise = emittedOnce(ipcMain, 'theme-change'); nativeTheme.themeSource = 'system'; + if (originalSystemIsDark) await changePromise; expect(await getPrefersColorSchemeIsDark(w)).to.equal(originalSystemIsDark); w.close(); });