import { Container } from '@omnitron-dev/titan/nexus'; import { IModule, Provider, ProviderDefinition, Constructor, InjectionToken, RegistrationOptions } from '@omnitron-dev/titan/nexus'; export interface MockConfig { token: InjectionToken; mock: Partial | T; spy?: boolean; } export interface TestContainerOptions { modules?: IModule[]; providers?: Array<[InjectionToken, ProviderDefinition]>; mocks?: MockConfig[]; autoMock?: boolean; isolate?: boolean; detectLeaks?: boolean; trackMemory?: boolean; } export interface Interaction { method: string; args: any[]; result?: any; error?: Error; timestamp?: number; } export interface SpyExpectation { verify(spy: any): boolean; getMessage(): string; } export declare class CallCountExpectation implements SpyExpectation { private expectedCount; private comparison; constructor(expectedCount: number, comparison?: 'exact' | 'atleast' | 'atmost'); verify(spy: any): boolean; getMessage(): string; } export declare class CallArgumentsExpectation implements SpyExpectation { private expectedArgs; private callIndex; constructor(expectedArgs: any[], callIndex?: number); verify(spy: any): boolean; getMessage(): string; } export declare class NeverCalledExpectation implements SpyExpectation { verify(spy: any): boolean; getMessage(): string; } export declare class TestContainer extends Container { private mocks; private spies; private interactions; private snapshots; private expectations; private autoMock; private originalContainer?; private detectLeaks; private trackMemory; private resolvedTokens; private registeredTokens; private initialObjectCount; constructor(options?: TestContainerOptions); mock(token: InjectionToken, mockValue: Partial | T, spy?: boolean): this; private createMock; private wrapWithInteractionRecording; private setupSpies; spy(token: InjectionToken, method: keyof T): any; stub(token: InjectionToken, stub: Partial | T): this; override(token: InjectionToken): { useValue: (value: T) => TestContainer; useClass: (cls: Constructor) => TestContainer; useFactory: (factory: (...args: any[]) => T) => TestContainer; }; getMock(token: InjectionToken): T; getSpy(token: InjectionToken, method: keyof T): any; recordInteraction(token: InjectionToken, interaction: Interaction): void; getInteractions(token: InjectionToken): Interaction[]; clearInteractions(token?: InjectionToken): void; snapshot(name?: string): void; restore(name?: string): void; resetMocks(): void; clearMocks(): void; expect(token: InjectionToken, method: keyof T): { toBeCalledTimes: (count: number) => void; toBeCalledWith: (...args: any[]) => void; toBeCalledAtLeast: (count: number) => void; toBeCalledAtMost: (count: number) => void; neverBeCalled: () => void; }; private addExpectation; private getExpectations; clearExpectations(token?: InjectionToken): void; verifyNoUnexpectedCalls(): void; register(tokenOrProvider: InjectionToken | Provider | Constructor, providerOrOptions?: ProviderDefinition | RegistrationOptions, optionsArg?: RegistrationOptions): this; resolve(token: InjectionToken): T; private createAutoMock; static from(container: Container): TestContainer; private getObjectCount; getMemoryUsage(): { heapUsed: number; heapTotal: number; objectCount: number; }; partialStub(token: InjectionToken, stubs: Partial): this; getLeakedTokens(): InjectionToken[]; getTestMetadata(): { registeredTokens: Set>; resolvedTokens: Set>; mocks: Map, any>; spies: Map, Map>; }; } export declare function createTestContainer(moduleOrOptions?: IModule | TestContainerOptions): TestContainer; export declare function createIsolatedTestContainer(options?: TestContainerOptions): TestContainer; export declare class TestModuleBuilder { private providers; private imports; private mocks; withProvider(token: InjectionToken, provider: ProviderDefinition): this; withMock(token: InjectionToken, mock: Partial | T): this; withModule(module: IModule): this; build(): TestContainer; }