summaryrefslogtreecommitdiffstats
path: root/polygerrit-ui/app/services/scheduler/fake-scheduler.ts
diff options
context:
space:
mode:
Diffstat (limited to 'polygerrit-ui/app/services/scheduler/fake-scheduler.ts')
-rw-r--r--polygerrit-ui/app/services/scheduler/fake-scheduler.ts39
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);
+ }
+}