smartlog/test/test.noninteractive.node.ts

64 lines
1.8 KiB
TypeScript

import { expect, tap } from '@push.rocks/tapbundle';
import { SmartlogSourceInteractive, SmartlogProgressBar } from '../ts_source_interactive/index.js';
// Test instances
let testSpinner: SmartlogSourceInteractive;
let testProgressBar: SmartlogProgressBar;
// Original state for restoration
const originalState = {
stdoutTTY: process.stdout.isTTY,
consoleLog: console.log
};
// Log tracking
const logs: string[] = [];
tap.test('should handle non-interactive mode correctly', async (toolsArg) => {
// Setup non-interactive mode
process.stdout.isTTY = false;
console.log = (...args: any[]) => {
logs.push(args.join(' '));
};
// Test spinner creation
testSpinner = new SmartlogSourceInteractive();
expect(testSpinner).toBeTruthy();
// Test spinner text
logs.length = 0;
testSpinner.text('Loading data');
expect(logs.length).toBeGreaterThan(0);
expect(logs[0]).toContain('[Loading]');
expect(logs[0]).toContain('Loading data');
// Test spinner success
logs.length = 0;
testSpinner.finishSuccess('Task completed');
expect(logs.length).toBeGreaterThan(0);
expect(logs[0]).toContain('[Success]');
expect(logs[0]).toContain('Task completed');
// Test progress bar
testProgressBar = new SmartlogProgressBar({ total: 100 });
expect(testProgressBar).toBeTruthy();
// Test progress updates
logs.length = 0;
testProgressBar.update(10);
testProgressBar.update(50);
testProgressBar.update(100);
expect(logs.length).toBeGreaterThan(0);
const progressLogs = logs.join(' ');
expect(progressLogs).toContain('10%');
expect(progressLogs).toContain('50%');
expect(progressLogs).toContain('100%');
// Cleanup
testSpinner.stop();
console.log = originalState.consoleLog;
process.stdout.isTTY = originalState.stdoutTTY;
});
export default tap.start();