import { FakeTimerInstallOpts } from '@sinonjs/fake-timers';
import { targetType, anyFunction } from './executables';
import { factoryMethod } from './testCase';
export type valFunction = () => unknown | Promise<unknown>;
export type extraInfo = {
    [key: string]: string | number;
};
export interface ControlMethods {
    beforeInner?: valFunction[];
    beforeLast?: valFunction;
    afterFirst?: valFunction;
    afterInner?: valFunction[];
    beforeEachInner?: valFunction[];
    beforeEachLast?: valFunction;
    afterEachFirst?: valFunction;
    afterEachInner?: valFunction[];
}
export declare enum SinonKind {
    Spy = 0,
    Stub = 1,
    Rewire = 2,
    RewireReload = 3,
    Import = 4,
    Timers = 5,
    Fixture = 6,
    Component = 7
}
export declare enum SetStubType {
    None = 0,
    Fake = 1,
    Return = 2,
    Resolve = 3,
    Reject = 4,
    Access = 5,
    Construct = 6
}
export interface SinonInfo {
    caller: string;
    target: targetType | string;
    method?: string;
    memberMethod?: string;
    kind: SinonKind;
    setStub?: {
        type: SetStubType;
        value: unknown;
    };
    timersConfig?: number | Date | Partial<FakeTimerInstallOpts>;
    context: string;
    global?: boolean;
}
export declare class commentInfo {
    commentText: string;
    extraData?: extraInfo;
}
export declare class ItInfo {
    comments?: commentInfo[];
    itText: string;
    instanceIndex?: number;
    pending: boolean;
    extraData?: extraInfo;
    sinons: {
        [paramterIndex: number]: SinonInfo;
    };
    method: anyFunction;
}
export declare class CaseInfo {
    stepsFactory: factoryMethod;
    constructor(text: string, stepsFactory: factoryMethod);
    caseText: string;
    extraData?: extraInfo;
    its: ItInfo[];
    instances: unknown[];
}
export declare class ContextInfo {
    constructor(text: string);
    contextText: string;
    extraData?: extraInfo;
    contextControlMethods: ControlMethods;
    itsAndCases: {
        [text: string]: ItInfo | CaseInfo;
    };
}
export declare class DescribeInfo {
    describeText: string;
    extraData?: extraInfo;
    currentContext: string;
    contexts: {
        [text: string]: ContextInfo;
    };
    methodsContexts: {
        [methodName: string]: string;
    };
    uncontext: ContextInfo;
    sandboxes: string[];
    sinons: {
        [memberName: string]: SinonInfo;
    };
    lastSinon: {
        name: string;
        sinon: SinonInfo;
    };
    lastControlMethod: {
        name: string;
        context: string;
        controlName: string;
    };
    getContext(contextName: string): ContextInfo;
    setMethodContext(methodName: string, contextName?: string, contextExtraData?: extraInfo): void;
    setMemberContext(memberName: string, contextName: string, extraData: extraInfo): void;
    getIt(methodName: string): ItInfo;
    getCase(methodName: string, text: string, stepsFactory: factoryMethod): CaseInfo;
    setIt(methodName: string, itText: string, itMethod: anyFunction, extraData?: extraInfo): void;
    setComment(methodName: string, commentText: string, extraData?: extraInfo): void;
    setCase(methodName: string, caseText: string, instanceConstructor: factoryMethod): CaseInfo;
    setPending(methodName: string): void;
    addSinon(propertyKey: string, parameterIndex: number | undefined, sinon: SinonInfo): void;
    getSinon(propertyKey: string, parameterIndex: number | undefined): SinonInfo;
}
export declare function getInfo(target: targetType): DescribeInfo;
