UNPKG

@itwin/certa

Version:

A mocha-based integration test runner

221 lines • 14.9 kB
type MochaObj = Mocha.Runnable | Mocha.Suite; /** * Helper for marshalling certain mocha objects between frontend and backend processes. * * Normally, playwright automatically uses JSON to serialize and deserialize arguments to backend functions exposed via `page.exposeFunction()`. * However, we face two problems when trying to pass `Mocha.Runnable` and `Mocha.Suite` instances to the backend: * - These objects have circular references * - JSON round-tripping won't preserve these objects' prototypes, and thus will be missing methods that reporters rely on. * * This class attempts to solve this by replacing all instances of these classes with "handles" that simply refer to their * index in a central "registry" array. Because we serialize and deserialize in the same order, we can re-create this "registry" * on the backend as we deserialize. */ declare class MochaSerializer { private static _registry; static createHandle(raw: MochaObj, isPrimary: boolean): { ctx: Mocha.Context; suites: Mocha.Suite[]; tests: Mocha.Test[]; pending: boolean; file?: string | undefined; root: boolean; delayed: boolean; parent: Mocha.Suite | undefined; title: string; on(event: "beforeAll", listener: (hook: Mocha.Hook) => void): Mocha.Suite; on(event: "afterAll", listener: (hook: Mocha.Hook) => void): Mocha.Suite; on(event: "beforeEach", listener: (hook: Mocha.Hook) => void): Mocha.Suite; on(event: "afterEach", listener: (hook: Mocha.Hook) => void): Mocha.Suite; on(event: "suite", listener: (suite: Mocha.Suite) => void): Mocha.Suite; on(event: "test", listener: (test: Mocha.Test) => void): Mocha.Suite; on(event: "run", listener: () => void): Mocha.Suite; on(event: "pre-require", listener: (context: Mocha.MochaGlobals, file: string, mocha: Mocha) => void): Mocha.Suite; on(event: "require", listener: (module: any, file: string, mocha: Mocha) => void): Mocha.Suite; on(event: "post-require", listener: (context: Mocha.MochaGlobals, file: string, mocha: Mocha) => void): Mocha.Suite; on(event: string, listener: (...args: any[]) => void): Mocha.Suite; once(event: "beforeAll", listener: (hook: Mocha.Hook) => void): Mocha.Suite; once(event: "afterAll", listener: (hook: Mocha.Hook) => void): Mocha.Suite; once(event: "beforeEach", listener: (hook: Mocha.Hook) => void): Mocha.Suite; once(event: "afterEach", listener: (hook: Mocha.Hook) => void): Mocha.Suite; once(event: "suite", listener: (suite: Mocha.Suite) => void): Mocha.Suite; once(event: "test", listener: (test: Mocha.Test) => void): Mocha.Suite; once(event: "run", listener: () => void): Mocha.Suite; once(event: "pre-require", listener: (context: Mocha.MochaGlobals, file: string, mocha: Mocha) => void): Mocha.Suite; once(event: "require", listener: (module: any, file: string, mocha: Mocha) => void): Mocha.Suite; once(event: "post-require", listener: (context: Mocha.MochaGlobals, file: string, mocha: Mocha) => void): Mocha.Suite; once(event: string, listener: (...args: any[]) => void): Mocha.Suite; addListener(event: "beforeAll", listener: (hook: Mocha.Hook) => void): Mocha.Suite; addListener(event: "afterAll", listener: (hook: Mocha.Hook) => void): Mocha.Suite; addListener(event: "beforeEach", listener: (hook: Mocha.Hook) => void): Mocha.Suite; addListener(event: "afterEach", listener: (hook: Mocha.Hook) => void): Mocha.Suite; addListener(event: "suite", listener: (suite: Mocha.Suite) => void): Mocha.Suite; addListener(event: "test", listener: (test: Mocha.Test) => void): Mocha.Suite; addListener(event: "run", listener: () => void): Mocha.Suite; addListener(event: "pre-require", listener: (context: Mocha.MochaGlobals, file: string, mocha: Mocha) => void): Mocha.Suite; addListener(event: "require", listener: (module: any, file: string, mocha: Mocha) => void): Mocha.Suite; addListener(event: "post-require", listener: (context: Mocha.MochaGlobals, file: string, mocha: Mocha) => void): Mocha.Suite; addListener(event: string, listener: (...args: any[]) => void): Mocha.Suite; removeListener(event: "beforeAll", listener: (hook: Mocha.Hook) => void): Mocha.Suite; removeListener(event: "afterAll", listener: (hook: Mocha.Hook) => void): Mocha.Suite; removeListener(event: "beforeEach", listener: (hook: Mocha.Hook) => void): Mocha.Suite; removeListener(event: "afterEach", listener: (hook: Mocha.Hook) => void): Mocha.Suite; removeListener(event: "suite", listener: (suite: Mocha.Suite) => void): Mocha.Suite; removeListener(event: "test", listener: (test: Mocha.Test) => void): Mocha.Suite; removeListener(event: "run", listener: () => void): Mocha.Suite; removeListener(event: "pre-require", listener: (context: Mocha.MochaGlobals, file: string, mocha: Mocha) => void): Mocha.Suite; removeListener(event: "require", listener: (module: any, file: string, mocha: Mocha) => void): Mocha.Suite; removeListener(event: "post-require", listener: (context: Mocha.MochaGlobals, file: string, mocha: Mocha) => void): Mocha.Suite; removeListener(event: string, listener: (...args: any[]) => void): Mocha.Suite; prependListener(event: "beforeAll", listener: (hook: Mocha.Hook) => void): Mocha.Suite; prependListener(event: "afterAll", listener: (hook: Mocha.Hook) => void): Mocha.Suite; prependListener(event: "beforeEach", listener: (hook: Mocha.Hook) => void): Mocha.Suite; prependListener(event: "afterEach", listener: (hook: Mocha.Hook) => void): Mocha.Suite; prependListener(event: "suite", listener: (suite: Mocha.Suite) => void): Mocha.Suite; prependListener(event: "test", listener: (test: Mocha.Test) => void): Mocha.Suite; prependListener(event: "run", listener: () => void): Mocha.Suite; prependListener(event: "pre-require", listener: (context: Mocha.MochaGlobals, file: string, mocha: Mocha) => void): Mocha.Suite; prependListener(event: "require", listener: (module: any, file: string, mocha: Mocha) => void): Mocha.Suite; prependListener(event: "post-require", listener: (context: Mocha.MochaGlobals, file: string, mocha: Mocha) => void): Mocha.Suite; prependListener(event: string, listener: (...args: any[]) => void): Mocha.Suite; prependOnceListener(event: "beforeAll", listener: (hook: Mocha.Hook) => void): Mocha.Suite; prependOnceListener(event: "afterAll", listener: (hook: Mocha.Hook) => void): Mocha.Suite; prependOnceListener(event: "beforeEach", listener: (hook: Mocha.Hook) => void): Mocha.Suite; prependOnceListener(event: "afterEach", listener: (hook: Mocha.Hook) => void): Mocha.Suite; prependOnceListener(event: "suite", listener: (suite: Mocha.Suite) => void): Mocha.Suite; prependOnceListener(event: "test", listener: (test: Mocha.Test) => void): Mocha.Suite; prependOnceListener(event: "run", listener: () => void): Mocha.Suite; prependOnceListener(event: "pre-require", listener: (context: Mocha.MochaGlobals, file: string, mocha: Mocha) => void): Mocha.Suite; prependOnceListener(event: "require", listener: (module: any, file: string, mocha: Mocha) => void): Mocha.Suite; prependOnceListener(event: "post-require", listener: (context: Mocha.MochaGlobals, file: string, mocha: Mocha) => void): Mocha.Suite; prependOnceListener(event: string, listener: (...args: any[]) => void): Mocha.Suite; emit(name: "beforeAll", hook: Mocha.Hook): boolean; emit(name: "afterAll", hook: Mocha.Hook): boolean; emit(name: "beforeEach", hook: Mocha.Hook): boolean; emit(name: "afterEach", hook: Mocha.Hook): boolean; emit(name: "suite", suite: Mocha.Suite): boolean; emit(name: "test", test: Mocha.Test): boolean; emit(name: "run"): boolean; emit(name: "pre-require", context: Mocha.MochaGlobals, file: string, mocha: Mocha): boolean; emit(name: "require", module: any, file: string, mocha: Mocha): boolean; emit(name: "post-require", context: Mocha.MochaGlobals, file: string, mocha: Mocha): boolean; emit(name: string, ...args: any[]): boolean; off<K>(eventName: string | symbol, listener: (...args: any[]) => void): Mocha.Suite; removeAllListeners(eventName?: string | symbol | undefined): Mocha.Suite; setMaxListeners(n: number): Mocha.Suite; getMaxListeners(): number; listeners<K>(eventName: string | symbol): Function[]; rawListeners<K>(eventName: string | symbol): Function[]; listenerCount<K>(eventName: string | symbol, listener?: Function | undefined): number; eventNames(): (string | symbol)[]; [EventEmitter.captureRejectionSymbol]?<K>(error: Error, event: string | symbol, ...args: any[]): void; $$index: number; $$typeName: string; } | { type: "test"; speed?: "slow" | "medium" | "fast" | undefined; err?: Error | undefined; id: string; title: string; fn: Mocha.Func | Mocha.AsyncFunc | undefined; body: string; async: boolean; sync: boolean; timedOut: boolean; pending: boolean; duration?: number | undefined; parent?: Mocha.Suite | undefined; state?: "failed" | "passed" | "pending" | undefined; timer?: any; ctx?: Mocha.Context | undefined; callback?: Mocha.Done | undefined; allowUncaught?: boolean | undefined; file?: string | undefined; on(event: "error", listener: (error: any) => void): Mocha.Test; on(event: string, listener: (...args: any[]) => void): Mocha.Test; once(event: "error", listener: (error: any) => void): Mocha.Test; once(event: string, listener: (...args: any[]) => void): Mocha.Test; addListener(event: "error", listener: (error: any) => void): Mocha.Test; addListener(event: string, listener: (...args: any[]) => void): Mocha.Test; removeListener(event: "error", listener: (error: any) => void): Mocha.Test; removeListener(event: string, listener: (...args: any[]) => void): Mocha.Test; prependListener(event: "error", listener: (error: any) => void): Mocha.Test; prependListener(event: string, listener: (...args: any[]) => void): Mocha.Test; prependOnceListener(event: "error", listener: (error: any) => void): Mocha.Test; prependOnceListener(event: string, listener: (...args: any[]) => void): Mocha.Test; emit(name: "error", error: any): boolean; emit(name: string, ...args: any[]): boolean; off<K>(eventName: string | symbol, listener: (...args: any[]) => void): Mocha.Test; removeAllListeners(eventName?: string | symbol | undefined): Mocha.Test; setMaxListeners(n: number): Mocha.Test; getMaxListeners(): number; listeners<K>(eventName: string | symbol): Function[]; rawListeners<K>(eventName: string | symbol): Function[]; listenerCount<K>(eventName: string | symbol, listener?: Function | undefined): number; eventNames(): (string | symbol)[]; [EventEmitter.captureRejectionSymbol]?<K>(error: Error, event: string | symbol, ...args: any[]): void; $$index: number; $$typeName: string; } | { type: "hook"; originalTitle?: string | undefined; id: string; title: string; fn: Mocha.Func | Mocha.AsyncFunc | undefined; body: string; async: boolean; sync: boolean; timedOut: boolean; pending: boolean; duration?: number | undefined; parent?: Mocha.Suite | undefined; state?: "failed" | "passed" | "pending" | undefined; timer?: any; ctx?: Mocha.Context | undefined; callback?: Mocha.Done | undefined; allowUncaught?: boolean | undefined; file?: string | undefined; on(event: "error", listener: (error: any) => void): Mocha.Hook; on(event: string, listener: (...args: any[]) => void): Mocha.Hook; once(event: "error", listener: (error: any) => void): Mocha.Hook; once(event: string, listener: (...args: any[]) => void): Mocha.Hook; addListener(event: "error", listener: (error: any) => void): Mocha.Hook; addListener(event: string, listener: (...args: any[]) => void): Mocha.Hook; removeListener(event: "error", listener: (error: any) => void): Mocha.Hook; removeListener(event: string, listener: (...args: any[]) => void): Mocha.Hook; prependListener(event: "error", listener: (error: any) => void): Mocha.Hook; prependListener(event: string, listener: (...args: any[]) => void): Mocha.Hook; prependOnceListener(event: "error", listener: (error: any) => void): Mocha.Hook; prependOnceListener(event: string, listener: (...args: any[]) => void): Mocha.Hook; emit(name: "error", error: any): boolean; emit(name: string, ...args: any[]): boolean; off<K>(eventName: string | symbol, listener: (...args: any[]) => void): Mocha.Hook; removeAllListeners(eventName?: string | symbol | undefined): Mocha.Hook; setMaxListeners(n: number): Mocha.Hook; getMaxListeners(): number; listeners<K>(eventName: string | symbol): Function[]; rawListeners<K>(eventName: string | symbol): Function[]; listenerCount<K>(eventName: string | symbol, listener?: Function | undefined): number; eventNames(): (string | symbol)[]; [EventEmitter.captureRejectionSymbol]?<K>(error: Error, event: string | symbol, ...args: any[]): void; $$index: number; $$typeName: string; } | { $$index: number; $$typeName: string; }; /** * (On the frontend) Serializes a value to JSON string, recursively replacing any MochaObjs with appropriate handles * TODO: There are ***surely*** more performant ways to do this... * * @param root The root object to serialize. If this is a MochaObj, it will always include all * properties (even if it should already exist in the backend's registry). */ static serialize(root: any): string; /** * (On the backend) Deserializes a JSON string, replacing any MochaObj handles with their corresponding instances. * The first time we encounter a given instance's handle, we'll transform that handle object to serve as the actual instance on the backend. */ static deserialize(txt: string): any; } //# sourceMappingURL=MochaSerializer.d.ts.map