@thinkeloquent/cli-progressor
Version:
Advanced CLI Progress Bar System with Strategy Pattern Architecture
66 lines (53 loc) • 1.73 kB
JavaScript
import {
ProgressBar,
SilentProgressRenderer,
CLIProgressHelper,
} from "./main.mjs";
import assert from "assert";
class ProgressBarTest {
static testBasicSilentProgress() {
const progressBar = ProgressBar.createSilent(100, "Test Progress");
// Test incremental updates
for (let i = 1; i <= 100; i++) {
const progress = progressBar.update(1);
assert.equal(progress.current, i);
assert.equal(progress.percentage, i);
}
// Test completion
const finalProgress = progressBar.getProgress();
assert.equal(finalProgress.isComplete, true);
console.log("✓ Basic progress test passed");
}
static testSilentProgressRendererHistory() {
const silentRenderer = new SilentProgressRenderer();
const progressBar = new ProgressBar(10, "History Test", silentRenderer);
// Generate progress updates
for (let i = 0; i < 10; i++) {
progressBar.update(1);
}
const history = silentRenderer.getHistory();
assert.equal(history.length, 10);
assert.equal(history[9].percentage, 100);
console.log("✓ Progress history test passed");
}
static async testAsyncProgress() {
let progressCount = 0;
await CLIProgressHelper.withProgress(
5,
"Async Test",
async (updateProgress) => {
for (let i = 0; i < 5; i++) {
await new Promise((resolve) => setTimeout(resolve, 2000));
updateProgress(1);
progressCount++;
}
}
);
assert.equal(progressCount, 5);
console.log("✓ Async progress test passed");
}
}
// Run tests
ProgressBarTest.testBasicSilentProgress();
ProgressBarTest.testSilentProgressRendererHistory();
await ProgressBarTest.testAsyncProgress();