Files

63 lines
1.7 KiB
TypeScript

import { test } from "node:test";
import assert from "node:assert/strict";
import { ProgressBar } from "../src/utils/progress.js";
test("format reflects ticks", () => {
const bar = new ProgressBar({ total: 4, width: 10, enabled: false });
bar.tick("ok");
bar.tick("skipped");
const line = bar.format();
assert.match(line, /50%/);
assert.match(line, /2\/4/);
assert.match(line, /ok:1/);
assert.match(line, /skip:1/);
assert.match(line, /fail:0/);
});
test("snapshot returns running totals", () => {
const bar = new ProgressBar({ total: 3, enabled: false });
bar.tick("ok");
bar.tick("failed");
assert.deepEqual(bar.snapshot(), { ok: 1, skipped: 0, failed: 1, done: 2 });
});
test("format reaches 100% on completion", () => {
const bar = new ProgressBar({ total: 2, width: 4, enabled: false });
bar.tick("ok");
bar.tick("ok");
assert.match(bar.format(), /100%/);
});
test("disabled bar does not write to stream", () => {
let written = "";
const fakeStream = {
isTTY: false,
write: (s: string) => {
written += s;
return true;
},
} as unknown as NodeJS.WriteStream;
const bar = new ProgressBar({ total: 1, stream: fakeStream });
bar.tick("ok");
bar.finish();
assert.equal(written, "");
});
test("enabled bar writes carriage-return updates", () => {
let written = "";
const fakeStream = {
isTTY: true,
write: (s: string) => {
written += s;
return true;
},
} as unknown as NodeJS.WriteStream;
const bar = new ProgressBar({ total: 2, width: 4, stream: fakeStream });
bar.tick("ok");
bar.tick("ok");
bar.finish();
assert.ok(written.startsWith("\r"));
assert.ok(written.endsWith("\n"));
assert.match(written, /100%/);
});