import { TestContainer } from './test-container.js'; import { Container } from '@omnitron-dev/titan/nexus'; import { Scope, IModule, Provider, ProviderDefinition, Constructor, InjectionToken, InjectionToken as Token, RegistrationOptions } from '@omnitron-dev/titan/nexus'; export interface TestMockConfig { [key: string]: any; } export interface TestProvider { provide: Token; useValue?: T; useClass?: Constructor; useFactory?: (...args: any[]) => T; useToken?: Token; inject?: Token[]; } export interface TestModuleConfig { name: string; providers?: (Provider | TestProvider)[]; mocks?: (Provider | TestProvider)[]; imports?: IModule[]; exports?: Token[]; } export interface TestHarnessConfig { component?: Constructor; providers?: Array<[InjectionToken, ProviderDefinition] | TestProvider>; zone?: { onEnter?: () => void; onLeave?: () => void; onError?: (error: Error) => void; }; } export interface TestContainerOptionsExtended { autoMock?: boolean; detectLeaks?: boolean; trackMemory?: boolean; } export interface MemoryUsage { heapUsed: number; heapTotal: number; objectCount: number; } export declare class SnapshotContainer extends Container { private snapshots; private snapshotCounter; private snapshotStack; snapshot(): string; restore(snapshotId: string): void; withSnapshot(callback: () => T): T; register(tokenOrProvider: InjectionToken | Provider | Constructor, providerOrOptions?: ProviderDefinition | RegistrationOptions, optionsArg?: RegistrationOptions): this; } export declare class IsolatedContainer extends Container { constructor(); static withImports(source: Container, tokens: Token[]): IsolatedContainer; } export declare class TestModule implements IModule { readonly name: string; readonly providers: Provider[]; readonly imports: IModule[]; readonly exports: Token[]; constructor(name: string, providers?: Provider[], imports?: IModule[], exports?: Token[]); static override(original: IModule, overrides: { providers?: Array | [InjectionToken, Provider]>; }): TestModule; } export declare class TestHarness { private config; private container; private zone?; private initialized; constructor(config: TestHarnessConfig); initialize(): Promise; get(token: Token): T; detectChanges(): Promise; runInZone(callback: () => Promise): Promise; cleanup(): Promise; } export interface ResolutionExpectation { toResolve(): ResolutionExpectation; withValue(expected: T): ResolutionExpectation; inTime(maxMs: number): Promise; } export interface RejectionExpectation { toThrow(message?: string): RejectionExpectation; withErrorType(errorType: Constructor): Promise; } export interface DependencyExpectation { toHaveDependency(token: Token): DependencyExpectation; withCardinality(count: number): void; } export interface LifecycleExpectation { toCallOnInit(): LifecycleExpectation; toCallOnDestroy(): Promise; } export declare function waitFor(condition: () => boolean | Promise, timeout?: number, interval?: number): Promise; export declare function createDeferred(): { promise: Promise; resolve: (value: T) => void; reject: (error: Error) => void; }; export declare function createTestProvider(value: T, options?: { scope?: Scope; tags?: string[]; }): ProviderDefinition; export declare function createTestFactoryProvider(factory: (...args: any[]) => T, options?: { inject?: Token[]; scope?: Scope; tags?: string[]; }): ProviderDefinition; export declare function createTestClassProvider(cls: new (...args: any[]) => T, options?: { inject?: Token[]; scope?: Scope; tags?: string[]; }): ProviderDefinition; export declare function assertThrows(fn: () => any | Promise, errorType?: new (...args: any[]) => E, message?: string | RegExp): Promise; export declare function createTestToken(name: string, metadata?: Record): Token; export declare function verifyContainerState(container: TestContainer, expectations: { registeredTokens?: Token[]; resolvedTokens?: Token[]; mocks?: Token[]; spies?: Array<{ token: Token; method: string; }>; }): void; export declare function cleanupTest(container: TestContainer): void; export declare function createTestSuite(name: string, setup: () => TestContainer | Promise): { container: TestContainer; beforeEach: () => Promise; afterEach: () => void; }; export declare function createTestModule(config: TestModuleConfig): TestModule; export declare function createTestHarness(config: TestHarnessConfig): TestHarness; export declare function expectResolution(container: Container, token: Token): ResolutionExpectation; export declare function expectRejection(container: Container, token: Token): RejectionExpectation; export declare function expectDependency(container: Container, token: Token): DependencyExpectation; export declare function expectLifecycle(container: Container, token: Token): LifecycleExpectation;