avocado/packages/core/test/ticking-promise.js
2021-01-02 22:01:57 -06:00

57 lines
1.4 KiB
JavaScript

import {assert, expect} from 'chai';
import TickingPromise from '../src/ticking-promise';
const createTickingPromise = (duration) => new TickingPromise(
() => {},
(elapsed, resolve, reject) => {
duration -= elapsed;
if (duration <= 0) {
resolve();
}
},
);
describe('@avocado/core', () => {
describe('TickingPromise', () => {
it('can behave as a promise', async () => {
try {
await new TickingPromise((resolve, reject) => {
resolve();
});
}
catch (error) {
assert.fail('TickingPromise threw');
}
try {
await new TickingPromise((resolve, reject) => {
reject(new Error());
});
}
catch (error) {
return;
}
assert.fail("TickingPromise didn't throw");
});
it('accepts a ticker', async () => {
const promise = createTickingPromise(1);
for (let i = 0; i < 4; ++i) {
promise.tick(0.3);
}
await promise;
});
it('implements a compatible .all', async () => {
await TickingPromise.all([
new Promise((resolve, reject) => {
resolve();
}),
]);
const promise = createTickingPromise(1);
const allPromise = TickingPromise.all([promise]);
for (let i = 0; i < 4; ++i) {
allPromise.tick(0.3);
}
await allPromise;
});
});
});