import Executor from './executors/Executor';
import Deferred from './Deferred';
import Task from '@dojo/core/async/Task';
import { InternError } from './types';
import { Remote } from './executors/WebDriver';
import Suite from './Suite';
export default class Test implements TestProperties {
    hasPassed: boolean;
    name: string;
    parent: Suite;
    skipped: string;
    test: TestFunction;
    isAsync: boolean;
    timeElapsed: number;
    error: InternError;
    protected _timeout: number;
    protected _runTask: Task<any>;
    protected _timer: number;
    protected _usesRemote: boolean;
    constructor(options: TestOptions);
    readonly executor: Executor;
    readonly id: string;
    readonly parentId: string;
    readonly remote: Remote;
    readonly sessionId: string;
    timeout: number;
    async(timeout?: number, numCallsUntilResolution?: number): Deferred<any>;
    restartTimeout(timeout?: number): void;
    run(): Task<void>;
    skip(message?: string): void;
    toJSON(): {
        error: InternError;
        id: string;
        parentId: string;
        name: string;
        sessionId: string;
        timeElapsed: number;
        timeout: number;
        hasPassed: boolean;
        skipped: string;
    };
}
export declare function isTest(value: any): value is Test;
export declare function isTestOptions(value: any): value is TestOptions;
export interface TestFunction {
    (this: Test, test: Test): void | Promise<any>;
}
export interface TestProperties {
    hasPassed: boolean;
    name: string;
    parent: Suite;
    skipped: string;
    test: TestFunction;
}
export declare type TestOptions = Partial<TestProperties> & {
    name: string;
    test: TestFunction;
};
export declare const SKIP: any;
