diff options
Diffstat (limited to 'polygerrit-ui/app/services/scheduler/fake-scheduler.ts')
-rw-r--r-- | polygerrit-ui/app/services/scheduler/fake-scheduler.ts | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/polygerrit-ui/app/services/scheduler/fake-scheduler.ts b/polygerrit-ui/app/services/scheduler/fake-scheduler.ts new file mode 100644 index 0000000000..d4df3cea62 --- /dev/null +++ b/polygerrit-ui/app/services/scheduler/fake-scheduler.ts @@ -0,0 +1,39 @@ +/** + * @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); + } +} |