import { DataSetNode, Test as BaseTest, Group as BaseGroup, Suite as BaseSuite, Runner as BaseRunner, TestHooksCleanupHandler, TestContext as BaseTestContext } from '@japa/core';
/**
 * Runner specific test context. Here we extend the test context to register
 * cleanup methods with the test and register hooks to get notified when
 * a new instance of test context is created.
 */
export declare class TestContext extends BaseTestContext {
    test: Test;
    /**
     * Methods to call after the test context instance
     * is created
     */
    static createdCallbacks: ((context: TestContext) => void)[];
    /**
     * Register a function to get notified when an instance of test
     * context is created. The callback must be synchronous
     */
    static created(callback: (context: TestContext) => void): typeof TestContext;
    /**
     * Register a cleanup function. Cleanup functions are called after
     * the test finishes
     */
    cleanup: (handler: TestHooksCleanupHandler<this>) => void;
    constructor(test: Test);
}
/**
 * Runner specific Test with a fixed TestContext static type.
 */
export declare class Test<TestData extends DataSetNode = undefined> extends BaseTest<TestContext, TestData> {
    static disposeCallbacks: never[];
}
/**
 * Runner specific Group with a fixed TestContext static type.
 */
export declare class Group extends BaseGroup<TestContext> {
}
/**
 * Runner specific Suite with a fixed TestContext static type.
 */
export declare class Suite extends BaseSuite<TestContext> {
    onGroup(callback: (group: Group) => void): this;
    onTest(callback: (test: Test<any>) => void): this;
}
/**
 * Runner specific tests Runner with a fixed TestContext static type.
 */
export declare class Runner extends BaseRunner<TestContext> {
    onSuite(callback: (suite: Suite) => void): this;
}
