@git.zone/tstest 1.0.79

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (34) hide show
  1. package/cli.js +4 -0
  2. package/dist_ts/00_commitinfo_data.d.ts +8 -0
  3. package/dist_ts/00_commitinfo_data.js +9 -0
  4. package/dist_ts/index.d.ts +1 -0
  5. package/dist_ts/index.js +10 -0
  6. package/dist_ts/tstest.classes.tap.combinator.d.ts +6 -0
  7. package/dist_ts/tstest.classes.tap.combinator.js +62 -0
  8. package/dist_ts/tstest.classes.tap.parser.d.ts +37 -0
  9. package/dist_ts/tstest.classes.tap.parser.js +158 -0
  10. package/dist_ts/tstest.classes.tap.testresult.d.ts +14 -0
  11. package/dist_ts/tstest.classes.tap.testresult.js +26 -0
  12. package/dist_ts/tstest.classes.testdirectory.d.ts +27 -0
  13. package/dist_ts/tstest.classes.testdirectory.js +35 -0
  14. package/dist_ts/tstest.classes.tstest.d.ts +14 -0
  15. package/dist_ts/tstest.classes.tstest.js +192 -0
  16. package/dist_ts/tstest.logprefixes.d.ts +3 -0
  17. package/dist_ts/tstest.logprefixes.js +6 -0
  18. package/dist_ts/tstest.paths.d.ts +3 -0
  19. package/dist_ts/tstest.paths.js +5 -0
  20. package/dist_ts/tstest.plugins.d.ts +17 -0
  21. package/dist_ts/tstest.plugins.js +23 -0
  22. package/npmextra.json +17 -0
  23. package/package.json +55 -0
  24. package/readme.md +61 -0
  25. package/ts/00_commitinfo_data.ts +8 -0
  26. package/ts/index.ts +10 -0
  27. package/ts/tstest.classes.tap.combinator.ts +65 -0
  28. package/ts/tstest.classes.tap.parser.ts +202 -0
  29. package/ts/tstest.classes.tap.testresult.ts +26 -0
  30. package/ts/tstest.classes.testdirectory.ts +57 -0
  31. package/ts/tstest.classes.tstest.ts +227 -0
  32. package/ts/tstest.logprefixes.ts +7 -0
  33. package/ts/tstest.paths.ts +5 -0
  34. package/ts/tstest.plugins.ts +42 -0
