import { type IPreTaskFunction } from './tapbundle.classes.pretask.js';
import { TapTest, type ITestFunction } from './tapbundle.classes.taptest.js';
export declare class Tap<T> {
    /**
     * skips a test
     * tests marked with tap.skip.test() are never executed
     */
    skip: {
        test: (descriptionArg: string, functionArg: ITestFunction<T>) => void;
        testParallel: (descriptionArg: string, functionArg: ITestFunction<T>) => void;
    };
    /**
     * only executes tests marked as ONLY
     */
    only: {
        test: (descriptionArg: string, testFunctionArg: ITestFunction<T>) => void;
    };
    private _tapPreTasks;
    private _tapTests;
    private _tapTestsOnly;
    /**
     * Normal test function, will run one by one
     * @param testDescription - A description of what the test does
     * @param testFunction - A Function that returns a Promise and resolves or rejects
     */
    test(testDescription: string, testFunction: ITestFunction<T>, modeArg?: 'normal' | 'only' | 'skip'): TapTest<T>;
    preTask(descriptionArg: string, functionArg: IPreTaskFunction): void;
    /**
     * A parallel test that will not be waited for before the next starts.
     * @param testDescription - A description of what the test does
     * @param testFunction - A Function that returns a Promise and resolves or rejects
     */
    testParallel(testDescription: string, testFunction: ITestFunction<T>): void;
    /**
     * starts the test evaluation
     */
    start(optionsArg?: {
        throwOnError: boolean;
    }): Promise<void>;
    stopForcefully(codeArg?: number, directArg?: boolean): Promise<void>;
    /**
     * handle errors
     */
    threw(err: Error): void;
    /**
     * Explicitly fail the current test with a custom message
     * @param message - The failure message to display
     */
    fail(message?: string): never;
}
export declare let tap: Tap<unknown>;
