summaryrefslogtreecommitdiffstats
path: root/remote/test/puppeteer/packages/puppeteer-core/src/util/Deferred.test.ts
diff options
context:
space:
mode:
Diffstat (limited to 'remote/test/puppeteer/packages/puppeteer-core/src/util/Deferred.test.ts')
-rw-r--r--remote/test/puppeteer/packages/puppeteer-core/src/util/Deferred.test.ts68
1 files changed, 68 insertions, 0 deletions
diff --git a/remote/test/puppeteer/packages/puppeteer-core/src/util/Deferred.test.ts b/remote/test/puppeteer/packages/puppeteer-core/src/util/Deferred.test.ts
new file mode 100644
index 0000000000..b989e3a888
--- /dev/null
+++ b/remote/test/puppeteer/packages/puppeteer-core/src/util/Deferred.test.ts
@@ -0,0 +1,68 @@
+/**
+ * @license
+ * Copyright 2023 Google Inc.
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+import {describe, it} from 'node:test';
+
+import expect from 'expect';
+import sinon from 'sinon';
+
+import {Deferred} from './Deferred.js';
+
+describe('DeferredPromise', function () {
+ it('should catch errors', async () => {
+ // Async function before try/catch.
+ async function task() {
+ await new Promise(resolve => {
+ return setTimeout(resolve, 50);
+ });
+ }
+ // Async function that fails.
+ function fails(): Deferred<void> {
+ const deferred = Deferred.create<void>();
+ setTimeout(() => {
+ deferred.reject(new Error('test'));
+ }, 25);
+ return deferred;
+ }
+
+ const expectedToFail = fails();
+ await task();
+ let caught = false;
+ try {
+ await expectedToFail.valueOrThrow();
+ } catch (err) {
+ expect((err as Error).message).toEqual('test');
+ caught = true;
+ }
+ expect(caught).toBeTruthy();
+ });
+
+ it('Deferred.race should cancel timeout', async function () {
+ const clock = sinon.useFakeTimers();
+
+ try {
+ const deferred = Deferred.create<void>();
+ const deferredTimeout = Deferred.create<void>({
+ message: 'Race did not stop timer',
+ timeout: 100,
+ });
+
+ clock.tick(50);
+
+ await Promise.all([
+ Deferred.race([deferred, deferredTimeout]),
+ deferred.resolve(),
+ ]);
+
+ clock.tick(150);
+
+ expect(deferredTimeout.value()).toBeInstanceOf(Error);
+ expect(deferredTimeout.value()?.message).toContain('Timeout cleared');
+ } finally {
+ clock.restore();
+ }
+ });
+});