import { Hooks } from '@poppinss/hooks';
import { Test } from './main';
import { Emitter } from '../emitter';
import { TestEndNode } from '../types';
/**
 * Dummy test runner that just emits the required events
 */
export declare class DummyRunner {
    private test;
    private emitter;
    constructor(test: Test<any, any>, emitter: Emitter);
    /**
     * Notify the reporter about the test start
     */
    private notifyStart;
    /**
     * Notify the reporter about the test start
     */
    private notifyEnd;
    /**
     * Run test
     */
    run(): void;
}
/**
 * Run an instance of test
 */
export declare class TestRunner {
    private test;
    private hooks;
    private emitter;
    private disposeCalls;
    private datasetCurrentIndex?;
    /**
     * Time tracker to find test duration
     */
    private timeTracker;
    /**
     * Reference to the startup runner
     */
    private setupRunner;
    /**
     * Reference to the cleanup runner
     */
    private teardownRunner;
    /**
     * Test errors
     */
    private errors;
    /**
     * Track if test has any errors
     */
    private hasError;
    private uncaughtExceptionHandler?;
    constructor(test: Test<any, any>, hooks: Hooks, emitter: Emitter, disposeCalls: ((test: Test<any, any>, hasError: boolean, errors: TestEndNode['errors']) => void)[], datasetCurrentIndex?: number | undefined);
    /**
     * Returns the dataset node for the test events
     */
    private getDatasetNode;
    /**
     * Get the title node for the test
     */
    private getTitle;
    /**
     * Notify the reporter about the test start
     */
    private notifyStart;
    /**
     * Notify the reporter about the test start
     */
    private notifyEnd;
    /**
     * Running setup hooks
     */
    private runSetupHooks;
    /**
     * Running teardown hooks
     */
    private runTeardownHooks;
    /**
     * Running test cleanup functions
     */
    private runTestCleanupFunctions;
    /**
     * Running setup cleanup functions
     */
    private runSetupCleanupFunctions;
    /**
     * Running teardown cleanup functions
     */
    private runTeardownCleanupFunctions;
    /**
     * Run the test executor. The method takes care of passing
     * dataset row to the test method
     */
    private runTest;
    /**
     * Run the test executor that relies on the done method. The test will
     * timeout if done isn't called.
     */
    private runTestWithDone;
    /**
     * Run the test executor and make sure it times out after the configured
     * timeout.
     */
    private wrapTestInTimeout;
    /**
     * Runs the test with retries in place
     */
    private wrapTestInRetries;
    /**
     * Run the test
     */
    run(): Promise<void>;
}
