@travetto/test
Version:
Declarative test framework
61 lines (53 loc) • 1.58 kB
text/typescript
import type { SuitesSummary, TestConsumerShape, TestRunState } from '../types.ts';
import type { TestEvent, TestRemoveEvent } from '../../model/event.ts';
/**
* Delegating event consumer
*/
export abstract class DelegatingConsumer implements TestConsumerShape {
constructor(consumers: TestConsumerShape[]) {
this.
for (const consumer of consumers) {
consumer.onEvent = consumer.onEvent.bind(consumer);
}
}
async onStart(state: TestRunState): Promise<void> {
for (const consumer of this.
await consumer.onStart?.(state);
}
}
onRemoveEvent(event: TestRemoveEvent): void {
let result = event;
if (this.transformRemove) {
result = this.transformRemove(event) ?? event;
}
if (result) {
for (const consumer of this.
consumer.onRemoveEvent?.(result);
}
}
}
delegateEvent(event: TestEvent): void {
for (const consumer of this.
consumer.onEvent(event);
}
}
onEvent(event: TestEvent): void {
let result = event;
if (this.transform) {
result = this.transform(event) ?? event;
}
if (result) {
this.delegateEvent(result);
}
}
async summarize(summary?: SuitesSummary): Promise<void> {
if (summary) {
for (const consumer of this.
await consumer.onSummary?.(summary);
}
}
}
transform?(event: TestEvent): TestEvent | undefined;
transformRemove?(event: TestRemoveEvent): TestRemoveEvent | undefined;
}