UNPKG

abort-utils

Version:

Utility functions to use and combine `AbortSignal` and `AbortController` with Promises

36 lines (35 loc) 1.52 kB
// @vitest-environment happy-dom import { it, expect } from 'vitest'; import { signalFromEvent } from './signal-from-event.js'; it('aborts when the event is dispatched', async () => { const target = new EventTarget(); const signal = signalFromEvent(target, 'event'); expect(signal.aborted).toBe(false); target.dispatchEvent(new Event('event')); expect(signal.aborted).toBe(true); }); it('aborts when the event is dispatched with filter', async () => { const target = new EventTarget(); const signal = signalFromEvent(target, 'click', { filter: event => event.button === 3, }); expect(signal.aborted).toBe(false); target.dispatchEvent(new MouseEvent('click', { button: 2 })); expect(signal.aborted).toBe(false); target.dispatchEvent(new MouseEvent('click', { button: 3 })); expect(signal.aborted).toBe(true); }); it('aborts when the event is dispatched with async filter', async () => { const target = new EventTarget(); const signal = signalFromEvent(target, 'click', { filter: async (event) => event.button === 3, }); expect(signal.aborted).toBe(false); target.dispatchEvent(new MouseEvent('click', { button: 2 })); await Promise.resolve(); // Let the async filter resolve expect(signal.aborted).toBe(false); target.dispatchEvent(new MouseEvent('click', { button: 3 })); expect(signal.aborted).toBe(false); await Promise.resolve(); // Let the async filter resolve expect(signal.aborted).toBe(true); });