From 3c62129e023d67e43ec3dede8758d53760c9bd2a Mon Sep 17 00:00:00 2001 From: Philipp Kunz Date: Thu, 9 Nov 2023 19:00:53 +0100 Subject: [PATCH] fix(core): update --- package.json | 4 +- pnpm-lock.yaml | 25 +++++++++ ts/00_commitinfo_data.ts | 2 +- ts/tstest.classes.tstest.ts | 100 +++++++++++++----------------------- ts/tstest.plugins.ts | 7 +++ 5 files changed, 72 insertions(+), 66 deletions(-) diff --git a/package.json b/package.json index 23c301e..9374d78 100644 --- a/package.json +++ b/package.json @@ -35,7 +35,9 @@ "@push.rocks/smartpromise": "^4.0.3", "@push.rocks/smartshell": "^3.0.3", "@push.rocks/tapbundle": "^5.0.15", - "figures": "^6.0.1" + "@types/ws": "^8.5.9", + "figures": "^6.0.1", + "ws": "^8.14.2" }, "files": [ "ts/**/*", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 88d72c9..3d6ee2d 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -38,9 +38,15 @@ dependencies: '@push.rocks/tapbundle': specifier: ^5.0.15 version: 5.0.15(sinon@17.0.1) + '@types/ws': + specifier: ^8.5.9 + version: 8.5.9 figures: specifier: ^6.0.1 version: 6.0.1 + ws: + specifier: ^8.14.2 + version: 8.14.2 devDependencies: '@git.zone/tsbuild': @@ -1678,6 +1684,12 @@ packages: '@types/node': 20.9.0 dev: false + /@types/ws@8.5.9: + resolution: {integrity: sha512-jbdrY0a8lxfdTp/+r7Z4CkycbOFN8WX+IOchLJr3juT/xzbJ8URyTVSJ/hvNdadTgM1mnedb47n+Y31GsFnQlg==} + dependencies: + '@types/node': 20.9.0 + dev: false + /@types/yauzl@2.10.3: resolution: {integrity: sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==} requiresBuild: true @@ -5445,6 +5457,19 @@ packages: optional: true dev: false + /ws@8.14.2: + resolution: {integrity: sha512-wEBG1ftX4jcglPxgFCMJmZ2PLtSbJ2Peg6TmpJFTbe9GZYOQCDPdMYu/Tm0/bGZkw8paZnJY45J4K2PZrLYq8g==} + engines: {node: '>=10.0.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: '>=5.0.2' + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + dev: false + /ws@8.8.0: resolution: {integrity: sha512-JDAgSYQ1ksuwqfChJusw1LSJ8BizJ2e/vVu5Lxjq3YvNJNlROv1ui4i+c/kUUrPheBvQl4c5UbERhTwKa6QBJQ==} engines: {node: '>=10.0.0'} diff --git a/ts/00_commitinfo_data.ts b/ts/00_commitinfo_data.ts index 47b2d62..b19953e 100644 --- a/ts/00_commitinfo_data.ts +++ b/ts/00_commitinfo_data.ts @@ -3,6 +3,6 @@ */ export const commitinfo = { name: '@git.zone/tstest', - version: '1.0.82', + version: '1.0.83', description: 'a test utility to run tests that match test/**/*.ts' } diff --git a/ts/tstest.classes.tstest.ts b/ts/tstest.classes.tstest.ts index 383d92f..f044e53 100644 --- a/ts/tstest.classes.tstest.ts +++ b/ts/tstest.classes.tstest.ts @@ -129,90 +129,62 @@ export class TsTest { server.addRoute('*', new plugins.typedserver.servertools.HandlerStatic(tsbundleCacheDirPath)); await server.start(); + // lets handle realtime comms + const wss = new plugins.ws.WebSocketServer({ port: 8080 }); + wss.on('connection', (ws) => { + ws.on('message', (message) => { + console.log(message.toString()); + }); + }); + // lets do the browser bit await this.smartbrowserInstance.start(); const evaluation = await this.smartbrowserInstance.evaluateOnPage( `http://localhost:3007/test?bundleName=${bundleFileName}`, async () => { - const convertToText = (obj: any): string => { - // create an array that will later be joined into a string. - const stringArray: string[] = []; + // lets enable real time comms + const ws = new WebSocket('ws://localhost:8080'); + await new Promise((resolve) => (ws.onopen = resolve)); - if (typeof obj === 'object' && typeof obj.toString === 'function') { - stringArray.push(obj.toString()); - } else if (typeof obj === 'object' && obj.join === undefined) { - stringArray.push('{'); - for (const prop of Object.keys(obj)) { - stringArray.push(prop, ': ', convertToText(obj[prop]), ','); - } - stringArray.push('}'); + // Ensure this function is declared with 'async' + const logStore = []; + const originalLog = console.log; + const originalError = console.error; - // is array - } else if (typeof obj === 'object' && !(obj.join === undefined)) { - stringArray.push('['); - for (const prop of Object.keys(obj)) { - stringArray.push(convertToText(obj[prop]), ','); - } - stringArray.push(']'); - - // is function - } else if (typeof obj === 'function') { - stringArray.push(obj.toString()); - - // all other values can be done with JSON.stringify - } else { - stringArray.push(JSON.stringify(obj)); - } - - return stringArray.join(''); - }; - - let logStore = ''; - // tslint:disable-next-line: max-classes-per-file - const log = console.log.bind(console); + // Override console methods to capture the logs console.log = (...args) => { - args = args.map((argument) => { - return typeof argument !== 'string' ? convertToText(argument) : argument; - }); - logStore += `${args}\n`; - log(...args); + logStore.push(args.join(' ')); + ws.send(args.join(' ')); + originalLog(...args); }; - const error = console.error; console.error = (...args) => { - args = args.map((argument) => { - return typeof argument !== 'string' ? convertToText(argument) : argument; - }); - logStore += `${args}\n`; - error(...args); + logStore.push(args.join(' ')); + ws.send(args.join(' ')); + originalError(...args); }; + const bundleName = new URLSearchParams(window.location.search).get('bundleName'); - console.log(`::TSTEST IN CHROMIUM:: Relevant Script name is: ${bundleName}`); - const bundleResponse = await fetch(`/${bundleName}`); - console.log( - `::TSTEST IN CHROMIUM:: Got ${bundleName} with STATUS ${bundleResponse.status}` - ); - const bundle = await bundleResponse.text(); - console.log(`::TSTEST IN CHROMIUM:: Executing ${bundleName}`); + originalLog(`::TSTEST IN CHROMIUM:: Relevant Script name is: ${bundleName}`); + try { - // tslint:disable-next-line: no-eval - eval(bundle); + // Dynamically import the test module + const testModule = await import(`/${bundleName}`); + if (testModule && testModule.runTest) { + // Execute the exported test function + await testModule.runTest(); + } else { + originalError('Test module does not export runTest function.'); + } } catch (err) { - console.error(err); + originalError(err); } - if ( - (globalThis as any).tapbundleDeferred && - (globalThis as any).tapbundleDeferred.promise - ) { - await (globalThis as any).tapbundleDeferred.promise; - } else { - console.log('Error: Could not find tapbundle Deferred'); - } - return logStore; + return logStore.join('\n'); } ); await this.smartbrowserInstance.stop(); await server.stop(); + wss.close(); console.log( `${cs('=> ', 'blue')} Stopped ${cs(fileNameArg, 'orange')} chromium instance and server.` ); diff --git a/ts/tstest.plugins.ts b/ts/tstest.plugins.ts index 6a277cd..ba4580e 100644 --- a/ts/tstest.plugins.ts +++ b/ts/tstest.plugins.ts @@ -40,3 +40,10 @@ export { tsbundle }; import figures from 'figures'; export { figures }; + +// third party +import * as ws from 'ws'; + +export { + ws +}