fix(improve test handling): now failing correctly and with better log output

This commit is contained in:
Philipp Kunz 2018-08-13 23:58:50 +02:00
parent df3f1ea9d6
commit b1725b636b
6 changed files with 55 additions and 30 deletions

3
contribute.md Normal file
View File

@ -0,0 +1,3 @@
# How to contribute
Start with `tstest.classes.tstest.ts` to understand whats happening

View File

@ -4,7 +4,7 @@
import * as plugins from './tstest.plugins'; import * as plugins from './tstest.plugins';
import { coloredString as cs } from '@pushrocks/consolecolor'; import { coloredString as cs } from '@pushrocks/consolecolor';
import { TapParser } from './tstest.tap.parser'; import { TapParser } from './tstest.classes.tap.parser';
import * as logPrefixes from './tstest.logprefixes'; import * as logPrefixes from './tstest.logprefixes';
export class TapCombinator { export class TapCombinator {
@ -14,35 +14,33 @@ export class TapCombinator {
} }
evaluate() { evaluate() {
console.log(`${logPrefixes.TsTestPrefix} Ran ${this.tapParserStore.length} Testfiles!`); console.log(`${logPrefixes.TsTestPrefix} RESULTS FOR ${this.tapParserStore.length} TESTFILE(S):`);
console.log(`${logPrefixes.TsTestPrefix} Here are the overall results:`);
let failGlobal = false; // determine wether tstest should fail let failGlobal = false; // determine wether tstest should fail
for (const tapParser of this.tapParserStore) { for (const tapParser of this.tapParserStore) {
if (tapParser.getErrorTests().length === 0) { if (tapParser.getErrorTests().length === 0) {
console.log( let overviewString =
logPrefixes.TsTestPrefix + logPrefixes.TsTestPrefix +
cs(` ${tapParser.fileName} ${plugins.figures.tick}`, 'green') + cs(` ${tapParser.fileName} ${plugins.figures.tick}`, 'green') +
' | ' + ` ${plugins.figures.pointer} ` +
cs(` all tests completed successfully!`, 'blue') tapParser.getTestOverviewAsString();
) console.log(overviewString);
} else { } else {
console.log( let overviewString =
logPrefixes.TsTestPrefix + logPrefixes.TsTestPrefix +
cs(` ${tapParser.fileName} ${plugins.figures.cross}`, 'red') + cs(` ${tapParser.fileName} ${plugins.figures.cross}`, 'red') +
' | ' + ` ${plugins.figures.pointer} ` +
cs(` Errors ocurred, please check for the logs!`, 'blue') tapParser.getTestOverviewAsString();
); console.log(overviewString);
failGlobal = true; failGlobal = true;
} }
} }
console.log(cs('-'.repeat(16), 'cyan')); console.log(cs(plugins.figures.hamburger.repeat(48), 'cyan'));
console.log(cs('*'.repeat(16), 'cyan'));
console.log(cs('-'.repeat(16), 'cyan'));
if (!failGlobal) { if (!failGlobal) {
console.log(cs('Ending with code 0: TESTS ARE PASSING!', 'green')); console.log(cs('FINAL RESULT: SUCCESS!', 'green'));
} else { } else {
console.log(cs('Ending with code 1: TESTS ARE FAILING!', 'red')); console.log(cs('FINAL RESULT: FAIL!', 'red'));
process.exit(1);
} }
} }
} }

View File

