/// <reference types="node" />
import { SuiteConfig } from './config';
import { FlagpoleExecutionOptions } from '../flagpoleexecutionoptions';
export declare enum SuiteExecutionExitCode {
    success = 0,
    failure = 1
}
export declare class SuiteExecutionResult {
    readonly output: string[];
    readonly exitCode: number;
    protected _output: string[];
    protected _exitCode: number;
    constructor(output: string[], exitCode: number);
    toString(): string;
}
export declare class SuiteExecution {
    protected _result: SuiteExecutionResult | null;
    protected _started: number | null;
    protected _finished: number | null;
    protected _subscribers: Function[];
    protected _finally: Function[];
    protected _output: string[];
    protected _finishedPromise: Promise<SuiteExecutionResult>;
    protected _finishedResolver: Function;
    readonly result: Promise<SuiteExecutionResult>;
    readonly exitCode: number | null;
    readonly output: string[];
    static executePath(filePath: string, opts: FlagpoleExecutionOptions): SuiteExecution;
    static executeSuite(config: SuiteConfig): SuiteExecution;
    constructor();
    subscribe(callback: (output: string, execution: SuiteExecution) => void): void;
    finally(callback: (execution: SuiteExecution) => void): void;
    toString(): string;
    executePath(filePath: string, opts: FlagpoleExecutionOptions): Promise<SuiteExecutionResult>;
    executeSuite(config: SuiteConfig): Promise<SuiteExecutionResult>;
    protected _execute(filePath: string, opts: FlagpoleExecutionOptions): Promise<SuiteExecutionResult>;
    protected _logLine(data: string | Buffer): void;
}
export declare class SuiteExecutionInline extends SuiteExecution {
    static executePath(filePath: string, opts: FlagpoleExecutionOptions): SuiteExecutionInline;
    static executeSuite(config: SuiteConfig): SuiteExecutionInline;
    protected _execute(filePath: string, opts: FlagpoleExecutionOptions): Promise<SuiteExecutionResult>;
}
