UNPKG

asclasit

Version:

ASync CLasses + ASync ITerators

124 lines (107 loc) 3.64 kB
const $ = require('./time'); async function testTick(method) { let ticked = false; method().then(() => { ticked = true; }); expect(ticked).toBe(false); await method(); expect(ticked).toBe(true); } test('$.tick: delay execution in 1 eventloop spin', async () => { await testTick($.tick); }); test('$.delayMsec: delay execution in 1 eventloop spin', async () => { await testTick($.delayMsec); }); test('$.delaySec: delay execution in 1 eventloop spin', async () => { await testTick($.delaySec); }); test('$.delayMsec, $.upSec, $.upSec_: delay execution in msec, uptime in sec', async () => { const snap = $.upSec(); const up = $.upSec_(); await $.delayMsec(100); expect($.upSec(snap).toPrecision(1)).toBe('0.1'); expect(up().toPrecision(1)).toBe('0.1'); await $.delayMsec(100); expect(up.last().toPrecision(1)).toBe('0.1'); expect(up().toPrecision(1)).toBe('0.2'); }); test('$.delayMsec, $.upNsec, $.upNsec_: delay execution in msec, uptime in nsec', async () => { const snap = $.upNsec(); const up = $.upNsec_(); await $.delayMsec(100); expect(Number($.upNsec(snap)).toPrecision(1)).toBe('1e+8'); expect(Number(up()).toPrecision(1)).toBe('1e+8'); }); test('$.delaySec: cancel', async () => { let done = false; const delayed = $.delaySec(100); delayed.then(() => done = true); delayed.cancel(); await $.tick(); expect(done).toBe(true); }); test('$.delaySec, $.upMsec, $.upMsec_: delay execution in sec, uptime in msec', async () => { const snap = $.upMsec(); const up = $.upMsec_(); await $.delaySec(0.3); expect($.upMsec(snap).toPrecision(1)).toBe('3e+2'); expect(up().toPrecision(1)).toBe('3e+2'); }); test('$.delaySec_: delay execution of func in tick', async () => { await testTick($.delaySec_()); }); test('$.delaySec_: delay execution of func in sec', async () => { const out = {}; const msec = $.delaySec_(0.1, out); const snap = $.upMsec(); const promises = [1, 2, 3].map(msec); await Promise.all(promises); expect($.upMsec(snap).toPrecision(1)).toBe('1e+2'); expect(typeof out.cancel).toBe('function'); }); test('$.timeoutMsec: timeout execution in msec', async () => { const snap = $.upSec(); try { await $.timeoutMsec(200); } catch (err) { expect(err.constructor).toBe($.TimeoutError); expect(err.message).toBe('timeout'); expect($.upSec(snap).toPrecision(1)).toBe('0.2'); } }); test('$.timeoutSec: timeout execution in sec', async () => { const snap = $.upMsec(); try { await $.timeoutSec(0.3, new Error('custom error')); } catch (err) { expect(err.constructor).toBe(Error); expect(err.message).toBe('custom error'); expect($.upMsec(snap).toPrecision(1)).toBe('3e+2'); } }); test('$.timeoutSec: sync timeout', async () => { let ticked = null; $.timeoutSec().catch((err) => { ticked = err; }); expect(ticked).toBe(null); await $.tick(); expect(ticked instanceof $.TimeoutError).toBe(true); }); test('$.timeoutSec: sync timeout: custom error', async () => { let ticked = null; $.timeoutSec(0, () => new EvalError()).catch((err) => { ticked = err; }); expect(ticked).toBe(null); await $.tick(); expect(ticked instanceof EvalError).toBe(true); }); test('$.msec_: execution time exceeds given maximum msec', async () => { const msec = $.msec_(200); expect(msec()).toBe(false); await $.delayMsec(100); expect(msec()).toBe(false); await $.delayMsec(300); expect(msec()).toBe(true); }); test('$.sec_: execution time exceeds given maximum sec', async () => { const sec = $.sec_(); expect(sec()).toBe(false); await $.delaySec(0.1); expect(sec()).toBe(false); });