feat(implement testing): update
This commit is contained in:
		
							
								
								
									
										11
									
								
								package-lock.json
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										11
									
								
								package-lock.json
									
									
									
										generated
									
									
									
								
							| @@ -24,6 +24,14 @@ | ||||
|         "typescript": "^2.9.1" | ||||
|       } | ||||
|     }, | ||||
|     "@pushrocks/consolecolor": { | ||||
|       "version": "2.0.1", | ||||
|       "resolved": "https://registry.npmjs.org/@pushrocks/consolecolor/-/consolecolor-2.0.1.tgz", | ||||
|       "integrity": "sha512-iOFCHVeFZ2OywbdwSxVI4/wokkcLrXVdHLgvMmkNhJ220eeLgjNZWx3EJo3vNW3zq5ybCSCUIq0878djBxrWpw==", | ||||
|       "requires": { | ||||
|         "ansi-256-colors": "^1.1.0" | ||||
|       } | ||||
|     }, | ||||
|     "@pushrocks/smartdelay": { | ||||
|       "version": "2.0.1", | ||||
|       "resolved": "https://registry.npmjs.org/@pushrocks/smartdelay/-/smartdelay-2.0.1.tgz", | ||||
| @@ -161,8 +169,7 @@ | ||||
|     "ansi-256-colors": { | ||||
|       "version": "1.1.0", | ||||
|       "resolved": "https://registry.npmjs.org/ansi-256-colors/-/ansi-256-colors-1.1.0.tgz", | ||||
|       "integrity": "sha1-kQ3lDvzHwJ49gvL4er1rcAwYgYo=", | ||||
|       "dev": true | ||||
|       "integrity": "sha1-kQ3lDvzHwJ49gvL4er1rcAwYgYo=" | ||||
|     }, | ||||
|     "argparse": { | ||||
|       "version": "1.0.10", | ||||
|   | ||||
| @@ -20,9 +20,10 @@ | ||||
|   }, | ||||
|   "dependencies": { | ||||
|     "@gitzone/tsrun": "^1.1.9", | ||||
|     "@pushrocks/consolecolor": "^2.0.1", | ||||
|     "@pushrocks/smartfile": "^6.0.3", | ||||
|     "@pushrocks/smartlog": "^2.0.1", | ||||
|     "@pushrocks/smartpromise": "^2.0.5", | ||||
|     "@pushrocks/smartshell": "^2.0.4" | ||||
|   } | ||||
| } | ||||
| } | ||||
|   | ||||
							
								
								
									
										1
									
								
								test/sandbox-npmts
									
									
									
									
									
										Submodule
									
								
							
							
								
								
								
								
								
							
						
						
									
										1
									
								
								test/sandbox-npmts
									
									
									
									
									
										Submodule
									
								
							 Submodule test/sandbox-npmts added at 0d623adeab
									
								
							| @@ -1,7 +1,9 @@ | ||||
