import { OnLine } from "../utils/exec.js"; export interface TestResult { success: boolean; tests_found: boolean; build_output: string; test_output: string; passed: number; failed: number; errors: string[]; duration_seconds: number; /** Which suite ran: the Catch2 binary, or ctest driving the labelled entries. */ runner?: "catch2" | "ctest"; labels?: string[]; } /** * CTest labels the crosspad-pc suite defines. The GUI harness is a second * executable registered only as CTest entries, so `crosspad_tests` — the * binary this tool has always run — cannot reach it at all: without a label * the [gui] cases were simply unreachable from here. */ export type TestLabel = "gui" | "flaky"; /** * Build and run the crosspad test suite (Catch2). * If tests/ dir doesn't exist, offers to scaffold it. */ export declare function crosspadTest(filter?: string, listOnly?: boolean, onLine?: OnLine, signal?: AbortSignal, labels?: TestLabel[]): Promise; /** * The ctest invocation for a label selection. * * `gui` without `flaky` excludes the flaky entries, which is the split the * suite's own CMakeLists documents (`ctest -L gui -LE flaky`): the CITest * audio self-test is intermittently red and must not redden the GUI harness. * Asking for `flaky` explicitly is how you get it anyway. * * @internal exported for testing */ export declare function ctestCommand(labels: TestLabel[], filter: string, listOnly: boolean): string; /** @internal exported for testing */ export declare function parseCtestOutput(output: string): { passed: number; failed: number; }; /** @internal exported for testing */ export declare function parseCatch2Output(output: string): { passed: number; failed: number; }; /** @internal exported for testing */ export declare function parseErrors(output: string): string[];