UNPKG

@exadel/esl

Version:

Exadel Smart Library (ESL) is the lightweight custom elements library that provide a set of super-flexible components

116 lines (115 loc) 6.31 kB
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; import { promisifyEvent, promisifyMarker } from '../../promise/event'; describe('async/promise/event', () => { beforeAll(() => jest.useFakeTimers()); afterAll(() => jest.useRealTimers()); describe('promisifyEvent', () => { test('Resolves when event occurs', () => { const el = document.createElement('div'); const promise$ = promisifyEvent(el, 'test'); el.dispatchEvent(new CustomEvent('test')); return expect(promise$.then((e) => e.type)).resolves.toBe('test'); }); test('Resolved converter unsubscribes from target', () => __awaiter(void 0, void 0, void 0, function* () { const el = document.createElement('div'); const spy = jest.spyOn(el, 'removeEventListener'); const promise$ = promisifyEvent(el, 'test'); el.dispatchEvent(new CustomEvent('test')); yield promise$; return expect(spy).toBeCalledWith('test', expect.any(Function), undefined); })); test('Rejected by timeout if it is exceeded', () => __awaiter(void 0, void 0, void 0, function* () { const el = document.createElement('div'); const promise$ = promisifyEvent(el, 'test', 10); jest.advanceTimersByTime(100); yield expect(promise$).rejects.toThrow(new Error('Rejected by timeout')); })); test('Listener unsubscribed if promise was rejected by timeout', () => __awaiter(void 0, void 0, void 0, function* () { const el = document.createElement('div'); const spy = jest.spyOn(el, 'removeEventListener'); const promise$ = promisifyEvent(el, 'test', 10); jest.advanceTimersByTime(100); try { yield promise$; } catch (_a) { expect(spy).toBeCalledWith('test', expect.any(Function), undefined); } })); describe('AbortSignal handling', () => { test('Rejected when was passed options with signal and invoked abort', () => __awaiter(void 0, void 0, void 0, function* () { const el = document.createElement('div'); const controller = new AbortController(); const promise$ = promisifyEvent(el, 'test', null, { signal: controller.signal }); controller.abort(); yield expect(promise$).rejects.toThrow(new Error('Rejected by abort signal')); })); test('Rejected when was passed options with signal in aborted state', () => __awaiter(void 0, void 0, void 0, function* () { const el = document.createElement('div'); const promise$ = promisifyEvent(el, 'test', null, { signal: AbortSignal.abort() }); yield expect(promise$).rejects.toThrow(new Error('Rejected by abort signal')); })); test('AbortSignal listener unsubscribed if the promise was resolved by event', () => __awaiter(void 0, void 0, void 0, function* () { const el = document.createElement('div'); const controller = new AbortController(); const signal = controller.signal; const spy = jest.spyOn(signal, 'removeEventListener'); const promise$ = promisifyEvent(el, 'test', null, { signal }); el.dispatchEvent(new CustomEvent('test')); yield promise$; return expect(spy).toBeCalledWith('abort', expect.any(Function)); })); test('AbortSignal listener unsubscribed if the promise was rejected by timeout', () => __awaiter(void 0, void 0, void 0, function* () { const el = document.createElement('div'); const controller = new AbortController(); const signal = controller.signal; const spy = jest.spyOn(signal, 'removeEventListener'); const promise$ = promisifyEvent(el, 'test', 10, { signal }); jest.advanceTimersByTime(100); try { yield promise$; } catch (_a) { expect(spy).toBeCalledWith('abort', expect.any(Function)); } })); test('AbortSignal listener unsubscribed if the promise was rejected by signal', () => __awaiter(void 0, void 0, void 0, function* () { const el = document.createElement('div'); const controller = new AbortController(); const signal = controller.signal; const spy = jest.spyOn(signal, 'removeEventListener'); const promise$ = promisifyEvent(el, 'test', null, { signal }); controller.abort(); try { yield promise$; } catch (_a) { expect(spy).toBeCalledWith('abort', expect.any(Function)); } })); }); }); describe('promisifyMarker', () => { test('Resolves by attribute', () => { const el = document.createElement('div'); el.test = true; const promise$ = promisifyMarker(el, 'test'); return expect(promise$).resolves.toBe(el); }); test('Resolves by event', () => { const el = document.createElement('div'); const promise$ = promisifyMarker(el, 'test'); jest.advanceTimersByTime(50); el.dispatchEvent(new CustomEvent('test')); return expect(promise$).resolves.toBe(el); }); }); });