import { OperationSpecRegistry } from '../index';
import type { HandlerCtx } from '../types';
import type { Assertion, TestScenario, TestSpec } from './spec';
export interface ScenarioRunResult {
    scenario: TestScenario;
    status: 'passed' | 'failed';
    error?: Error;
    assertionResults: AssertionResult[];
}
export interface AssertionResult {
    assertion: Assertion;
    status: 'passed' | 'failed';
    message?: string;
}
export interface TestRunResult {
    spec: TestSpec;
    scenarios: ScenarioRunResult[];
    passed: number;
    failed: number;
}
export interface TestRunnerConfig {
    registry: OperationSpecRegistry;
    createContext?: () => HandlerCtx | Promise<HandlerCtx>;
    beforeEach?: (scenario: TestScenario) => void | Promise<void>;
    afterEach?: (scenario: TestScenario, result: ScenarioRunResult) => void | Promise<void>;
}
export declare class TestRunner {
    private readonly config;
    constructor(config: TestRunnerConfig);
    run(spec: TestSpec): Promise<TestRunResult>;
    private runScenario;
    private createContext;
    private executeOperation;
    private evaluateAssertion;
    private evaluateOutputAssertion;
    private evaluateErrorAssertion;
    private evaluateEventsAssertion;
}
