fix(improve test handling): now failing correctly and with better log output
This commit is contained in:
		
							
								
								
									
										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 | ||||||
| @@ -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', | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user