58 lines
2.4 KiB
JavaScript
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/);
|
|
});
|
|
});
|