@@ -0,0 +1,192 @@
1
+ import * as plugins from './tstest.plugins.js';
2
+ import * as paths from './tstest.paths.js';
3
+ import * as logPrefixes from './tstest.logprefixes.js';
4
+ import { coloredString as cs } from '@push.rocks/consolecolor';
5
+ import { TestDirectory } from './tstest.classes.testdirectory.js';
6
+ import { TapCombinator } from './tstest.classes.tap.combinator.js';
7
+ import { TapParser } from './tstest.classes.tap.parser.js';
8
+ export class TsTest {
9
+ constructor(cwdArg, relativePathToTestDirectory) {
10
+ this.smartshellInstance = new plugins.smartshell.Smartshell({
11
+ executor: 'bash',
12
+ pathDirectories: [paths.binDirectory],
13
+ sourceFilePaths: [],
14
+ });
15
+ this.smartbrowserInstance = new plugins.smartbrowser.SmartBrowser();
16
+ this.tsbundleInstance = new plugins.tsbundle.TsBundle();
17
+ this.testDir = new TestDirectory(cwdArg, relativePathToTestDirectory);
18
+ }
19
+ async run() {
20
+ const fileNamesToRun = await this.testDir.getTestFilePathArray();
21
+ console.log(cs(plugins.figures.hamburger.repeat(80), 'cyan'));
22
+ console.log('');
23
+ console.log(`${logPrefixes.TsTestPrefix} FOUND ${fileNamesToRun.length} TESTFILE(S):`);
24
+ for (const fileName of fileNamesToRun) {
25
+ console.log(`${logPrefixes.TsTestPrefix} ${cs(fileName, 'orange')}`);
26
+ }
27
+ console.log('-'.repeat(48));
28
+ console.log(''); // force new line
29
+ const tapCombinator = new TapCombinator(); // lets create the TapCombinator
30
+ for (const fileNameArg of fileNamesToRun) {
31
+ switch (true) {
32
+ case process.env.CI && fileNameArg.includes('.nonci.'):
33
+ console.log('!!!!!!!!!!!');
34
+ console.log(`not running testfile ${fileNameArg}, since we are CI and file name includes '.nonci.' tag`);
35
+ console.log('!!!!!!!!!!!');
36
+ break;
37
+ case fileNameArg.endsWith('.browser.ts') || fileNameArg.endsWith('.browser.nonci.ts'):
38
+ const tapParserBrowser = await this.runInChrome(fileNameArg);
39
+ tapCombinator.addTapParser(tapParserBrowser);
40
+ break;
41
+ case fileNameArg.endsWith('.both.ts') || fileNameArg.endsWith('.both.nonci.ts'):
42
+ console.log('>>>>>>> TEST PART 1: chrome');
43
+ const tapParserBothBrowser = await this.runInChrome(fileNameArg);
44
+ tapCombinator.addTapParser(tapParserBothBrowser);
45
+ console.log(cs(`|`.repeat(16), 'cyan'));
46
+ console.log(''); // force new line
47
+ console.log('>>>>>>> TEST PART 2: node');
48
+ const tapParserBothNode = await this.runInNode(fileNameArg);
49
+ tapCombinator.addTapParser(tapParserBothNode);
50
+ break;
51
+ default:
52
+ const tapParserNode = await this.runInNode(fileNameArg);
53
+ tapCombinator.addTapParser(tapParserNode);
54
+ break;
55
+ }
56
+ console.log(cs(`^`.repeat(16), 'cyan'));
57
+ console.log(''); // force new line
58
+ }
59
+ tapCombinator.evaluate();
60
+ }
61
+ async runInNode(fileNameArg) {
62
+ console.log(`${cs('=> ', 'blue')} Running ${cs(fileNameArg, 'orange')} in node.js runtime.`);
63
+ console.log(`${cs(`= `.repeat(32), 'cyan')}`);
64
+ const tapParser = new TapParser(fileNameArg + ':node');
65
+ // tsrun options
66
+ let tsrunOptions = '';
67
+ if (process.argv.includes('--web')) {
68
+ tsrunOptions += ' --web';
69
+ }
70
+ const execResultStreaming = await this.smartshellInstance.execStreamingSilent(`tsrun ${fileNameArg}${tsrunOptions}`);
71
+ await tapParser.handleTapProcess(execResultStreaming.childProcess);
72
+ return tapParser;
73
+ }
74
+ async runInChrome(fileNameArg) {
75
+ console.log(`${cs('=> ', 'blue')} Running ${cs(fileNameArg, 'orange')} in chromium runtime.`);
76
+ console.log(`${cs(`= `.repeat(32), 'cyan')}`);
77
+ // lets get all our paths sorted
78
+ const tsbundleCacheDirPath = plugins.path.join(paths.cwd, './.nogit/tstest_cache');
79
+ const bundleFileName = fileNameArg.replace('/', '__') + '.js';
80
+ const bundleFilePath = plugins.path.join(tsbundleCacheDirPath, bundleFileName);
81
+ // lets bundle the test
82
+ await plugins.smartfile.fs.ensureEmptyDir(tsbundleCacheDirPath);
83
+ await this.tsbundleInstance.build(process.cwd(), fileNameArg, bundleFilePath, {
84
+ bundler: 'esbuild',
85
+ });
86
+ // lets create a server
87
+ const server = new plugins.typedserver.servertools.Server({
88
+ cors: true,
89
+ port: 3007,
90
+ });
91
+ server.addRoute('/test', new plugins.typedserver.servertools.Handler('GET', async (req, res) => {
92
+ res.type('.html');
93
+ res.write(`
94
+ <html>
95
+ <head>
96
+ <script>
97
+ globalThis.testdom = true;
98
+ </script>
99
+ </head>
100
+ <body></body>
101
+ </html>
102
+ `);
103
+ res.end();
104
+ }));
105
+ server.addRoute('*', new plugins.typedserver.servertools.HandlerStatic(tsbundleCacheDirPath));
106
+ await server.start();
107
+ // lets do the browser bit
108
+ await this.smartbrowserInstance.start();
109
+ const evaluation = await this.smartbrowserInstance.evaluateOnPage(`http://localhost:3007/test?bundleName=${bundleFileName}`, async () => {
110
+ const convertToText = (obj) => {
111
+ // create an array that will later be joined into a string.
112
+ const stringArray = [];
113
+ if (typeof obj === 'object' && typeof obj.toString === 'function') {
114
+ stringArray.push(obj.toString());
115
+ }
116
+ else if (typeof obj === 'object' && obj.join === undefined) {
117
+ stringArray.push('{');
118
+ for (const prop of Object.keys(obj)) {
119
+ stringArray.push(prop, ': ', convertToText(obj[prop]), ',');
120
+ }
121
+ stringArray.push('}');
122
+ // is array
123
+ }
124
+ else if (typeof obj === 'object' && !(obj.join === undefined)) {
125
+ stringArray.push('[');
126
+ for (const prop of Object.keys(obj)) {
127
+ stringArray.push(convertToText(obj[prop]), ',');
128
+ }
129
+ stringArray.push(']');
130
+ // is function
131
+ }
132
+ else if (typeof obj === 'function') {
133
+ stringArray.push(obj.toString());
134
+ // all other values can be done with JSON.stringify
135
+ }
136
+ else {
137
+ stringArray.push(JSON.stringify(obj));
138
+ }
139
+ return stringArray.join('');
140
+ };
141
+ let logStore = '';
142
+ // tslint:disable-next-line: max-classes-per-file
143
+ const log = console.log.bind(console);
144
+ console.log = (...args) => {
145
+ args = args.map((argument) => {
146
+ return typeof argument !== 'string' ? convertToText(argument) : argument;
147
+ });
148
+ logStore += `${args}\n`;
149
+ log(...args);
150
+ };
151
+ const error = console.error;
152
+ console.error = (...args) => {
153
+ args = args.map((argument) => {
154
+ return typeof argument !== 'string' ? convertToText(argument) : argument;
155
+ });
156
+ logStore += `${args}\n`;
157
+ error(...args);
158
+ };
159
+ const bundleName = new URLSearchParams(window.location.search).get('bundleName');
160
+ console.log(`::TSTEST IN CHROMIUM:: Relevant Script name is: ${bundleName}`);
161
+ const bundleResponse = await fetch(`/${bundleName}`);
162
+ console.log(`::TSTEST IN CHROMIUM:: Got ${bundleName} with STATUS ${bundleResponse.status}`);
163
+ const bundle = await bundleResponse.text();
164
+ console.log(`::TSTEST IN CHROMIUM:: Executing ${bundleName}`);
165
+ try {
166
+ // tslint:disable-next-line: no-eval
167
+ eval(bundle);
168
+ }
169
+ catch (err) {
170
+ console.error(err);
171
+ }
172
+ if (globalThis.tapbundleDeferred &&
173
+ globalThis.tapbundleDeferred.promise) {
174
+ await globalThis.tapbundleDeferred.promise;
175
+ }
176
+ else {
177
+ console.log('Error: Could not find tapbundle Deferred');
178
+ }
179
+ return logStore;
180
+ });
181
+ await this.smartbrowserInstance.stop();
182
+ await server.stop();
183
+ console.log(`${cs('=> ', 'blue')} Stopped ${cs(fileNameArg, 'orange')} chromium instance and server.`);
184
+ console.log(`${cs('=> ', 'blue')} See the result captured from the chromium execution:`);
185
+ // lets create the tap parser
186
+ const tapParser = new TapParser(fileNameArg + ':chrome');
187
+ tapParser.handleTapLog(evaluation);
188
+ return tapParser;
189
+ }
190
+ async runInDeno() { }
191
+ }
192
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHN0ZXN0LmNsYXNzZXMudHN0ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvdHN0ZXN0LmNsYXNzZXMudHN0ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxPQUFPLE1BQU0scUJBQXFCLENBQUM7QUFDL0MsT0FBTyxLQUFLLEtBQUssTUFBTSxtQkFBbUIsQ0FBQztBQUMzQyxPQUFPLEtBQUssV0FBVyxNQUFNLHlCQUF5QixDQUFDO0FBRXZELE9BQU8sRUFBRSxhQUFhLElBQUksRUFBRSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFFL0QsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ2xFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUNuRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFFM0QsTUFBTSxPQUFPLE1BQU07SUFZakIsWUFBWSxNQUFjLEVBQUUsMkJBQW1DO1FBVHhELHVCQUFrQixHQUFHLElBQUksT0FBTyxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUM7WUFDNUQsUUFBUSxFQUFFLE1BQU07WUFDaEIsZUFBZSxFQUFFLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQztZQUNyQyxlQUFlLEVBQUUsRUFBRTtTQUNwQixDQUFDLENBQUM7UUFDSSx5QkFBb0IsR0FBRyxJQUFJLE9BQU8sQ0FBQyxZQUFZLENBQUMsWUFBWSxFQUFFLENBQUM7UUFFL0QscUJBQWdCLEdBQUcsSUFBSSxPQUFPLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBR3hELElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxhQUFhLENBQUMsTUFBTSxFQUFFLDJCQUEyQixDQUFDLENBQUM7SUFDeEUsQ0FBQztJQUVELEtBQUssQ0FBQyxHQUFHO1FBQ1AsTUFBTSxjQUFjLEdBQWEsTUFBTSxJQUFJLENBQUMsT0FBTyxDQUFDLG9CQUFvQixFQUFFLENB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
@@ -0,0 +1,3 @@
1
+ export declare const TapPrefix: string;
2
+ export declare const TapErrorPrefix: string;
3
+ export declare const TsTestPrefix: string;
@@ -0,0 +1,6 @@
1
+ import * as plugins from './tstest.plugins.js';
2
+ import { coloredString as cs } from '@push.rocks/consolecolor';
3
+ export const TapPrefix = cs(`::TAP::`, 'pink', 'black');
4
+ export const TapErrorPrefix = cs(` !!!TAP PROTOCOL ERROR!!! `, 'red', 'black');
5
+ export const TsTestPrefix = cs(`**TSTEST**`, 'pink', 'black');
6
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHN0ZXN0LmxvZ3ByZWZpeGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvdHN0ZXN0LmxvZ3ByZWZpeGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxPQUFPLE1BQU0scUJBQXFCLENBQUM7QUFDL0MsT0FBTyxFQUFFLGFBQWEsSUFBSSxFQUFFLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUUvRCxNQUFNLENBQUMsTUFBTSxTQUFTLEdBQUcsRUFBRSxDQUFDLFNBQVMsRUFBRSxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDeEQsTUFBTSxDQUFDLE1BQU0sY0FBYyxHQUFHLEVBQUUsQ0FBQyw0QkFBNEIsRUFBRSxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFFL0UsTUFBTSxDQUFDLE1BQU0sWUFBWSxHQUFHLEVBQUUsQ0FBQyxZQUFZLEVBQUUsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDIn0=
@@ -0,0 +1,3 @@
1
+ export declare const cwd: string;
2
+ export declare const testDir: string;
3
+ export declare const binDirectory: string;
@@ -0,0 +1,5 @@
1
+ import * as plugins from './tstest.plugins.js';
2
+ export const cwd = process.cwd();
3
+ export const testDir = plugins.path.join(cwd, './test/');
4
+ export const binDirectory = plugins.path.join(cwd, './node_modules/.bin');
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHN0ZXN0LnBhdGhzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvdHN0ZXN0LnBhdGhzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxPQUFPLE1BQU0scUJBQXFCLENBQUM7QUFFL0MsTUFBTSxDQUFDLE1BQU0sR0FBRyxHQUFHLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNqQyxNQUFNLENBQUMsTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0FBQ3pELE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUscUJBQXFCLENBQUMsQ0FBQyJ9
@@ -0,0 +1,17 @@
1
+ import * as path from 'path';
2
+ export { path };
3
+ import * as typedserver from '@apiglobal/typedserver';
4
+ export { typedserver };
5
+ import * as consolecolor from '@push.rocks/consolecolor';
6
+ import * as smartbrowser from '@push.rocks/smartbrowser';
7
+ import * as smartdelay from '@push.rocks/smartdelay';
8
+ import * as smartfile from '@push.rocks/smartfile';
9
+ import * as smartlog from '@push.rocks/smartlog';
10
+ import * as smartpromise from '@push.rocks/smartpromise';
11
+ import * as smartshell from '@push.rocks/smartshell';
12
+ import * as tapbundle from '@push.rocks/tapbundle';
13
+ export { consolecolor, smartbrowser, smartdelay, smartfile, smartlog, smartpromise, smartshell, tapbundle, };
14
+ import * as tsbundle from '@gitzone/tsbundle';
15
+ export { tsbundle };
16
+ import figures from 'figures';
17
+ export { figures };
@@ -0,0 +1,23 @@
1
+ // node native
2
+ import * as path from 'path';
3
+ export { path };
4
+ // @apiglobal scope
5
+ import * as typedserver from '@apiglobal/typedserver';
6
+ export { typedserver };
7
+ // @push.rocks scope
8
+ import * as consolecolor from '@push.rocks/consolecolor';
9
+ import * as smartbrowser from '@push.rocks/smartbrowser';
10
+ import * as smartdelay from '@push.rocks/smartdelay';
11
+ import * as smartfile from '@push.rocks/smartfile';
12
+ import * as smartlog from '@push.rocks/smartlog';
13
+ import * as smartpromise from '@push.rocks/smartpromise';
14
+ import * as smartshell from '@push.rocks/smartshell';
15
+ import * as tapbundle from '@push.rocks/tapbundle';
16
+ export { consolecolor, smartbrowser, smartdelay, smartfile, smartlog, smartpromise, smartshell, tapbundle, };
17
+ // @gitzone scope
18
+ import * as tsbundle from '@gitzone/tsbundle';
19
+ export { tsbundle };
20
+ // sindresorhus
21
+ import figures from 'figures';
22
+ export { figures };
23
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHN0ZXN0LnBsdWdpbnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy90c3Rlc3QucGx1Z2lucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjO0FBQ2QsT0FBTyxLQUFLLElBQUksTUFBTSxNQUFNLENBQUM7QUFFN0IsT0FBTyxFQUFFLElBQUksRUFBRSxDQUFDO0FBRWhCLG1CQUFtQjtBQUNuQixPQUFPLEtBQUssV0FBVyxNQUFNLHdCQUF3QixDQUFDO0FBRXRELE9BQU8sRUFDTCxXQUFXLEVBQ1osQ0FBQTtBQUVELG9CQUFvQjtBQUNwQixPQUFPLEtBQUssWUFBWSxNQUFNLDBCQUEwQixDQUFDO0FBQ3pELE9BQU8sS0FBSyxZQUFZLE1BQU0sMEJBQTBCLENBQUM7QUFDekQsT0FBTyxLQUFLLFVBQVUsTUFBTSx3QkFBd0IsQ0FBQztBQUNyRCxPQUFPLEtBQUssU0FBUyxNQUFNLHVCQUF1QixDQUFDO0FBQ25ELE9BQU8sS0FBSyxRQUFRLE1BQU0sc0JBQXNCLENBQUM7QUFDakQsT0FBTyxLQUFLLFlBQVksTUFBTSwwQkFBMEIsQ0FBQztBQUN6RCxPQUFPLEtBQUssVUFBVSxNQUFNLHdCQUF3QixDQUFDO0FBQ3JELE9BQU8sS0FBSyxTQUFTLE1BQU0sdUJBQXVCLENBQUM7QUFFbkQsT0FBTyxFQUNMLFlBQVksRUFDWixZQUFZLEVBQ1osVUFBVSxFQUNWLFNBQVMsRUFDVCxRQUFRLEVBQ1IsWUFBWSxFQUNaLFVBQVUsRUFDVixTQUFTLEdBQ1YsQ0FBQztBQUVGLGlCQUFpQjtBQUNqQixPQUFPLEtBQUssUUFBUSxNQUFNLG1CQUFtQixDQUFDO0FBRTlDLE9BQU8sRUFBRSxRQUFRLEVBQUUsQ0FBQztBQUVwQixlQUFlO0FBQ2YsT0FBTyxPQUFPLE1BQU0sU0FBUyxDQUFDO0FBRTlCLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyJ9
package/npmextra.json ADDED
@@ -0,0 +1,17 @@
1
+ {
2
+ "npmci": {
3
+ "npmGlobalTools": [],
4
+ "npmAccessLevel": "public"
5
+ },
6
+ "gitzone": {
7
+ "projectType": "npm",
8
+ "module": {
9
+ "githost": "gitlab.com",
10
+ "gitscope": "gitzone",
11
+ "gitrepo": "tstest",
12
+ "description": "a test utility to run tests that match test/**/*.ts",
13
+ "npmPackagename": "@gitzone/tstest",
14
+ "license": "MIT"
15
+ }
16
+ }
17
+ }
package/package.json ADDED
@@ -0,0 +1,55 @@
1
+ {
2
+ "name": "@git.zone/tstest",
3
+ "version": "1.0.79",
4
+ "private": false,
5
+ "description": "a test utility to run tests that match test/**/*.ts",
6
+ "main": "dist_ts/index.js",
7
+ "typings": "dist_ts/index.d.ts",
8
+ "type": "module",
9
+ "author": "Lossless GmbH",
10
+ "license": "MIT",
11
+ "bin": {
12
+ "tstest": "./cli.js"
13
+ },
14
+ "scripts": {
15
+ "test": "(npm run cleanUp && npm run prepareTest && npm run tstest)",
16
+ "prepareTest": "git clone https://gitlab.com/sandboxzone/sandbox-npmts.git .nogit/sandbox-npmts && cd .nogit/sandbox-npmts && npm install",
17
+ "tstest": "cd .nogit/sandbox-npmts && node ../../cli.ts.js test/ --web",
18
+ "cleanUp": "rm -rf .nogit/sandbox-npmts",
19
+ "build": "(tsbuild --web --allowimplicitany --skiplibcheck)",
20
+ "buildDocs": "tsdoc"
21
+ },
22
+ "devDependencies": {
23
+ "@git.zone/tsbuild": "^2.1.69",
24
+ "@types/node": "^20.5.6"
25
+ },
26
+ "dependencies": {
27
+ "@apiglobal/typedserver": "^2.0.65",
28
+ "@gitzone/tsbundle": "^2.0.8",
29
+ "@gitzone/tsrun": "^1.2.44",
30
+ "@push.rocks/consolecolor": "^2.0.1",
31
+ "@push.rocks/smartbrowser": "^2.0.5",
32
+ "@push.rocks/smartdelay": "^3.0.5",
33
+ "@push.rocks/smartfile": "^10.0.30",
34
+ "@push.rocks/smartlog": "^3.0.3",
35
+ "@push.rocks/smartpromise": "^4.0.3",
36
+ "@push.rocks/smartshell": "^3.0.3",
37
+ "@push.rocks/tapbundle": "^5.0.15",
38
+ "figures": "^5.0.0"
39
+ },
40
+ "files": [
41
+ "ts/**/*",
42
+ "ts_web/**/*",
43
+ "dist/**/*",
44
+ "dist_*/**/*",
45
+ "dist_ts/**/*",
46
+ "dist_ts_web/**/*",
47
+ "assets/**/*",
48
+ "cli.js",
49
+ "npmextra.json",
50
+ "readme.md"
51
+ ],
52
+ "browserslist": [
53
+ "last 1 chrome versions"
54
+ ]
55
+ }
package/readme.md ADDED
@@ -0,0 +1,61 @@
1
+ # @gitzone/tstest
2
+ a test utility to run tests that match test/**/*.ts
3
+
4
+ ## Availabililty and Links
5
+ * [npmjs.org (npm package)](https://www.npmjs.com/package/@gitzone/tstest)
6
+ * [gitlab.com (source)](https://gitlab.com/gitzone/tstest)
7
+ * [github.com (source mirror)](https://github.com/gitzone/tstest)
8
+ * [docs (typedoc)](https://gitzone.gitlab.io/tstest/)
9
+
10
+ ## Status for master
11
+
12
+ Status Category | Status Badge
13
+ -- | --
14
+ GitLab Pipelines | [![pipeline status](https://gitlab.com/gitzone/tstest/badges/master/pipeline.svg)](https://lossless.cloud)
15
+ GitLab Pipline Test Coverage | [![coverage report](https://gitlab.com/gitzone/tstest/badges/master/coverage.svg)](https://lossless.cloud)
16
+ npm | [![npm downloads per month](https://badgen.net/npm/dy/@gitzone/tstest)](https://lossless.cloud)
17
+ Snyk | [![Known Vulnerabilities](https://badgen.net/snyk/gitzone/tstest)](https://lossless.cloud)
18
+ TypeScript Support | [![TypeScript](https://badgen.net/badge/TypeScript/>=%203.x/blue?icon=typescript)](https://lossless.cloud)
19
+ node Support | [![node](https://img.shields.io/badge/node->=%2010.x.x-blue.svg)](https://nodejs.org/dist/latest-v10.x/docs/api/)
20
+ Code Style | [![Code Style](https://badgen.net/badge/style/prettier/purple)](https://lossless.cloud)
21
+ PackagePhobia (total standalone install weight) | [![PackagePhobia](https://badgen.net/packagephobia/install/@gitzone/tstest)](https://lossless.cloud)
22
+ PackagePhobia (package size on registry) | [![PackagePhobia](https://badgen.net/packagephobia/publish/@gitzone/tstest)](https://lossless.cloud)
23
+ BundlePhobia (total size when bundled) | [![BundlePhobia](https://badgen.net/bundlephobia/minzip/@gitzone/tstest)](https://lossless.cloud)
24
+ Platform support | [![Supports Windows 10](https://badgen.net/badge/supports%20Windows%2010/yes/green?icon=windows)](https://lossless.cloud) [![Supports Mac OS X](https://badgen.net/badge/supports%20Mac%20OS%20X/yes/green?icon=apple)](https://lossless.cloud)
25
+
26
+ ## Usage
27
+
28
+ ## cli usage
29
+
30
+ lets assume we have a directory called test/ where all our tests arae defined. Simply type
31
+
32
+ ```
33
+ tstest test/
34
+ ```
35
+
36
+ to run all tests.
37
+
38
+ ## Syntax
39
+
40
+ tstest supports tap syntax. In other words your testfiles are run in a subprocess, and the console output contains trigger messages for tstest to determine test status. Inside your testfile you should use `@pushrocks/tapbundle` for the best results.
41
+
42
+ ## Environments
43
+
44
+ tstest supports different environments:
45
+
46
+ - a testfile called `test-something.node.ts` will be run in node
47
+ - a testfile called `test-something.chrome.ts` will be run in chrome environment (bundled through parcel and run through puppeteer)
48
+ - a testfile called `test-something.both.ts` will be run in node an chrome, which is good for isomorphic packages.
49
+
50
+ > note: there is alpha support for the deno environment by naming a file test-something.deno.ts
51
+
52
+ ## Contribution
53
+
54
+ We are always happy for code contributions. If you are not the code contributing type that is ok. Still, maintaining Open Source repositories takes considerable time and thought. If you like the quality of what we do and our modules are useful to you we would appreciate a little monthly contribution: You can [contribute one time](https://lossless.link/contribute-onetime) or [contribute monthly](https://lossless.link/contribute). :)
55
+
56
+ For further information read the linked docs at the top of this readme.
57
+
58
+ > MIT licensed | **&copy;** [Lossless GmbH](https://lossless.gmbh)
59
+ | By using this npm module you agree to our [privacy policy](https://lossless.gmbH/privacy)
60
+
61
+ [![repo-footer](https://lossless.gitlab.io/publicrelations/repofooter.svg)](https://maintainedby.lossless.com)
@@ -0,0 +1,8 @@
1
+ /**
2
+ * autocreated commitinfo by @pushrocks/commitinfo
3
+ */
4
+ export const commitinfo = {
5
+ name: '@git.zone/tstest',
6
+ version: '1.0.79',
7
+ description: 'a test utility to run tests that match test/**/*.ts'
8
+ }
package/ts/index.ts ADDED
@@ -0,0 +1,10 @@
1
+ import { TsTest } from './tstest.classes.tstest.js';
2
+
3
+ export const runCli = async () => {
4
+ if (!process.argv[2]) {
5
+ console.error('You must specify a test directory as argument. Please try again.');
6
+ process.exit(1);
7
+ }
8
+ const tsTestInstance = new TsTest(process.cwd(), process.argv[2]);
9
+ await tsTestInstance.run();
10
+ };
@@ -0,0 +1,65 @@
1
+ // ============
2
+ // combines different tap test files to an overall result
3
+ // ============
4
+ import * as plugins from './tstest.plugins.js';
5
+ import { coloredString as cs } from '@push.rocks/consolecolor';
6
+
7
+ import { TapParser } from './tstest.classes.tap.parser.js';
8
+ import * as logPrefixes from './tstest.logprefixes.js';
9
+
10
+ export class TapCombinator {
11
+ tapParserStore: TapParser[] = [];
12
+ addTapParser(tapParserArg: TapParser) {
13
+ this.tapParserStore.push(tapParserArg);
14
+ }
15
+
16
+ evaluate() {
17
+ console.log(
18
+ `${logPrefixes.TsTestPrefix} RESULTS FOR ${this.tapParserStore.length} TESTFILE(S):`
19
+ );
20
+
21
+ let failGlobal = false; // determine wether tstest should fail
22
+ for (const tapParser of this.tapParserStore) {
23
+ if (!tapParser.expectedTests) {
24
+ failGlobal = true;
25
+ let overviewString =
26
+ logPrefixes.TsTestPrefix +
27
+ cs(` ${tapParser.fileName} ${plugins.figures.cross}`, 'red') +
28
+ ` ${plugins.figures.pointer} ` +
29
+ `does not specify tests!`;
30
+ console.log(overviewString);
31
+ } else if (tapParser.expectedTests !== tapParser.receivedTests) {
32
+ failGlobal = true;
33
+ let overviewString =
34
+ logPrefixes.TsTestPrefix +
35
+ cs(` ${tapParser.fileName} ${plugins.figures.cross}`, 'red') +
36
+ ` ${plugins.figures.pointer} ` +
37
+ tapParser.getTestOverviewAsString() +
38
+ `did not execute all specified tests!`;
39
+ console.log(overviewString);
40
+ } else if (tapParser.getErrorTests().length === 0) {
41
+ let overviewString =
42
+ logPrefixes.TsTestPrefix +
43
+ cs(` ${tapParser.fileName} ${plugins.figures.tick}`, 'green') +
44
+ ` ${plugins.figures.pointer} ` +
45
+ tapParser.getTestOverviewAsString();
46
+ console.log(overviewString);
47
+ } else {
48
+ failGlobal = true;
49
+ let overviewString =
50
+ logPrefixes.TsTestPrefix +
51
+ cs(` ${tapParser.fileName} ${plugins.figures.cross}`, 'red') +
52
+ ` ${plugins.figures.pointer} ` +
53
+ tapParser.getTestOverviewAsString();
54
+ console.log(overviewString);
55
+ }
56
+ }
57
+ console.log(cs(plugins.figures.hamburger.repeat(48), 'cyan'));
58
+ if (!failGlobal) {
59
+ console.log(cs('FINAL RESULT: SUCCESS!', 'green'));
60
+ } else {
61
+ console.log(cs('FINAL RESULT: FAIL!', 'red'));
62
+ process.exit(1);
63
+ }
64
+ }
65
+ }