fix(tests): Update tests & CI config, bump deps, add docs and project configs
This commit is contained in:
104
test/test.silent.ts
Normal file
104
test/test.silent.ts
Normal file
@@ -0,0 +1,104 @@
|
||||
import { expect, tap } from '@git.zone/tstest/tapbundle';
|
||||
import * as smartshell from '../ts/index.js';
|
||||
|
||||
let testSmartshell: smartshell.Smartshell;
|
||||
|
||||
tap.test('setup for silent execution tests', async () => {
|
||||
testSmartshell = new smartshell.Smartshell({
|
||||
executor: 'bash',
|
||||
sourceFilePaths: [],
|
||||
});
|
||||
expect(testSmartshell).toBeInstanceOf(smartshell.Smartshell);
|
||||
});
|
||||
|
||||
tap.test('execSilent should capture output without printing to console', async () => {
|
||||
const result = await testSmartshell.execSilent('echo "Hidden from console"');
|
||||
expect(result.stdout).toContain('Hidden from console');
|
||||
expect(result.exitCode).toEqual(0);
|
||||
});
|
||||
|
||||
tap.test('execSilent should capture multi-line output', async () => {
|
||||
const result = await testSmartshell.execSilent('echo "Line 1" && echo "Line 2" && echo "Line 3"');
|
||||
const lines = result.stdout.trim().split('\n');
|
||||
expect(lines).toHaveLength(3);
|
||||
expect(lines[0]).toEqual('Line 1');
|
||||
expect(lines[1]).toEqual('Line 2');
|
||||
expect(lines[2]).toEqual('Line 3');
|
||||
});
|
||||
|
||||
tap.test('execSilent should capture error output', async () => {
|
||||
const result = await testSmartshell.execSilent('echo "This works" && exit 1');
|
||||
expect(result.stdout).toContain('This works');
|
||||
expect(result.exitCode).toEqual(1);
|
||||
});
|
||||
|
||||
tap.test('execSilent should parse command output programmatically', async () => {
|
||||
// Test that we can programmatically process the captured output
|
||||
const result = await testSmartshell.execSilent('echo "apple,banana,cherry"');
|
||||
const items = result.stdout.trim().split(',');
|
||||
expect(items).toHaveLength(3);
|
||||
expect(items[0]).toEqual('apple');
|
||||
expect(items[1]).toEqual('banana');
|
||||
expect(items[2]).toEqual('cherry');
|
||||
});
|
||||
|
||||
tap.test('execStrictSilent should capture output and throw on error', async () => {
|
||||
// Test successful command
|
||||
const successResult = await testSmartshell.execStrictSilent('echo "Success"');
|
||||
expect(successResult.stdout).toContain('Success');
|
||||
expect(successResult.exitCode).toEqual(0);
|
||||
|
||||
// Test that it throws on error
|
||||
let errorThrown = false;
|
||||
try {
|
||||
await testSmartshell.execStrictSilent('echo "Error output" && exit 1');
|
||||
} catch (error) {
|
||||
errorThrown = true;
|
||||
}
|
||||
expect(errorThrown).toBeTrue();
|
||||
});
|
||||
|
||||
tap.test('execStreamingSilent should capture streaming output without console display', async () => {
|
||||
const streamingResult = await testSmartshell.execStreamingSilent('echo "Line 1" && sleep 0.1 && echo "Line 2"');
|
||||
|
||||
let capturedData = '';
|
||||
streamingResult.childProcess.stdout.on('data', (data) => {
|
||||
capturedData += data.toString();
|
||||
});
|
||||
|
||||
await streamingResult.finalPromise;
|
||||
expect(capturedData).toContain('Line 1');
|
||||
expect(capturedData).toContain('Line 2');
|
||||
});
|
||||
|
||||
tap.test('execAndWaitForLineSilent should wait for pattern without console output', async () => {
|
||||
// This should complete without printing to console
|
||||
await testSmartshell.execAndWaitForLineSilent('echo "Starting..." && echo "Ready to go"', /Ready to go/);
|
||||
});
|
||||
|
||||
tap.test('execSilent should handle commands with quotes', async () => {
|
||||
const result = await testSmartshell.execSilent('echo "Hello World"');
|
||||
expect(result.stdout.trim()).toEqual('Hello World');
|
||||
});
|
||||
|
||||
tap.test('execSilent should capture large output', async () => {
|
||||
// Generate 100 lines of output
|
||||
const result = await testSmartshell.execSilent('for i in {1..100}; do echo "Line $i"; done');
|
||||
const lines = result.stdout.trim().split('\n');
|
||||
expect(lines).toHaveLength(100);
|
||||
expect(lines[0]).toEqual('Line 1');
|
||||
expect(lines[99]).toEqual('Line 100');
|
||||
});
|
||||
|
||||
tap.test('execSilent vs exec output comparison', async () => {
|
||||
// Both should capture the same output, but exec prints to console
|
||||
const silentResult = await testSmartshell.execSilent('echo "Test output"');
|
||||
const normalResult = await testSmartshell.exec('echo "Test output"');
|
||||
|
||||
expect(silentResult.stdout).toEqual(normalResult.stdout);
|
||||
expect(silentResult.exitCode).toEqual(normalResult.exitCode);
|
||||
});
|
||||
|
||||
export default tap.start({
|
||||
throwOnError: true,
|
||||
});
|
@@ -1,4 +1,4 @@
|
||||
import { expect, tap } from '@push.rocks/tapbundle';
|
||||
import { expect, tap } from '@git.zone/tstest/tapbundle';
|
||||
|
||||
import * as smartshell from '../ts/index.js';
|
||||
import * as smartpromise from '@push.rocks/smartpromise';
|
||||
|
Reference in New Issue
Block a user