CI / verify (push) Has been cancelled
Refresh release metadata immediately before downloading an update and keep automatic checks current while the app remains open. Accept desktop file drops from the first renderer frame, preserve early and rapid drops until initialization completes, and show the live remaining upload size in the sidebar. Add regression coverage for update freshness, startup drag-and-drop ordering, localization, and remaining-byte retry behavior. Bump the application to v2.1.25.
54 lines
2.0 KiB
JavaScript
54 lines
2.0 KiB
JavaScript
const { describe, it } = require('node:test');
|
|
const assert = require('node:assert/strict');
|
|
|
|
describe('serialized runner', () => {
|
|
it('flush waits for an already running save and later work stays ordered', async () => {
|
|
const { createSerializedRunner } = require('../lib/serialized-runner');
|
|
let releaseFirst;
|
|
const calls = [];
|
|
const runner = createSerializedRunner(async (value) => {
|
|
calls.push(`start:${value}`);
|
|
if (value === 'first') await new Promise((resolve) => { releaseFirst = resolve; });
|
|
calls.push(`end:${value}`);
|
|
return value;
|
|
});
|
|
|
|
const first = runner.run('first');
|
|
await new Promise((resolve) => setImmediate(resolve));
|
|
const second = runner.run('second');
|
|
let flushed = false;
|
|
const flush = runner.flush().then(() => { flushed = true; });
|
|
await new Promise((resolve) => setImmediate(resolve));
|
|
assert.equal(flushed, false);
|
|
assert.deepEqual(calls, ['start:first']);
|
|
|
|
releaseFirst();
|
|
assert.equal(await first, 'first');
|
|
assert.equal(await second, 'second');
|
|
await flush;
|
|
assert.equal(flushed, true);
|
|
assert.deepEqual(calls, ['start:first', 'end:first', 'start:second', 'end:second']);
|
|
});
|
|
|
|
it('queues work before readiness and drains every task in arrival order', async () => {
|
|
const { createReadySerializedRunner } = require('../lib/serialized-runner');
|
|
const calls = [];
|
|
const runner = createReadySerializedRunner(async (value) => {
|
|
calls.push(value);
|
|
return value;
|
|
});
|
|
|
|
const first = runner.run('first');
|
|
const second = runner.run('second');
|
|
await new Promise((resolve) => setImmediate(resolve));
|
|
|
|
assert.equal(runner.isReady, false);
|
|
assert.deepEqual(calls, []);
|
|
assert.equal(runner.ready(), true);
|
|
assert.equal(runner.ready(), false);
|
|
assert.deepEqual(await Promise.all([first, second]), ['first', 'second']);
|
|
assert.deepEqual(calls, ['first', 'second']);
|
|
assert.equal(runner.isReady, true);
|
|
});
|
|
});
|