mirror of
https://github.com/pbakaus/impeccable.git
synced 2026-09-11 21:57:14 +03:00
Byte-comparing bun's generated vendor file fails on Linux CI because bundler output is not portable across bun versions. Stamp the header with a digest of the entry and parser package versions instead. AI-assisted. Co-authored-by: Cursor <cursoragent@cursor.com>
58 lines
2.3 KiB
JavaScript
58 lines
2.3 KiB
JavaScript
import { describe, expect, test } from 'bun:test';
|
|
import { spawnSync } from 'node:child_process';
|
|
import fs from 'fs';
|
|
import path from 'path';
|
|
import { readSourceFiles } from '../../scripts/lib/utils.js';
|
|
|
|
const ROOT = process.cwd();
|
|
|
|
describe('skill detector bundle', () => {
|
|
test('adds the detector wrapper and engine files to skill scripts', () => {
|
|
const { skills } = readSourceFiles(ROOT);
|
|
const skill = skills.find(s => s.name === 'impeccable');
|
|
const scriptNames = new Set(skill.scripts.map(s => s.name));
|
|
|
|
expect(scriptNames.has('detect.mjs')).toBe(true);
|
|
expect(scriptNames.has('detector/detect-antipatterns.mjs')).toBe(true);
|
|
expect(scriptNames.has('detector/detect-antipatterns-browser.js')).toBe(true);
|
|
expect(scriptNames.has('detector/cli/main.mjs')).toBe(true);
|
|
expect(scriptNames.has('detector/engines/static-html/detect-html.mjs')).toBe(true);
|
|
expect(scriptNames.has('detector/vendor/static-html-parsers.mjs')).toBe(true);
|
|
});
|
|
|
|
test('static HTML parser vendor bundle matches the source digest', () => {
|
|
const result = spawnSync(
|
|
process.execPath,
|
|
[path.join(ROOT, 'scripts/build-static-html-parsers.js'), '--check'],
|
|
{ cwd: ROOT, encoding: 'utf8' },
|
|
);
|
|
if (result.status !== 0) {
|
|
throw new Error(result.stderr || result.stdout || `--check exited ${result.status}`);
|
|
}
|
|
expect(result.status).toBe(0);
|
|
});
|
|
|
|
test('static HTML parser --check fails when the vendor bundle is stale', () => {
|
|
const vendor = path.join(ROOT, 'cli/engine/vendor/static-html-parsers.mjs');
|
|
const original = fs.readFileSync(vendor, 'utf8');
|
|
try {
|
|
fs.writeFileSync(vendor, original.replace(/Source digest: [0-9a-f]+/, 'Source digest: deadbeefdeadbeef'));
|
|
const result = spawnSync(
|
|
process.execPath,
|
|
[path.join(ROOT, 'scripts/build-static-html-parsers.js'), '--check'],
|
|
{ cwd: ROOT, encoding: 'utf8' },
|
|
);
|
|
expect(result.status).toBe(1);
|
|
} finally {
|
|
fs.writeFileSync(vendor, original);
|
|
}
|
|
});
|
|
|
|
test('critique references the bundled detector command', () => {
|
|
const critique = fs.readFileSync(path.join(ROOT, 'skill/reference/critique.md'), 'utf-8');
|
|
|
|
expect(critique).toContain('node {{scripts_path}}/detect.mjs --json [target]');
|
|
expect(critique).not.toContain('npx impeccable detect');
|
|
});
|
|
});
|