mirror of
https://github.com/garrytan/gstack.git
synced 2026-05-02 11:45:20 +02:00
27b28b048d
Tests all commands against local Bun test server serving HTML fixtures. Covers navigation, content extraction, JS/CSS inspection, form interaction, SPA rendering, console/network buffers, tabs, screenshots, responsive, diff, chain, and storage. 40 pass, 0 fail, 2s runtime. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
48 lines
1.4 KiB
TypeScript
48 lines
1.4 KiB
TypeScript
/**
|
|
* Tiny Bun.serve for test fixtures
|
|
* Serves HTML files from test/fixtures/ on a random available port
|
|
*/
|
|
|
|
import * as path from 'path';
|
|
import * as fs from 'fs';
|
|
|
|
const FIXTURES_DIR = path.resolve(import.meta.dir, 'fixtures');
|
|
|
|
export function startTestServer(port: number = 0): { server: ReturnType<typeof Bun.serve>; url: string } {
|
|
const server = Bun.serve({
|
|
port,
|
|
hostname: '127.0.0.1',
|
|
fetch(req) {
|
|
const url = new URL(req.url);
|
|
let filePath = url.pathname === '/' ? '/basic.html' : url.pathname;
|
|
|
|
// Remove leading slash
|
|
filePath = filePath.replace(/^\//, '');
|
|
const fullPath = path.join(FIXTURES_DIR, filePath);
|
|
|
|
if (!fs.existsSync(fullPath)) {
|
|
return new Response('Not Found', { status: 404 });
|
|
}
|
|
|
|
const content = fs.readFileSync(fullPath, 'utf-8');
|
|
const ext = path.extname(fullPath);
|
|
const contentType = ext === '.html' ? 'text/html' : 'text/plain';
|
|
|
|
return new Response(content, {
|
|
headers: { 'Content-Type': contentType },
|
|
});
|
|
},
|
|
});
|
|
|
|
const url = `http://127.0.0.1:${server.port}`;
|
|
return { server, url };
|
|
}
|
|
|
|
// If run directly, start and print URL
|
|
if (import.meta.main) {
|
|
const { server, url } = startTestServer(9450);
|
|
console.log(`Test server running at ${url}`);
|
|
console.log(`Fixtures: ${FIXTURES_DIR}`);
|
|
console.log('Press Ctrl+C to stop');
|
|
}
|