Includes scratch-gui, scratch-vm, scratch-blocks, scratch-render, scratch-l10n, and deployment config. Co-authored-by: Cursor <cursoragent@cursor.com>
65 lines
1.4 KiB
JavaScript
65 lines
1.4 KiB
JavaScript
const AsyncLimiter = require('../../src/util/async-limiter');
|
|
const {test} = require('tap');
|
|
|
|
test('Runs callback', async t => {
|
|
/* eslint-disable-next-line require-await */
|
|
const callback = async (a, b) => a + b;
|
|
|
|
const limiter = new AsyncLimiter(callback, 2);
|
|
|
|
t.same(await Promise.all([
|
|
limiter.do(1, 2),
|
|
limiter.do(3, 4),
|
|
limiter.do(5, 6),
|
|
limiter.do(7, 8),
|
|
limiter.do(9, 10)
|
|
]), [
|
|
3,
|
|
7,
|
|
11,
|
|
15,
|
|
19
|
|
]);
|
|
t.end();
|
|
});
|
|
|
|
test('Errors', async t => {
|
|
t.plan(1);
|
|
const errorObject = new Error('Testing testing 123'); // want to get the same *exact* object back
|
|
const callback = () => Promise.reject(errorObject);
|
|
const limiter = new AsyncLimiter(callback, 10);
|
|
try {
|
|
await limiter.do();
|
|
} catch (e) {
|
|
t.equal(e, errorObject);
|
|
}
|
|
t.end();
|
|
});
|
|
|
|
test('Limit and queue', async t => {
|
|
const calls = [];
|
|
const callback = () => new Promise(resolve => {
|
|
calls.push({
|
|
resolve
|
|
});
|
|
});
|
|
|
|
const limiter = new AsyncLimiter(callback, 5);
|
|
|
|
for (let i = 0; i < 12; i++) {
|
|
limiter.do();
|
|
}
|
|
|
|
t.equal(calls.length, 5);
|
|
|
|
calls.forEach(i => i.resolve());
|
|
await Promise.resolve();
|
|
t.equal(calls.length, 10);
|
|
|
|
calls.forEach(i => i.resolve());
|
|
await Promise.resolve();
|
|
t.equal(calls.length, 12);
|
|
|
|
t.end();
|
|
});
|