Upload via GUI (85 Dateien)
This commit is contained in:
@@ -0,0 +1,77 @@
|
||||
const test = require('node:test');
|
||||
const assert = require('node:assert');
|
||||
const { createPauseGate } = require('../src/features/pauseGate.js');
|
||||
|
||||
const tick = () => new Promise((r) => setTimeout(r, 20));
|
||||
|
||||
test('Ohne Pause läuft wait() sofort durch', async () => {
|
||||
const gate = createPauseGate();
|
||||
await gate.wait();
|
||||
await gate.wait(new AbortController().signal);
|
||||
assert.strictEqual(gate.isPaused(), false);
|
||||
});
|
||||
|
||||
test('Während der Pause bleibt wait() stehen und läuft nach resume() weiter', async () => {
|
||||
const gate = createPauseGate();
|
||||
gate.pause();
|
||||
let done = false;
|
||||
const p = gate.wait().then(() => { done = true; });
|
||||
await tick();
|
||||
assert.strictEqual(done, false);
|
||||
assert.strictEqual(gate.waitingCount(), 1);
|
||||
gate.resume();
|
||||
await p;
|
||||
assert.strictEqual(done, true);
|
||||
assert.strictEqual(gate.waitingCount(), 0);
|
||||
});
|
||||
|
||||
test('resume() gibt alle Wartenden frei', async () => {
|
||||
const gate = createPauseGate();
|
||||
gate.pause();
|
||||
const all = Promise.all([gate.wait(), gate.wait(), gate.wait()]);
|
||||
await tick();
|
||||
assert.strictEqual(gate.waitingCount(), 3);
|
||||
gate.resume();
|
||||
await all;
|
||||
});
|
||||
|
||||
test('Abbruch während der Pause löst wait() mit dem Abbruchfehler aus', async () => {
|
||||
const gate = createPauseGate();
|
||||
gate.pause();
|
||||
const c = new AbortController();
|
||||
const p = gate.wait(c.signal);
|
||||
await tick();
|
||||
c.abort();
|
||||
await assert.rejects(p, (e) => e.code === 'UPLOAD_CANCELLED');
|
||||
assert.strictEqual(gate.waitingCount(), 0);
|
||||
});
|
||||
|
||||
test('Bereits abgebrochenes Signal wirft sofort, auch ohne Pause', async () => {
|
||||
const gate = createPauseGate();
|
||||
const c = new AbortController();
|
||||
c.abort();
|
||||
await assert.rejects(gate.wait(c.signal), (e) => e.code === 'UPLOAD_CANCELLED');
|
||||
});
|
||||
|
||||
test('onChange meldet nur echte Wechsel', () => {
|
||||
const states = [];
|
||||
const gate = createPauseGate({ onChange: (p) => states.push(p) });
|
||||
assert.strictEqual(gate.pause(), true);
|
||||
assert.strictEqual(gate.pause(), false);
|
||||
assert.strictEqual(gate.resume(), true);
|
||||
assert.strictEqual(gate.resume(), false);
|
||||
assert.deepStrictEqual(states, [true, false]);
|
||||
});
|
||||
|
||||
test('Ein abgebrochener Wartender blockiert die übrigen nicht', async () => {
|
||||
const gate = createPauseGate();
|
||||
gate.pause();
|
||||
const c = new AbortController();
|
||||
const a = gate.wait(c.signal).catch((e) => e.code);
|
||||
const b = gate.wait();
|
||||
await tick();
|
||||
c.abort();
|
||||
assert.strictEqual(await a, 'UPLOAD_CANCELLED');
|
||||
gate.resume();
|
||||
await b;
|
||||
});
|
||||
Reference in New Issue
Block a user