import { Macroable } from 'macroable';
import { Suite } from './suite/main';
import { Emitter } from './emitter';
import { ReporterContract, RunnerSummary } from './types';
/**
 * The Runner class exposes the API to register test suites and execute
 * them sequentially.
 *
 * @example
 * const runner = new Runner(emitter)
 * const suite = new Suite('unit', emitter)
 *
 * runner.add(suite)
 * runner.registerReporter(reporters.list)
 *
 * await runner.exec()
 */
export declare class Runner<Context extends Record<any, any>> extends Macroable {
    private emitter;
    static macros: {};
    static getters: {};
    /**
     * Callbacks to invoke on every suite
     */
    private configureSuiteCallbacks;
    /**
     * Reference to tests tracker
     */
    private tracker;
    /**
     * Handler to listen for uncaughtException
     */
    private uncaughtExceptionHandler?;
    /**
     * A collection of suites
     */
    suites: Suite<Context>[];
    /**
     * Registered tests reporter
     */
    reporters: Set<ReporterContract>;
    constructor(emitter: Emitter);
    /**
     * Notify the reporter about the runner start
     */
    private notifyStart;
    /**
     * Notify the reporter about the runner end
     */
    private notifyEnd;
    /**
     * Boot the runner
     */
    private boot;
    /**
     * Add a suite to the runner
     */
    add(suite: Suite<Context>): this;
    /**
     * Tap into each suite and configure it
     */
    onSuite(callback: (suite: Suite<Context>) => void): this;
    /**
     * Register a tests reporter
     */
    registerReporter(reporter: ReporterContract): this;
    /**
     * Manage unhandled exceptions occurred during tests
     */
    manageUnHandledExceptions(): this;
    /**
     * Get tests summary
     */
    getSummary(): RunnerSummary;
    /**
     * Start the test runner process. The method emits
     * "runner:start" event
     */
    start(): Promise<void>;
    /**
     * Execute runner suites
     */
    exec(): Promise<void>;
    /**
     * End the runner process. Emits "runner:end" event
     */
    end(): Promise<void>;
}
