camofox-browser/tests/unit/camoufoxExecutable.test.js

58 lines
2.4 KiB
JavaScript

import { afterEach, describe, expect, test } from '@jest/globals';
import { chmodSync, existsSync, mkdtempSync, mkdirSync, rmSync, writeFileSync } from 'fs';
import { join } from 'path';
import { platform, tmpdir } from 'os';
import { prepareExternalCamoufoxExecutable } from '../../lib/camoufox-executable.js';
const tempDirs = [];
function makeTempDir() {
const dir = mkdtempSync(join(tmpdir(), 'camofox-executable-test-'));
tempDirs.push(dir);
return dir;
}
afterEach(() => {
for (const dir of tempDirs.splice(0)) {
rmSync(dir, { recursive: true, force: true });
}
rmSync(join(tmpdir(), 'camofox-browser-external-camoufox'), { recursive: true, force: true });
});
describe('prepareExternalCamoufoxExecutable', () => {
test('creates camoufox-js compatibility links for an external bundle', () => {
const bundleDir = makeTempDir();
const cacheDir = makeTempDir();
const executable = join(bundleDir, 'camoufox-bin');
writeFileSync(executable, '#!/bin/sh\nexit 0\n');
chmodSync(executable, 0o755);
writeFileSync(join(bundleDir, 'properties.json'), '[]\n');
writeFileSync(join(bundleDir, 'version.json'), '{"version":"135.0.1","release":"beta.24"}\n');
mkdirSync(join(bundleDir, 'fontconfig', 'lin'), { recursive: true });
const prepared = prepareExternalCamoufoxExecutable(executable, { cacheDir });
expect(prepared.resourceDir).toBe(bundleDir);
expect(prepared.executablePath).toContain('camofox-browser-external-camoufox');
expect(existsSync(prepared.executablePath)).toBe(true);
expect(existsSync(join(cacheDir, 'version.json'))).toBe(true);
expect(existsSync(join(cacheDir, 'fontconfig'))).toBe(true);
expect(existsSync(join(cacheDir, 'properties.json'))).toBe(true);
const cacheExecutable = platform() === 'darwin'
? join(cacheDir, 'Camoufox.app', 'Contents', 'MacOS', 'camoufox')
: join(cacheDir, platform() === 'win32' ? 'camoufox.exe' : 'camoufox-bin');
expect(existsSync(cacheExecutable)).toBe(true);
});
test('fails clearly when bundle resources are missing', () => {
const bundleDir = makeTempDir();
const executable = join(bundleDir, 'camoufox-bin');
writeFileSync(executable, '#!/bin/sh\nexit 0\n');
chmodSync(executable, 0o755);
expect(() => prepareExternalCamoufoxExecutable(executable, { cacheDir: makeTempDir() }))
.toThrow(/properties\.json/);
});
});