blob: d4df3cea62c770586773b7d1d864f7737325e988 [file] [log] [blame]
/**
* @license
* Copyright 2022 Google LLC
* SPDX-License-Identifier: Apache-2.0
*/
import {Scheduler, Task} from './scheduler';
type FakeTask = (error?: unknown) => Promise<void>;
export class FakeScheduler<T> implements Scheduler<T> {
readonly scheduled: Array<FakeTask> = [];
schedule(task: Task<T>) {
return new Promise<T>((resolve, reject) => {
this.scheduled.push(async (error?: unknown) => {
if (error) {
reject(error);
} else {
try {
resolve(await task());
} catch (e: unknown) {
reject(e);
}
}
});
});
}
async resolve(): Promise<void> {
if (this.scheduled.length === 0) return;
const fakeTask = this.scheduled.shift() as FakeTask;
await fakeTask();
}
async reject(error: unknown): Promise<void> {
if (this.scheduled.length === 0) return;
const fakeTask = this.scheduled.shift() as FakeTask;
await fakeTask(error);
}
}