Compare commits
8 Commits
Author | SHA1 | Date | |
---|---|---|---|
180bfcb353 | |||
3161e6b4eb | |||
6129388a20 | |||
8f0cfe1a06 | |||
39926fb08b | |||
36594b64f2 | |||
9f898b6579 | |||
b1725b636b |
3
contribute.md
Normal file
3
contribute.md
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
# How to contribute
|
||||||
|
|
||||||
|
Start with `tstest.classes.tstest.ts` to understand whats happening
|
749
package-lock.json
generated
749
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
14
package.json
14
package.json
@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@gitzone/tstest",
|
"name": "@gitzone/tstest",
|
||||||
"version": "1.0.13",
|
"version": "1.0.17",
|
||||||
"private": false,
|
"private": false,
|
||||||
"description": "a test utility to run tests that match test/**/*.ts",
|
"description": "a test utility to run tests that match test/**/*.ts",
|
||||||
"main": "dist/index.js",
|
"main": "dist/index.js",
|
||||||
@ -19,16 +19,16 @@
|
|||||||
"build": "(tsbuild)"
|
"build": "(tsbuild)"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@gitzone/tsbuild": "^2.0.21",
|
"@gitzone/tsbuild": "^2.1.3",
|
||||||
"@pushrocks/tapbundle": "^3.0.1"
|
"@pushrocks/tapbundle": "^3.0.7"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@gitzone/tsrun": "^1.1.11",
|
"@gitzone/tsrun": "^1.1.17",
|
||||||
"@pushrocks/consolecolor": "^2.0.1",
|
"@pushrocks/consolecolor": "^2.0.1",
|
||||||
"@pushrocks/smartfile": "^6.0.6",
|
"@pushrocks/smartfile": "^6.0.11",
|
||||||
"@pushrocks/smartlog": "^2.0.1",
|
"@pushrocks/smartlog": "^2.0.9",
|
||||||
"@pushrocks/smartpromise": "^2.0.5",
|
"@pushrocks/smartpromise": "^2.0.5",
|
||||||
"@pushrocks/smartshell": "^2.0.6",
|
"@pushrocks/smartshell": "^2.0.11",
|
||||||
"@types/figures": "^2.0.0",
|
"@types/figures": "^2.0.0",
|
||||||
"figures": "^2.0.0"
|
"figures": "^2.0.0"
|
||||||
}
|
}
|
||||||
|
@ -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'));
|
if (!failGlobal) {
|
||||||
console.log(cs('-'.repeat(16), 'cyan'));
|
console.log(cs('FINAL RESULT: SUCCESS!', 'green'));
|
||||||
if(!failGlobal) {
|
|
||||||
console.log(cs('Ending with code 0: TESTS ARE PASSING!', 'green'));
|
|
||||||
} else {
|
} else {
|
||||||
console.log(cs('Ending with code 1: TESTS ARE FAILING!', 'red'));
|
console.log(cs('FINAL RESULT: FAIL!', 'red'));
|
||||||
|
process.exit(1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -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 => {
|
@ -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 {
|
||||||
/**
|
/**
|
||||||
|
@ -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',
|
||||||
@ -33,7 +35,14 @@ export class TsTest {
|
|||||||
console.log(`${cs('=> ', 'blue')} Running ${cs(fileName, 'orange')}`);
|
console.log(`${cs('=> ', 'blue')} Running ${cs(fileName, 'orange')}`);
|
||||||
console.log(cs(`=`.repeat(16), 'cyan'));
|
console.log(cs(`=`.repeat(16), 'cyan'));
|
||||||
const tapParser = new TapParser(fileName);
|
const tapParser = new TapParser(fileName);
|
||||||
const execResultStreaming = await smartshellInstance.execStreamingSilent(`tsrun ${fileName}`);
|
|
||||||
|
// tsrun options
|
||||||
|
let tsrunOptions = ''
|
||||||
|
if(process.argv.includes('--web')) {
|
||||||
|
tsrunOptions += ' --web'
|
||||||
|
}
|
||||||
|
|
||||||
|
const execResultStreaming = await smartshellInstance.execStreamingSilent(`tsrun ${fileName}${tsrunOptions}`);
|
||||||
await tapParser.handleTapProcess(execResultStreaming.childProcess);
|
await tapParser.handleTapProcess(execResultStreaming.childProcess);
|
||||||
console.log(cs(`^`.repeat(16), 'cyan'));
|
console.log(cs(`^`.repeat(16), 'cyan'));
|
||||||
console.log(''); // force new line
|
console.log(''); // force new line
|
||||||
|
Reference in New Issue
Block a user