@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
JavaScript
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);
});
});
});