toofast
Version:
The Node.js performance testing tool with unit-test-like API.
128 lines (127 loc) • 4.06 kB
TypeScript
import { HookCallback, MeasureOptions, TestOptions } from './index.js';
import { Histogram, HistogramStats } from './Histogram.js';
export type ParentNode = TestSuiteNode | DescribeNode;
export type ChildNode = DescribeNode | TestNode | MeasureNode;
export declare class Node {
testOptions: TestOptions;
parent: ParentNode | null;
children: Array<ChildNode>;
isSkipped: boolean;
beforeEachHook: HookCallback | undefined;
afterEachHook: HookCallback | undefined;
beforeWarmupHook: HookCallback | undefined;
afterWarmupHook: HookCallback | undefined;
beforeBatchHook: HookCallback | undefined;
afterBatchHook: HookCallback | undefined;
beforeIterationHook: HookCallback | undefined;
afterIterationHook: HookCallback | undefined;
callback: () => PromiseLike<void> | void;
constructor(callback: () => PromiseLike<void> | void, testOptions?: TestOptions);
beforeEach(hook: HookCallback): void;
afterEach(hook: HookCallback): void;
beforeWarmup(hook: HookCallback): void;
afterWarmup(hook: HookCallback): void;
beforeBatch(hook: HookCallback): void;
afterBatch(hook: HookCallback): void;
beforeIteration(hook: HookCallback): void;
afterIteration(hook: HookCallback): void;
appendChild(child: ChildNode): this;
getBlockChildren(): BlockChild[];
}
export declare class TestSuiteNode extends Node {
constructor(testOptions?: TestOptions);
}
export declare class DescribeNode extends Node {
readonly name: string;
constructor(name: string, callback: () => PromiseLike<void> | void, testOptions?: TestOptions);
}
export declare class TestNode extends Node {
readonly name: string;
constructor(name: string, callback: () => PromiseLike<void> | void, testOptions?: TestOptions);
get absoluteName(): string;
}
export declare class MeasureNode extends Node {
constructor(callback: () => void, measureOptions?: MeasureOptions);
}
export type BlockChild = {
type: 'describe';
name: string;
} | {
type: 'test';
name: string;
} | {
type: 'measure';
};
export type RunnerMessage = {
type: 'fatalError';
errorMessage: string;
} | {
type: 'testSuiteStart';
} | {
type: 'testSuiteEnd';
} | {
type: 'describeStart';
name: string;
} | {
type: 'describeEnd';
} | {
type: 'testStart';
name: string;
nodeLocation: number[];
} | {
type: 'testEnd';
durationStats: HistogramStats;
memoryStats: HistogramStats;
} | {
type: 'blockStart';
kind: 'testSuite' | 'describe' | 'test';
children: BlockChild[];
} | {
type: 'blockEnd';
} | {
type: 'error';
errorMessage: string;
} | {
type: 'measureWarmupStart';
} | {
type: 'measureWarmupEnd';
} | {
type: 'measureStart';
} | {
type: 'measureEnd';
durationStats: HistogramStats;
memoryStats: HistogramStats;
} | {
type: 'measureError';
errorMessage: string;
} | {
type: 'measureProgress';
percentage: number;
};
export interface BootstrapRunnerOptions {
setupFiles: string[];
testFile: string;
evalFile(file: string): Promise<void> | void;
sendMessage(message: RunnerMessage): void;
}
export declare function bootstrapRunner(options: BootstrapRunnerOptions): Promise<boolean>;
export interface MeasureResult {
durationHistogram: Histogram;
memoryHistogram: Histogram;
}
export interface RunTestOptions {
startNode: Node;
nodeLocation: number[];
isSkipped(testNode: TestNode): boolean;
setCurrentNode(node: Node): void;
runMeasure(node: MeasureNode): Promise<MeasureResult | null>;
sendMessage(message: RunnerMessage): void;
}
export declare function runTest(options: RunTestOptions): Promise<void>;
export interface RunMeasureOptions {
sendMessage(message: RunnerMessage): void;
getMemoryUsed(): number;
}
export declare function createRunMeasure(options: RunMeasureOptions): (node: MeasureNode) => Promise<MeasureResult | null>;
export declare function getCurrentNode(): Node;
export declare function setCurrentNode(node: Node): void;