export declare type TestRunner = (desc: string, fn: () => void) => void; export interface TestCaseChain1 { case(a: A): TestCaseChain1; run(msg: string, cb: (a: A) => void): void; } export interface TestCaseChain2 { case(a: A, b: B): TestCaseChain2; run(msg: string, cb: (a: A, b: B) => void): void; } export interface TestCaseChain3 { case(a: A, b: B, c: C): TestCaseChain3; run(msg: string, cb: (a: A, b: B, c: C) => void): void; } export interface TestCaseChain4 { case(a: A, b: B, c: C, d: D): TestCaseChain4; run(msg: string, cb: (a: A, b: B, c: C, d: D) => void): void; } export interface TestCaseChain5 { case(a: A, b: B, c: C, d: D, e: E): TestCaseChain5; run(msg: string, cb: (a: A, b: B, c: C, d: D, e: E) => void): void; } export interface TestCaseChain { case(...args: any[]): TestCaseChain; run(msg: string, cb: (...args: any[]) => void): void; } export interface TestCaseFunction { case(a: A): TestCaseChain1; case(a: A, b: B): TestCaseChain2; case(a: A, b: B, c: C): TestCaseChain3; case(a: A, b: B, c: C, d: D): TestCaseChain4; case(a: A, b: B, c: C, d: D, e: E): TestCaseChain5; case(...args: any[]): TestCaseChain; } export declare type EnhancedTestRunner = TestCaseFunction & Runner; export declare function setup(testRunner: Runner): EnhancedTestRunner;