import Suite, { SuiteProperties } from '../Suite';
import Test, { TestFunction } from '../Test';
import Executor from '../executors/Executor';
export default function getInterface(executor: Executor): {
    registerSuite(descriptor: ObjectSuiteDescriptor | ObjectSuiteFactory): void;
};
export interface ObjectInterface {
    registerSuite(mainDescriptor: ObjectSuiteDescriptor | ObjectSuiteFactory): void;
}
export declare type SuiteDescriptor = {
    tests: {
        [name: string]: SuiteDescriptor | TestFunction;
    };
};
export declare type NestedSuiteDescriptor = Partial<SuiteProperties> & {
    tests: {
        [name: string]: NestedSuiteDescriptor | TestFunction;
    };
};
export declare type ObjectSuiteDescriptor = NestedSuiteDescriptor & {
    name: string;
};
export interface ObjectSuiteFactory {
    (): ObjectSuiteDescriptor;
}
export declare function isSuiteDescriptorFactory<T>(value: any): value is T;
export declare function registerSuite<P extends SuiteDescriptor, S extends typeof Suite, T extends typeof Test>(executor: Executor, descriptor: P, SuiteClass: S, TestClass: T): void;
export interface PropertyHandler {
    (key: string, value: any, suite: Suite): boolean;
}