| import * as plugins from './tstest.plugins'; | ||||
| import { TestDirectory } from './tstest.classes.testdirectory'; | ||||
| import { TapCombinator } from './tstest.tap.combinator'; | ||||
| import { TapParser } from './tstest.tap.parser'; | ||||
| import * as plugins from "./tstest.plugins"; | ||||
| import { coloredString as cs } from '@pushrocks/consolecolor'; | ||||
|  | ||||
| import { TestDirectory } from "./tstest.classes.testdirectory"; | ||||
| import { TapCombinator } from "./tstest.tap.combinator"; | ||||
| import { TapParser } from "./tstest.tap.parser"; | ||||
|  | ||||
| export class TsTest { | ||||
|   testDir: TestDirectory; | ||||
| @@ -12,19 +14,26 @@ export class TsTest { | ||||
|  | ||||
|   async run() { | ||||
|     const fileNamesToRun: string[] = await this.testDir.getTestFilePathArray(); | ||||
|     console.log(`Found ${fileNamesToRun.length} test(s):`); | ||||
|     console.log(`Found ${fileNamesToRun.length} Testfile(s):`); | ||||
|     for (const fileName of fileNamesToRun) { | ||||
|       console.log(fileName); | ||||
|       console.log(cs(fileName, "orange")); | ||||
|     } | ||||
|     console.log("-".repeat(16)); | ||||
|     const smartshellInstance = new plugins.smartshell.Smartshell({ | ||||
|       executor: 'bash', | ||||
|       executor: "bash", | ||||
|       sourceFilePaths: [] | ||||
|     }); | ||||
|     const tapCombinator = new TapCombinator(); // lets create the TapCombinator | ||||
|     for (const fileName of fileNamesToRun) { | ||||
|       console.log(`${cs("=> ", "blue")} Running ${cs(fileName, "orange")}`); | ||||
|       console.log(`=`.repeat(16)); | ||||
|       const tapParser = new TapParser(); | ||||
|       const execResultStreaming = await smartshellInstance.execStreamingSilent(`tsrun ${fileName}`); | ||||
|       const execResultStreaming = await smartshellInstance.execStreamingSilent( | ||||
|         `tsrun ${fileName}` | ||||
|       ); | ||||
|       await tapParser.handleTapProcess(execResultStreaming.childProcess); | ||||
|       tapCombinator.addTapParser(tapParser); | ||||
|     } | ||||
|     tapCombinator.evaluate(); | ||||
|   } | ||||
| } | ||||
|   | ||||
							
								
								
									
										7
									
								
								ts/tstest.logprefixes.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								ts/tstest.logprefixes.ts
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,7 @@ | ||||
| import * as plugins from './tstest.plugins'; | ||||
|  | ||||
| export const TapPrefix = plugins.consolecolor.coloredString( | ||||
|   `:::TAP:::`, | ||||
|   'green', | ||||
|   'black' | ||||
| ) | ||||
| @@ -1,7 +1,11 @@ | ||||
| // node native | ||||
| import * as path from 'path'; | ||||
|  | ||||
| // @pushrocks scope | ||||
| import * as consolecolor from '@pushrocks/consolecolor'; | ||||
| import * as smartfile from '@pushrocks/smartfile'; | ||||
| import * as smartlog from '@pushrocks/smartlog'; | ||||
| import * as smartpromise from '@pushrocks/smartpromise'; | ||||
| import * as smartshell from '@pushrocks/smartshell'; | ||||
|  | ||||
| export { path, smartfile, smartlog, smartpromise, smartshell }; | ||||
| export { consolecolor, path, smartfile, smartlog, smartpromise, smartshell }; | ||||
|   | ||||
| @@ -2,10 +2,20 @@ | ||||
| // combines different tap test files to an overall result | ||||
| // ============ | ||||
| import * as plugins from './tstest.plugins'; | ||||
| import { coloredString as cs } from '@pushrocks/consolecolor'; | ||||
|  | ||||
| import { TapParser } from './tstest.tap.parser'; | ||||
|  | ||||
| export class TapCombinator { | ||||
|   tapParserStore: TapParser[] = []; | ||||
|   addTapParser(tapParserArg: TapParser) { | ||||
|      | ||||
|     this.tapParserStore.push(tapParserArg); | ||||
|   } | ||||
|  | ||||
|   evaluate() { | ||||
|     console.log(`Ran ${this.tapParserStore.length} Testfiles!`); | ||||
|     for (const tapParser of this.tapParserStore) { | ||||
|  | ||||
|     } | ||||
|   } | ||||
| } | ||||
|   | ||||
| @@ -1,26 +1,107 @@ | ||||
| import { ChildProcess } from 'child_process'; | ||||
| import { ChildProcess } from "child_process"; | ||||
| import { coloredString as cs } from '@pushrocks/consolecolor'; | ||||
|  | ||||
| // ============ | ||||
| // combines different tap test files to an overall result | ||||
| // ============ | ||||
| import * as plugins from './tstest.plugins'; | ||||
| import { TapTestResult } from './tstest.tap.testresult'; | ||||
| import * as plugins from "./tstest.plugins"; | ||||
| import { TapTestResult } from "./tstest.tap.testresult"; | ||||
|  | ||||
| export class TapParser { | ||||
|   resultStore: TapTestResult[] = []; | ||||
|  | ||||
|   expectedTestsRegex = /([0-9]*)\.\.([0-9]*)/; | ||||
|   expectedTests: number; | ||||
|  | ||||
|   processLog(logChunk: Buffer | string) { | ||||
|     if(Buffer.isBuffer(logChunk)) { | ||||
|   testStatusRegex = /(ok|not\sok)\s([0-9]+)\s-\s/; | ||||
|   activeTapTestResult: TapTestResult; | ||||
|  | ||||
|   private _getNewTapTestResult () { | ||||
|     this.activeTapTestResult = new TapTestResult( | ||||
|       this.resultStore.length + 1 | ||||
|     ); | ||||
|   } | ||||
|  | ||||
|   private _processLog(logChunk: Buffer | string) { | ||||
|     if (Buffer.isBuffer(logChunk)) { | ||||
|       logChunk = logChunk.toString(); | ||||
|     } | ||||
|     const logLineArray = logChunk.split('\n'); | ||||
|     console.log(logLineArray); | ||||
|     const logLineArray = logChunk.split("\n"); | ||||
|     if (logLineArray[logLineArray.length - 1] === "") { | ||||
|       logLineArray.pop(); | ||||
|     } | ||||
|  | ||||
|     // lets parse the log information | ||||
|     for (const logLine of logLineArray) { | ||||
|       let logLineIsTapProtocol = false; | ||||
|       if (!this.expectedTests && this.expectedTestsRegex.test(logLine)) { | ||||
|         logLineIsTapProtocol = true; | ||||
|         const regexResult = this.expectedTestsRegex.exec(logLine); | ||||
|         this.expectedTests = parseInt(regexResult[2]); | ||||
|         console.log(`:::TAP::: Expecting ${this.expectedTests} tests!`); | ||||
|  | ||||
|         // initiating first TapResult | ||||
|         this._getNewTapTestResult(); | ||||
|          | ||||
|       } else if (this.testStatusRegex.test(logLine)) { | ||||
|         logLineIsTapProtocol = true; | ||||
|         const regexResult = this.testStatusRegex.exec(logLine); | ||||
|         const testId = parseInt(regexResult[2]); | ||||
|         const testOk = (() => { | ||||
|           if (regexResult[1] === "ok") { | ||||
|             return true; | ||||
|           } | ||||
|           return false; | ||||
|         })(); | ||||
|  | ||||
|         // test for protocol error | ||||
|         if(testId !== this.activeTapTestResult.id) { | ||||
|           console.log(`:::TAP PROTOCOL ERROR::: Something is strange! Test Ids are not equal!`) | ||||
|         } | ||||
|         this.activeTapTestResult.setTestResult(testOk); | ||||
|  | ||||
|         if(testOk) { | ||||
|           console.log( | ||||
|             cs( | ||||
|               `:::TAP::: Success: Test ${testId} is ok!`, | ||||
|               'green', | ||||
|               'black' | ||||
|           )); | ||||
|         } else { | ||||
|           console.log( | ||||
|             cs( | ||||
|               `:::TAP::: Error: Test ${testId} is NOT ok!`, | ||||
|               'green', | ||||
|               'black' | ||||
|           )); | ||||
|         } | ||||
|       } | ||||
|  | ||||
|       if (!logLineIsTapProtocol) { | ||||
|         if (this.activeTapTestResult) { | ||||
|           this.activeTapTestResult.addLogLine(logLine); | ||||
|         } | ||||
|         console.log(logLine); | ||||
|       } | ||||
|  | ||||
|       if(this.activeTapTestResult && this.activeTapTestResult.testSettled) { | ||||
|         this.resultStore.push(this.activeTapTestResult); | ||||
|         this._getNewTapTestResult(); | ||||
|       } | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   async handleTapProcess(childProcessArg: ChildProcess) { | ||||
|     const done = plugins.smartpromise.defer(); | ||||
|      | ||||
|     childProcessArg.stdout.on("data", data => { | ||||
|       this._processLog(data); | ||||
|     }); | ||||
|     childProcessArg.stderr.on("data", data => { | ||||
|       this._processLog(data); | ||||
|     }); | ||||
|     childProcessArg.on("exit", () => { | ||||
|       done.resolve(); | ||||
|     }); | ||||
|     await done.promise; | ||||
|   } | ||||
| } | ||||
|   | ||||
| @@ -3,4 +3,26 @@ | ||||
| // ============ | ||||
| import * as plugins from './tstest.plugins'; | ||||
|  | ||||
| export class TapTestResult {} | ||||
| export class TapTestResult { | ||||
|   testLogBuffer = Buffer.from(''); | ||||
|   testOk: boolean = false; | ||||
|   testSettled: boolean = false; | ||||
|   constructor(public id: number) { | ||||
|      | ||||
|   } | ||||
|  | ||||
|   /** | ||||
|    * adds a logLine to the log buffer of the test | ||||
|    * @param logLine | ||||
|    */ | ||||
|   addLogLine(logLine: string) { | ||||
|     logLine = logLine + '\n'; | ||||
|     const logLineBuffer = Buffer.from(logLine); | ||||
|     this.testLogBuffer = Buffer.concat([this.testLogBuffer, logLineBuffer]); | ||||
|   } | ||||
|  | ||||
|   setTestResult(testOkArg: boolean) { | ||||
|     this.testOk = testOkArg; | ||||
|     this.testSettled = true; | ||||
|   } | ||||
| } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user