@ -5,13 +5,13 @@ import { coloredString as cs } from '@pushrocks/consolecolor';
// combines different tap test files to an overall result // combines different tap test files to an overall result
// ============ // ============
import * as plugins from './tstest.plugins'; import * as plugins from './tstest.plugins';
import { TapTestResult } from './tstest.tap.testresult'; import { TapTestResult } from './tstest.classes.tap.testresult';
import * as logPrefixes from './tstest.logprefixes'; import * as logPrefixes from './tstest.logprefixes';
export class TapParser { export class TapParser {
testStore: TapTestResult[] = []; testStore: TapTestResult[] = [];
expectedTestsRegex = /([0-9]*)\.\.([0-9]*)/; expectedTestsRegex = /([0-9]*)\.\.([0-9]*)$/;
expectedTests: number; expectedTests: number;
receivedTests: number; receivedTests: number;
@ -80,14 +80,14 @@ export class TapParser {
if (testOk) { if (testOk) {
console.log( console.log(
logPrefixes.TapPrefix, logPrefixes.TapPrefix,
`${cs(`T${testId} ${plugins.figures.tick}`, 'green')} | ` + `${cs(`T${testId} ${plugins.figures.tick}`, 'green')} ${plugins.figures.arrowRight} ` +
cs(testSubject, 'blue') + cs(testSubject, 'blue') +
` | ${cs(`${testDuration} ms`, 'orange')}` ` | ${cs(`${testDuration} ms`, 'orange')}`
); );
} else { } else {
console.log( console.log(
logPrefixes.TapPrefix, logPrefixes.TapPrefix,
`${cs(`T${testId} ${plugins.figures.cross}`, 'red')} | ` + `${cs(`T${testId} ${plugins.figures.cross}`, 'red')} ${plugins.figures.arrowRight} ` +
cs(testSubject, 'blue') + cs(testSubject, 'blue') +
` | ${cs(`${testDuration} ms`, 'orange')}` ` | ${cs(`${testDuration} ms`, 'orange')}`
); );
@ -124,6 +124,28 @@ export class TapParser {
}); });
} }
/**
* returns a test overview as string
*/
getTestOverviewAsString() {
let overviewString = ''
for(let test of this.testStore) {
if(overviewString !== '') {
overviewString += ' | ';
}
if (test.testOk) {
overviewString += cs(`T${test.id} ${plugins.figures.tick}`, 'green');
} else {
overviewString += cs(`T${test.id} ${plugins.figures.cross}`, 'red');
}
}
return overviewString;
}
/**
* handles a tap process
* @param childProcessArg
*/
async handleTapProcess(childProcessArg: ChildProcess) { async handleTapProcess(childProcessArg: ChildProcess) {
const done = plugins.smartpromise.defer(); const done = plugins.smartpromise.defer();
childProcessArg.stdout.on('data', data => { childProcessArg.stdout.on('data', data => {

View File

@ -3,9 +3,9 @@ import * as paths from './tstest.paths';
import { Smartfile } from '@pushrocks/smartfile'; import { Smartfile } from '@pushrocks/smartfile';
// tap related stuff // tap related stuff
import { TapCombinator } from './tstest.tap.combinator'; import { TapCombinator } from './tstest.classes.tap.combinator';
import { TapParser } from './tstest.tap.parser'; import { TapParser } from './tstest.classes.tap.parser';
import { TapTestResult } from './tstest.tap.testresult'; import { TapTestResult } from './tstest.classes.tap.testresult';
export class TestDirectory { export class TestDirectory {
/** /**

View File

@ -5,8 +5,8 @@ import * as logPrefixes from './tstest.logprefixes';
import { coloredString as cs } from '@pushrocks/consolecolor'; import { coloredString as cs } from '@pushrocks/consolecolor';
import { TestDirectory } from './tstest.classes.testdirectory'; import { TestDirectory } from './tstest.classes.testdirectory';
import { TapCombinator } from './tstest.tap.combinator'; import { TapCombinator } from './tstest.classes.tap.combinator';
import { TapParser } from './tstest.tap.parser'; import { TapParser } from './tstest.classes.tap.parser';
export class TsTest { export class TsTest {
testDir: TestDirectory; testDir: TestDirectory;
@ -17,11 +17,13 @@ export class TsTest {
async run() { async run() {
const fileNamesToRun: string[] = await this.testDir.getTestFilePathArray(); const fileNamesToRun: string[] = await this.testDir.getTestFilePathArray();
console.log(`${logPrefixes.TsTestPrefix} Found ${fileNamesToRun.length} Testfile(s):`); console.log(cs(plugins.figures.hamburger.repeat(80), 'cyan'));
console.log('');
console.log(`${logPrefixes.TsTestPrefix} FOUND ${fileNamesToRun.length} TESTFILE(S):`);
for (const fileName of fileNamesToRun) { for (const fileName of fileNamesToRun) {
console.log(`${logPrefixes.TsTestPrefix} ${cs(fileName, 'orange')}`); console.log(`${logPrefixes.TsTestPrefix} ${cs(fileName, 'orange')}`);
} }
console.log('-'.repeat(16)); console.log('-'.repeat(48));
console.log(''); // force new line console.log(''); // force new line
const smartshellInstance = new plugins.smartshell.Smartshell({ const smartshellInstance = new plugins.smartshell.Smartshell({
executor: 'bash', executor: 'bash',