--- electron/spec/api-app.spec.ts.orig 2026-10-13 23:40:13 UTC +++ electron/spec/api-app.spec.ts @@ -128,7 +128,7 @@ describe('app module', () => { }); }); - ifdescribe(process.platform === 'linux')('app.setDesktopName(name)', () => { + ifdescribe(process.platform === 'linux' || process.platform === 'freebsd')('app.setDesktopName(name)', () => { it('sets the desktop name to the CHROME_DESKTOP environment variable', () => { const original = process.env.CHROME_DESKTOP; defer(() => { @@ -157,11 +157,11 @@ describe('app module', () => { }); describe('app.getPreferredSystemLanguages()', () => { - ifit(process.platform !== 'linux')('should not be empty', () => { + ifit(process.platform !== 'linux' && process.platform !== 'freebsd')('should not be empty', () => { expect(app.getPreferredSystemLanguages().length).to.not.equal(0); }); - ifit(process.platform === 'linux')('should be empty or contain C entry', () => { + ifit(process.platform === 'linux' || process.platform === 'freebsd')('should be empty or contain C entry', () => { const languages = app.getPreferredSystemLanguages(); if (languages.length) { expect(languages).to.not.include('C'); @@ -203,7 +203,7 @@ describe('app module', () => { }); }); - ifdescribe(process.platform === 'linux' && fs.existsSync('/usr/bin/dbus-daemon'))( + ifdescribe((process.platform === 'linux' || process.platform === 'freebsd') && fs.existsSync('/usr/bin/dbus-daemon'))( 'when a D-Bus bus goes away', () => { it('exits cleanly instead of crashing', async () => { @@ -297,7 +297,7 @@ describe('app module', () => { // A missing display makes toolkit initialisation fail before the main loop // runs; that early return must still tear the JS environment down cleanly. // Skipped under ASan for the same reason as the test above. - ifit(process.platform === 'linux' && !process.env.IS_ASAN)( + ifit((process.platform === 'linux' || process.platform === 'freebsd') && !process.env.IS_ASAN)( 'exits with code 1 when no display is available', async () => { const appPath = path.join(fixturesPath, 'api', 'no-display'); @@ -318,7 +318,7 @@ describe('app module', () => { } ); - ifit(['darwin', 'linux'].includes(process.platform))('exits gracefully', async function () { + ifit(['darwin', 'linux', 'freebsd'].includes(process.platform))('exits gracefully', async function () { const electronPath = process.execPath; const appPath = path.join(fixturesPath, 'api', 'singleton'); appProcess = cp.spawn(electronPath, [appPath]); @@ -538,7 +538,7 @@ describe('app module', () => { }); // GitHub Actions macOS-13 runners used for x64 seem to have a problem with this test. - ifdescribe(process.platform !== 'linux' && !isMacOSx64)('app.{add|get|clear}RecentDocument(s)', () => { + ifdescribe(process.platform !== 'linux' && process.platform !== 'freebsd' && !isMacOSx64)('app.{add|get|clear}RecentDocument(s)', () => { const tempFiles = [ path.join(fixturesPath, 'foo.txt'), path.join(fixturesPath, 'bar.txt'), @@ -667,7 +667,7 @@ describe('app module', () => { // let w = null // before(function () { - // if (process.platform !== 'linux') { + // if (process.platform !== 'linux' && process.platform !== 'freebsd') { // this.skip() // } // }) @@ -780,7 +780,7 @@ describe('app module', () => { describe('app.badgeCount', () => { const platformIsNotSupported = - process.platform === 'win32' || (process.platform === 'linux' && !app.isUnityRunning()); + process.platform === 'win32' || (process.platform === 'linux' && !app.isUnityRunning()) || process.platform === 'freebsd'; const expectedBadgeCount = 42; @@ -827,7 +827,7 @@ describe('app module', () => { }); ifdescribe( - process.platform !== 'linux' && !process.mas && (process.platform !== 'darwin' || process.arch === 'arm64') + process.platform !== 'linux' && process.platform !== 'freebsd' && !process.mas && (process.platform !== 'darwin' || process.arch === 'arm64') )('app.get/setLoginItemSettings API', function () { const isMac = process.platform === 'darwin'; const isWin = process.platform === 'win32'; @@ -1254,7 +1254,7 @@ describe('app module', () => { }); }); - ifdescribe(process.platform !== 'linux')('accessibility support functionality', () => { + ifdescribe(process.platform !== 'linux' && process.platform !== 'freebsd')('accessibility support functionality', () => { // These tests toggle a process-wide AXMode. Turn it back off so the rest of // the suite doesn't run with renderer accessibility enabled. afterEach(() => { @@ -1536,7 +1536,7 @@ describe('app module', () => { }); }); - ifdescribe(process.platform !== 'linux')('select-client-certificate event', () => { + ifdescribe(process.platform !== 'linux' && process.platform !== 'freebsd')('select-client-certificate event', () => { let w: BrowserWindow; before(function () { @@ -1679,7 +1679,7 @@ describe('app module', () => { describe('getApplicationNameForProtocol()', () => { // TODO: Linux CI doesn't have registered http & https handlers - ifit(!(process.env.CI && process.platform === 'linux') && !isWayland)( + ifit(!(process.env.CI && (process.platform === 'linux' || process.platform === 'freebsd')) && !isWayland)( 'returns application names for common protocols', function () { // We can't expect particular app names here, but these protocols should @@ -1696,7 +1696,7 @@ describe('app module', () => { expect(app.getApplicationNameForProtocol('bogus-protocol://')).to.equal(''); }); - ifdescribe(process.platform === 'linux')('on Linux with mocked XDG dirs', () => { + ifdescribe(process.platform === 'linux' || process.platform === 'freebsd')('on Linux with mocked XDG dirs', () => { const desktopFileId = 'mock-browser.desktop'; const mockDisplayName = 'Mock Browser'; const mockScheme = 'mockproto'; @@ -1746,7 +1746,7 @@ describe('app module', () => { let xdgBinDir: string; before(() => { - if (process.platform !== 'linux') { + if (process.platform !== 'linux' && process.platform !== 'freebsd') { return; } @@ -1763,7 +1763,7 @@ describe('app module', () => { }); after(() => { - if (process.platform === 'linux') { + if (process.platform === 'linux' || process.platform === 'freebsd') { fs.rmSync(xdgDir, { recursive: true, force: true }); } }); @@ -1775,7 +1775,7 @@ describe('app module', () => { }); it('returns resolved promise with appPath, displayName and icon', async function () { - if (process.platform === 'linux') { + if (process.platform === 'linux' || process.platform === 'freebsd') { const appInfo = await spawnProtocolInfoWithXdgMock(`${mockScheme}://`, xdgDataHome, xdgConfigHome); expect(appInfo.name).to.equal(mockDisplayName); expect(appInfo.path).to.equal('/usr/bin/true'); @@ -1789,7 +1789,7 @@ describe('app module', () => { expect(appInfo.icon).not.to.be.undefined(); }); - ifit(process.platform === 'linux')('resolves an executable name via PATH', async () => { + ifit(process.platform === 'linux' || process.platform === 'freebsd')('resolves an executable name via PATH', async () => { const pathLookupExecutable = 'mock-browser'; const pathLookupExecutablePath = path.join(xdgBinDir, pathLookupExecutable); const pathLookupDisplayName = 'Mock Browser PATH'; @@ -1823,7 +1823,7 @@ describe('app module', () => { }); }); - ifdescribe(process.platform === 'linux')('default protocol client APIs', () => { + ifdescribe(process.platform === 'linux' || process.platform === 'freebsd')('default protocol client APIs', () => { const protocol = 'electron-test-linux'; const desktopFileId = 'electron-test.desktop'; const protocolMimeType = `x-scheme-handler/${protocol}`; @@ -1940,7 +1940,7 @@ describe('app module', () => { }); // FIXME Get these specs running on Linux CI - ifdescribe(process.platform !== 'linux')('getFileIcon() API', () => { + ifdescribe(process.platform !== 'linux' && process.platform !== 'freebsd')('getFileIcon() API', () => { const iconPath = path.join(import.meta.dirname, 'fixtures/assets/icon.ico'); const sizes = { small: 16, @@ -2022,7 +2022,7 @@ describe('app module', () => { expect(entry.memory).to.have.property('privateBytes').that.is.greaterThan(0); } - if (process.platform !== 'linux') { + if (process.platform !== 'linux' && process.platform !== 'freebsd') { expect(entry.sandboxed).to.be.a('boolean'); } @@ -2039,7 +2039,7 @@ describe('app module', () => { }); }); - ifdescribe(process.platform === 'linux')('GDK_BACKEND', () => { + ifdescribe(process.platform === 'linux' || process.platform === 'freebsd')('GDK_BACKEND', () => { const fixture = path.join(fixturesPath, 'apps', 'gdk-backend'); const run = async (env: NodeJS.ProcessEnv) => { const child = cp.spawn(process.execPath, [fixture], { env, stdio: ['ignore', 'pipe', 'ignore'] }); @@ -2116,7 +2116,7 @@ describe('app module', () => { it('succeeds with complete GPUInfo', async () => { const completeInfo = await getGPUInfo('complete'); - if (process.platform === 'linux') { + if (process.platform === 'linux' || process.platform === 'freebsd') { // For linux and macOS complete info is same as basic info await verifyBasicGPUInfo(completeInfo); const basicInfo = await getGPUInfo('basic'); @@ -2140,7 +2140,7 @@ describe('app module', () => { }); }); - ifdescribe(!(process.platform === 'linux' && (process.arch === 'arm64' || process.arch === 'arm')))( + ifdescribe(!((process.platform === 'linux' || process.platform === 'freebsd') && (process.arch === 'arm64' || process.arch === 'arm')))( 'sandbox options', () => { let appProcess: cp.ChildProcess = null as any;