@git.zone/tstest 3.1.3 → 3.1.5

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 (43) hide show
  1. package/dist_ts/00_commitinfo_data.js +1 -1
  2. package/dist_ts/tstest.classes.tap.parser.d.ts +9 -0
  3. package/dist_ts/tstest.classes.tap.parser.js +89 -32
  4. package/dist_ts/tstest.classes.tap.testresult.d.ts +6 -1
  5. package/dist_ts/tstest.classes.tap.testresult.js +10 -2
  6. package/dist_ts/tstest.logging.d.ts +2 -0
  7. package/dist_ts/tstest.logging.js +37 -2
  8. package/dist_ts_tapbundle/webhelpers.js +12 -2
  9. package/npmextra.json +11 -5
  10. package/package.json +12 -11
  11. package/readme.hints.md +46 -1
  12. package/ts/00_commitinfo_data.ts +1 -1
  13. package/ts/tstest.classes.tap.parser.ts +96 -33
  14. package/ts/tstest.classes.tap.testresult.ts +10 -1
  15. package/ts/tstest.logging.ts +39 -3
  16. package/dist_ts/tstest.classes.tap.parser.old.d.ts +0 -50
  17. package/dist_ts/tstest.classes.tap.parser.old.js +0 -332
  18. package/dist_ts_tapbundle/tapbundle.protocols.d.ts +0 -88
  19. package/dist_ts_tapbundle/tapbundle.protocols.js +0 -168
  20. package/dist_ts_tapbundle/ts_tapbundle/00_commitinfo_data.d.ts +0 -8
  21. package/dist_ts_tapbundle/ts_tapbundle/00_commitinfo_data.js +0 -9
  22. package/dist_ts_tapbundle/ts_tapbundle/index.d.ts +0 -6
  23. package/dist_ts_tapbundle/ts_tapbundle/index.js +0 -7
  24. package/dist_ts_tapbundle/ts_tapbundle/tapbundle.classes.pretask.d.ts +0 -10
  25. package/dist_ts_tapbundle/ts_tapbundle/tapbundle.classes.pretask.js +0 -13
  26. package/dist_ts_tapbundle/ts_tapbundle/tapbundle.classes.tap.d.ts +0 -104
  27. package/dist_ts_tapbundle/ts_tapbundle/tapbundle.classes.tap.js +0 -401
  28. package/dist_ts_tapbundle/ts_tapbundle/tapbundle.classes.taptest.d.ts +0 -38
  29. package/dist_ts_tapbundle/ts_tapbundle/tapbundle.classes.taptest.js +0 -110
  30. package/dist_ts_tapbundle/ts_tapbundle/tapbundle.classes.taptools.d.ts +0 -109
  31. package/dist_ts_tapbundle/ts_tapbundle/tapbundle.classes.taptools.js +0 -241
  32. package/dist_ts_tapbundle/ts_tapbundle/tapbundle.classes.tapwrap.d.ts +0 -8
  33. package/dist_ts_tapbundle/ts_tapbundle/tapbundle.classes.tapwrap.js +0 -7
  34. package/dist_ts_tapbundle/ts_tapbundle/tapbundle.plugins.d.ts +0 -8
  35. package/dist_ts_tapbundle/ts_tapbundle/tapbundle.plugins.js +0 -10
  36. package/dist_ts_tapbundle/ts_tapbundle/tapbundle.tapcreator.d.ts +0 -3
  37. package/dist_ts_tapbundle/ts_tapbundle/tapbundle.tapcreator.js +0 -5
  38. package/dist_ts_tapbundle/ts_tapbundle/webhelpers.d.ts +0 -7
  39. package/dist_ts_tapbundle/ts_tapbundle/webhelpers.js +0 -35
  40. package/dist_ts_tapbundle/ts_tapbundle_node/classes.pathinject.d.ts +0 -5
  41. package/dist_ts_tapbundle/ts_tapbundle_node/classes.pathinject.js +0 -13
  42. package/dist_ts_tapbundle/ts_tapbundle_node/plugins.d.ts +0 -11
  43. package/dist_ts_tapbundle/ts_tapbundle_node/plugins.js +0 -14
@@ -1,332 +0,0 @@
1
- import { ChildProcess } from 'child_process';
2
- import { coloredString as cs } from '@push.rocks/consolecolor';
3
- // ============
4
- // combines different tap test files to an overall result
5
- // ============
6
- import * as plugins from './tstest.plugins.js';
7
- import { TapTestResult } from './tstest.classes.tap.testresult.js';
8
- import * as logPrefixes from './tstest.logprefixes.js';
9
- import { TsTestLogger } from './tstest.logging.js';
10
- import { ProtocolParser } from '../dist_ts_tapbundle_protocol/index.js';
11
- export class TapParser {
12
- /**
13
- * the constructor for TapParser
14
- */
15
- constructor(fileName, logger) {
16
- this.fileName = fileName;
17
- this.testStore = [];
18
- this.expectedTestsRegex = /([0-9]*)\.\.([0-9]*)$/;
19
- this.testStatusRegex = /(ok|not\sok)\s([0-9]+)\s-\s(.*?)(\s#\s(.*))?$/;
20
- this.collectingErrorDetails = false;
21
- this.currentTestError = [];
22
- this.pretaskRegex = /^::__PRETASK:(.*)$/;
23
- this.logger = logger;
24
- this.protocolParser = new ProtocolParser();
25
- }
26
- /**
27
- * Handle test file timeout
28
- */
29
- handleTimeout(timeoutSeconds) {
30
- // If no tests have been defined yet, set expected to 1
31
- if (this.expectedTests === 0) {
32
- this.expectedTests = 1;
33
- }
34
- // Create a fake failing test result for timeout
35
- this._getNewTapTestResult();
36
- this.activeTapTestResult.testOk = false;
37
- this.activeTapTestResult.testSettled = true;
38
- this.testStore.push(this.activeTapTestResult);
39
- // Log the timeout error
40
- if (this.logger) {
41
- // First log the test result
42
- this.logger.testResult(`Test file timeout`, false, timeoutSeconds * 1000, `Error: Test file exceeded timeout of ${timeoutSeconds} seconds`);
43
- this.logger.testErrorDetails(`Test execution was terminated after ${timeoutSeconds} seconds`);
44
- }
45
- // Don't call evaluateFinalResult here, let the caller handle it
46
- }
47
- _getNewTapTestResult() {
48
- this.activeTapTestResult = new TapTestResult(this.testStore.length + 1);
49
- }
50
- _processLog(logChunk) {
51
- if (Buffer.isBuffer(logChunk)) {
52
- logChunk = logChunk.toString();
53
- }
54
- const logLineArray = logChunk.split('\n');
55
- if (logLineArray[logLineArray.length - 1] === '') {
56
- logLineArray.pop();
57
- }
58
- // lets parse the log information
59
- for (const logLine of logLineArray) {
60
- let logLineIsTapProtocol = false;
61
- if (!this.expectedTests && this.expectedTestsRegex.test(logLine)) {
62
- logLineIsTapProtocol = true;
63
- const regexResult = this.expectedTestsRegex.exec(logLine);
64
- this.expectedTests = parseInt(regexResult[2]);
65
- if (this.logger) {
66
- this.logger.tapOutput(`Expecting ${this.expectedTests} tests!`);
67
- }
68
- // initiating first TapResult
69
- this._getNewTapTestResult();
70
- }
71
- else if (this.pretaskRegex.test(logLine)) {
72
- logLineIsTapProtocol = true;
73
- const pretaskContentMatch = this.pretaskRegex.exec(logLine);
74
- if (pretaskContentMatch && pretaskContentMatch[1]) {
75
- if (this.logger) {
76
- this.logger.tapOutput(`Pretask -> ${pretaskContentMatch[1]}: Success.`);
77
- }
78
- }
79
- }
80
- else if (this.testStatusRegex.test(logLine)) {
81
- logLineIsTapProtocol = true;
82
- const regexResult = this.testStatusRegex.exec(logLine);
83
- // const testId = parseInt(regexResult[2]); // Currently unused
84
- const testOk = (() => {
85
- if (regexResult[1] === 'ok') {
86
- return true;
87
- }
88
- return false;
89
- })();
90
- const testSubject = regexResult[3].trim();
91
- const testMetadata = regexResult[5]; // This will be either "time=XXXms" or "SKIP reason" or "TODO reason"
92
- let testDuration = 0;
93
- if (testMetadata) {
94
- const timeMatch = testMetadata.match(/time=(\d+)ms/);
95
- // const skipMatch = testMetadata.match(/SKIP\s*(.*)/); // Currently unused
96
- // const todoMatch = testMetadata.match(/TODO\s*(.*)/); // Currently unused
97
- if (timeMatch) {
98
- testDuration = parseInt(timeMatch[1]);
99
- }
100
- // Skip/todo handling could be added here in the future
101
- }
102
- // test for protocol error - disabled as it's not critical
103
- // The test ID mismatch can occur when tests are filtered, skipped, or use todo
104
- // if (testId !== this.activeTapTestResult.id) {
105
- // if (this.logger) {
106
- // this.logger.error('Something is strange! Test Ids are not equal!');
107
- // }
108
- // }
109
- this.activeTapTestResult.setTestResult(testOk);
110
- if (testOk) {
111
- if (this.logger) {
112
- this.logger.testResult(testSubject, true, testDuration);
113
- }
114
- }
115
- else {
116
- // Start collecting error details for failed test
117
- this.collectingErrorDetails = true;
118
- this.currentTestError = [];
119
- if (this.logger) {
120
- this.logger.testResult(testSubject, false, testDuration);
121
- }
122
- }
123
- }
124
- if (!logLineIsTapProtocol) {
125
- if (this.activeTapTestResult) {
126
- this.activeTapTestResult.addLogLine(logLine);
127
- }
128
- // Check for snapshot communication
129
- const snapshotMatch = logLine.match(/###SNAPSHOT###(.+)###SNAPSHOT###/);
130
- if (snapshotMatch) {
131
- const base64Data = snapshotMatch[1];
132
- try {
133
- const snapshotData = JSON.parse(Buffer.from(base64Data, 'base64').toString());
134
- this.handleSnapshot(snapshotData);
135
- }
136
- catch (error) {
137
- if (this.logger) {
138
- this.logger.testConsoleOutput(`Error parsing snapshot data: ${error.message}`);
139
- }
140
- }
141
- }
142
- else {
143
- // Check if we're collecting error details
144
- if (this.collectingErrorDetails) {
145
- // Check if this line is an error detail (starts with Error: or has stack trace characteristics)
146
- if (logLine.trim().startsWith('Error:') || logLine.trim().match(/^\s*at\s/)) {
147
- this.currentTestError.push(logLine);
148
- }
149
- else if (this.currentTestError.length > 0) {
150
- // End of error details, show the error
151
- const errorMessage = this.currentTestError.join('\n');
152
- if (this.logger) {
153
- this.logger.testErrorDetails(errorMessage);
154
- }
155
- this.collectingErrorDetails = false;
156
- this.currentTestError = [];
157
- }
158
- }
159
- // Don't output TAP error details as console output when we're collecting them
160
- if (!this.collectingErrorDetails || (!logLine.trim().startsWith('Error:') && !logLine.trim().match(/^\s*at\s/))) {
161
- if (this.logger) {
162
- // This is console output from the test file, not TAP protocol
163
- this.logger.testConsoleOutput(logLine);
164
- }
165
- }
166
- }
167
- }
168
- if (this.activeTapTestResult && this.activeTapTestResult.testSettled) {
169
- // Ensure any pending error is shown before settling the test
170
- if (this.collectingErrorDetails && this.currentTestError.length > 0) {
171
- const errorMessage = this.currentTestError.join('\n');
172
- if (this.logger) {
173
- this.logger.testErrorDetails(errorMessage);
174
- }
175
- this.collectingErrorDetails = false;
176
- this.currentTestError = [];
177
- }
178
- this.testStore.push(this.activeTapTestResult);
179
- this._getNewTapTestResult();
180
- }
181
- }
182
- }
183
- /**
184
- * returns all tests that are not completed
185
- */
186
- getUncompletedTests() {
187
- // TODO:
188
- }
189
- /**
190
- * returns all tests that threw an error
191
- */
192
- getErrorTests() {
193
- return this.testStore.filter((tapTestArg) => {
194
- return !tapTestArg.testOk;
195
- });
196
- }
197
- /**
198
- * returns a test overview as string
199
- */
200
- getTestOverviewAsString() {
201
- let overviewString = '';
202
- for (const test of this.testStore) {
203
- if (overviewString !== '') {
204
- overviewString += ' | ';
205
- }
206
- if (test.testOk) {
207
- overviewString += cs(`T${test.id} ${plugins.figures.tick}`, 'green');
208
- }
209
- else {
210
- overviewString += cs(`T${test.id} ${plugins.figures.cross}`, 'red');
211
- }
212
- }
213
- return overviewString;
214
- }
215
- /**
216
- * handles a tap process
217
- * @param childProcessArg
218
- */
219
- async handleTapProcess(childProcessArg) {
220
- const done = plugins.smartpromise.defer();
221
- childProcessArg.stdout.on('data', (data) => {
222
- this._processLog(data);
223
- });
224
- childProcessArg.stderr.on('data', (data) => {
225
- this._processLog(data);
226
- });
227
- childProcessArg.on('exit', async () => {
228
- await this.evaluateFinalResult();
229
- done.resolve();
230
- });
231
- await done.promise;
232
- }
233
- async handleTapLog(tapLog) {
234
- this._processLog(tapLog);
235
- }
236
- /**
237
- * Handle snapshot data from the test
238
- */
239
- async handleSnapshot(snapshotData) {
240
- try {
241
- const smartfile = await import('@push.rocks/smartfile');
242
- if (snapshotData.action === 'compare') {
243
- // Try to read existing snapshot
244
- try {
245
- const existingSnapshot = await smartfile.fs.toStringSync(snapshotData.path);
246
- if (existingSnapshot !== snapshotData.content) {
247
- // Snapshot mismatch
248
- if (this.logger) {
249
- this.logger.testConsoleOutput(`Snapshot mismatch: ${snapshotData.path}`);
250
- this.logger.testConsoleOutput(`Expected:\n${existingSnapshot}`);
251
- this.logger.testConsoleOutput(`Received:\n${snapshotData.content}`);
252
- }
253
- // TODO: Communicate failure back to the test
254
- }
255
- else {
256
- if (this.logger) {
257
- this.logger.testConsoleOutput(`Snapshot matched: ${snapshotData.path}`);
258
- }
259
- }
260
- }
261
- catch (error) {
262
- if (error.code === 'ENOENT') {
263
- // Snapshot doesn't exist, create it
264
- const dirPath = snapshotData.path.substring(0, snapshotData.path.lastIndexOf('/'));
265
- await smartfile.fs.ensureDir(dirPath);
266
- await smartfile.memory.toFs(snapshotData.content, snapshotData.path);
267
- if (this.logger) {
268
- this.logger.testConsoleOutput(`Snapshot created: ${snapshotData.path}`);
269
- }
270
- }
271
- else {
272
- throw error;
273
- }
274
- }
275
- }
276
- else if (snapshotData.action === 'update') {
277
- // Update snapshot
278
- const dirPath = snapshotData.path.substring(0, snapshotData.path.lastIndexOf('/'));
279
- await smartfile.fs.ensureDir(dirPath);
280
- await smartfile.memory.toFs(snapshotData.content, snapshotData.path);
281
- if (this.logger) {
282
- this.logger.testConsoleOutput(`Snapshot updated: ${snapshotData.path}`);
283
- }
284
- }
285
- }
286
- catch (error) {
287
- if (this.logger) {
288
- this.logger.testConsoleOutput(`Error handling snapshot: ${error.message}`);
289
- }
290
- }
291
- }
292
- async evaluateFinalResult() {
293
- this.receivedTests = this.testStore.length;
294
- // check wether all tests ran
295
- if (this.expectedTests === this.receivedTests) {
296
- if (this.logger) {
297
- this.logger.tapOutput(`${this.receivedTests} out of ${this.expectedTests} Tests completed!`);
298
- }
299
- }
300
- else {
301
- if (this.logger) {
302
- this.logger.error(`Only ${this.receivedTests} out of ${this.expectedTests} completed!`);
303
- }
304
- }
305
- if (!this.expectedTests && this.receivedTests === 0) {
306
- if (this.logger) {
307
- this.logger.error('No tests were defined. Therefore the testfile failed!');
308
- this.logger.testFileEnd(0, 1, 0); // Count as 1 failure
309
- }
310
- }
311
- else if (this.expectedTests !== this.receivedTests) {
312
- if (this.logger) {
313
- this.logger.error('The amount of received tests and expectedTests is unequal! Therefore the testfile failed');
314
- const errorCount = this.getErrorTests().length || 1; // At least 1 error
315
- this.logger.testFileEnd(this.receivedTests - errorCount, errorCount, 0);
316
- }
317
- }
318
- else if (this.getErrorTests().length === 0) {
319
- if (this.logger) {
320
- this.logger.tapOutput('All tests are successfull!!!');
321
- this.logger.testFileEnd(this.receivedTests, 0, 0);
322
- }
323
- }
324
- else {
325
- if (this.logger) {
326
- this.logger.tapOutput(`${this.getErrorTests().length} tests threw an error!!!`, true);
327
- this.logger.testFileEnd(this.receivedTests - this.getErrorTests().length, this.getErrorTests().length, 0);
328
- }
329
- }
330
- }
331
- }
332
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHN0ZXN0LmNsYXNzZXMudGFwLnBhcnNlci5vbGQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy90c3Rlc3QuY2xhc3Nlcy50YXAucGFyc2VyLm9sZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzdDLE9BQU8sRUFBRSxhQUFhLElBQUksRUFBRSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFFL0QsZUFBZTtBQUNmLHlEQUF5RDtBQUN6RCxlQUFlO0FBQ2YsT0FBTyxLQUFLLE9BQU8sTUFBTSxxQkFBcUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDbkUsT0FBTyxLQUFLLFdBQVcsTUFBTSx5QkFBeUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDbkQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBR3hFLE1BQU0sT0FBTyxTQUFTO0lBaUJwQjs7T0FFRztJQUNILFlBQW1CLFFBQWdCLEVBQUUsTUFBcUI7UUFBdkMsYUFBUSxHQUFSLFFBQVEsQ0FBUTtRQW5CbkMsY0FBUyxHQUFvQixFQUFFLENBQUM7UUFFaEMsdUJBQWtCLEdBQUcsdUJBQXVCLENBQUM7UUFJN0Msb0JBQWUsR0FBRywrQ0FBK0MsQ0FBQztRQUVsRSwyQkFBc0IsR0FBWSxLQUFLLENBQUM7UUFDeEMscUJBQWdCLEdBQWEsRUFBRSxDQUFDO1FBRWhDLGlCQUFZLEdBQUcsb0JBQW9CLENBQUM7UUFTbEMsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7UUFDckIsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLGNBQWMsRUFBRSxDQUFDO0lBQzdDLENBQUM7SUFFRDs7T0FFRztJQUNJLGFBQWEsQ0FBQyxjQUFzQjtRQUN6Qyx1REFBdUQ7UUFDdkQsSUFBSSxJQUFJLENBQUMsYUFB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
@@ -1,88 +0,0 @@
1
- /**
2
- * Internal protocol constants and utilities for improved TAP communication
3
- * between tapbundle and tstest
4
- */
5
- export declare const PROTOCOL: {
6
- readonly VERSION: "2.0";
7
- readonly MARKERS: {
8
- readonly START: "⟦TSTEST:";
9
- readonly END: "⟧";
10
- readonly BLOCK_END: "⟦/TSTEST:";
11
- };
12
- readonly TYPES: {
13
- readonly META: "META";
14
- readonly ERROR: "ERROR";
15
- readonly SKIP: "SKIP";
16
- readonly TODO: "TODO";
17
- readonly SNAPSHOT: "SNAPSHOT";
18
- readonly PROTOCOL: "PROTOCOL";
19
- };
20
- };
21
- export interface TestMetadata {
22
- time?: number;
23
- startTime?: number;
24
- endTime?: number;
25
- skip?: string;
26
- todo?: string;
27
- retry?: number;
28
- maxRetries?: number;
29
- error?: {
30
- message: string;
31
- stack?: string;
32
- diff?: string;
33
- actual?: any;
34
- expected?: any;
35
- };
36
- file?: string;
37
- line?: number;
38
- column?: number;
39
- tags?: string[];
40
- custom?: Record<string, any>;
41
- }
42
- export declare class ProtocolEncoder {
43
- /**
44
- * Encode metadata for inline inclusion
45
- */
46
- static encodeInline(type: string, data: any): string;
47
- /**
48
- * Encode block data for multi-line content
49
- */
50
- static encodeBlock(type: string, data: any): string[];
51
- /**
52
- * Create a TAP line with metadata
53
- */
54
- static createTestLine(status: 'ok' | 'not ok', number: number, description: string, metadata?: TestMetadata): string;
55
- }
56
- export declare class ProtocolDecoder {
57
- /**
58
- * Extract all protocol markers from a line
59
- */
60
- static extractMarkers(line: string): Array<{
61
- type: string;
62
- data: any;
63
- start: number;
64
- end: number;
65
- }>;
66
- /**
67
- * Remove protocol markers from a line
68
- */
69
- static cleanLine(line: string): string;
70
- /**
71
- * Parse a test line and extract metadata
72
- */
73
- static parseTestLine(line: string): {
74
- cleaned: string;
75
- metadata: TestMetadata;
76
- };
77
- /**
78
- * Check if a line starts a protocol block
79
- */
80
- static isBlockStart(line: string): {
81
- isBlock: boolean;
82
- type?: string;
83
- };
84
- /**
85
- * Check if a line ends a protocol block
86
- */
87
- static isBlockEnd(line: string, type: string): boolean;
88
- }
@@ -1,168 +0,0 @@
1
- /**
2
- * Internal protocol constants and utilities for improved TAP communication
3
- * between tapbundle and tstest
4
- */
5
- export const PROTOCOL = {
6
- VERSION: '2.0',
7
- MARKERS: {
8
- START: '⟦TSTEST:',
9
- END: '⟧',
10
- BLOCK_END: '⟦/TSTEST:',
11
- },
12
- TYPES: {
13
- META: 'META',
14
- ERROR: 'ERROR',
15
- SKIP: 'SKIP',
16
- TODO: 'TODO',
17
- SNAPSHOT: 'SNAPSHOT',
18
- PROTOCOL: 'PROTOCOL',
19
- }
20
- };
21
- export class ProtocolEncoder {
22
- /**
23
- * Encode metadata for inline inclusion
24
- */
25
- static encodeInline(type, data) {
26
- if (typeof data === 'string') {
27
- return `${PROTOCOL.MARKERS.START}${type}:${data}${PROTOCOL.MARKERS.END}`;
28
- }
29
- return `${PROTOCOL.MARKERS.START}${type}:${JSON.stringify(data)}${PROTOCOL.MARKERS.END}`;
30
- }
31
- /**
32
- * Encode block data for multi-line content
33
- */
34
- static encodeBlock(type, data) {
35
- const lines = [];
36
- lines.push(`${PROTOCOL.MARKERS.START}${type}${PROTOCOL.MARKERS.END}`);
37
- if (typeof data === 'string') {
38
- lines.push(data);
39
- }
40
- else {
41
- lines.push(JSON.stringify(data, null, 2));
42
- }
43
- lines.push(`${PROTOCOL.MARKERS.BLOCK_END}${type}${PROTOCOL.MARKERS.END}`);
44
- return lines;
45
- }
46
- /**
47
- * Create a TAP line with metadata
48
- */
49
- static createTestLine(status, number, description, metadata) {
50
- let line = `${status} ${number} - ${description}`;
51
- if (metadata) {
52
- // For skip/todo, use inline format for compatibility
53
- if (metadata.skip) {
54
- line += ` ${this.encodeInline(PROTOCOL.TYPES.SKIP, metadata.skip)}`;
55
- }
56
- else if (metadata.todo) {
57
- line += ` ${this.encodeInline(PROTOCOL.TYPES.TODO, metadata.todo)}`;
58
- }
59
- else {
60
- // For other metadata, append inline
61
- const metaCopy = { ...metadata };
62
- delete metaCopy.error; // Error details go in separate block
63
- if (Object.keys(metaCopy).length > 0) {
64
- line += ` ${this.encodeInline(PROTOCOL.TYPES.META, metaCopy)}`;
65
- }
66
- }
67
- }
68
- return line;
69
- }
70
- }
71
- export class ProtocolDecoder {
72
- /**
73
- * Extract all protocol markers from a line
74
- */
75
- static extractMarkers(line) {
76
- const markers = [];
77
- let searchFrom = 0;
78
- while (true) {
79
- const start = line.indexOf(PROTOCOL.MARKERS.START, searchFrom);
80
- if (start === -1)
81
- break;
82
- const end = line.indexOf(PROTOCOL.MARKERS.END, start);
83
- if (end === -1)
84
- break;
85
- const content = line.substring(start + PROTOCOL.MARKERS.START.length, end);
86
- const colonIndex = content.indexOf(':');
87
- if (colonIndex !== -1) {
88
- const type = content.substring(0, colonIndex);
89
- const dataStr = content.substring(colonIndex + 1);
90
- let data;
91
- try {
92
- // Try to parse as JSON first
93
- data = JSON.parse(dataStr);
94
- }
95
- catch {
96
- // If not JSON, treat as string
97
- data = dataStr;
98
- }
99
- markers.push({
100
- type,
101
- data,
102
- start,
103
- end: end + PROTOCOL.MARKERS.END.length
104
- });
105
- }
106
- searchFrom = end + 1;
107
- }
108
- return markers;
109
- }
110
- /**
111
- * Remove protocol markers from a line
112
- */
113
- static cleanLine(line) {
114
- const markers = this.extractMarkers(line);
115
- // Remove markers from end to start to preserve indices
116
- let cleanedLine = line;
117
- for (let i = markers.length - 1; i >= 0; i--) {
118
- const marker = markers[i];
119
- cleanedLine = cleanedLine.substring(0, marker.start) +
120
- cleanedLine.substring(marker.end);
121
- }
122
- return cleanedLine.trim();
123
- }
124
- /**
125
- * Parse a test line and extract metadata
126
- */
127
- static parseTestLine(line) {
128
- const markers = this.extractMarkers(line);
129
- const metadata = {};
130
- for (const marker of markers) {
131
- switch (marker.type) {
132
- case PROTOCOL.TYPES.META:
133
- Object.assign(metadata, marker.data);
134
- break;
135
- case PROTOCOL.TYPES.SKIP:
136
- metadata.skip = marker.data;
137
- break;
138
- case PROTOCOL.TYPES.TODO:
139
- metadata.todo = marker.data;
140
- break;
141
- }
142
- }
143
- return {
144
- cleaned: this.cleanLine(line),
145
- metadata
146
- };
147
- }
148
- /**
149
- * Check if a line starts a protocol block
150
- */
151
- static isBlockStart(line) {
152
- const trimmed = line.trim();
153
- if (trimmed.startsWith(PROTOCOL.MARKERS.START) && trimmed.endsWith(PROTOCOL.MARKERS.END)) {
154
- const content = trimmed.slice(PROTOCOL.MARKERS.START.length, -PROTOCOL.MARKERS.END.length);
155
- if (!content.includes(':')) {
156
- return { isBlock: true, type: content };
157
- }
158
- }
159
- return { isBlock: false };
160
- }
161
- /**
162
- * Check if a line ends a protocol block
163
- */
164
- static isBlockEnd(line, type) {
165
- return line.trim() === `${PROTOCOL.MARKERS.BLOCK_END}${type}${PROTOCOL.MARKERS.END}`;
166
- }
167
- }
168
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFwYnVuZGxlLnByb3RvY29scy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzX3RhcGJ1bmRsZS90YXBidW5kbGUucHJvdG9jb2xzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7R0FHRztBQUVILE1BQU0sQ0FBQyxNQUFNLFFBQVEsR0FBRztJQUN0QixPQUFPLEVBQUUsS0FBSztJQUNkLE9BQU8sRUFBRTtRQUNQLEtBQUssRUFBRSxVQUFVO1FBQ2pCLEdBQUcsRUFBRSxHQUFHO1FBQ1IsU0FBUyxFQUFFLFdBQVc7S0FDdkI7SUFDRCxLQUFLLEVBQUU7UUFDTCxJQUFJLEVBQUUsTUFBTTtRQUNaLEtBQUssRUFBRSxPQUFPO1FBQ2QsSUFBSSxFQUFFLE1BQU07UUFDWixJQUFJLEVBQUUsTUFBTTtRQUNaLFFBQVEsRUFBRSxVQUFVO1FBQ3BCLFFBQVEsRUFBRSxVQUFVO0tBQ3JCO0NBQ08sQ0FBQztBQWlDWCxNQUFNLE9BQU8sZUFBZTtJQUMxQjs7T0FFRztJQUNILE1BQU0sQ0FBQyxZQUFZLENBQUMsSUFBWSxFQUFFLElBQVM7UUFDekMsSUFBSSxPQUFPLElBQUksS0FBSyxRQUFRLEVBQUUsQ0FBQztZQUM3QixPQUFPLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEdBQUcsSUFBSSxJQUFJLElBQUksR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQzNFLENBQUM7UUFDRCxPQUFPLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEdBQUcsSUFBSSxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQztJQUMzRixDQUFDO0lBRUQ7O09BRUc7SUFDSCxNQUFNLENBQUMsV0FBVyxDQUFDLElBQVksRUFBRSxJQUFTO1FBQ3hDLE1BQU0sS0FBSyxHQUFhLEVBQUUsQ0FBQztRQUMzQixLQUFLLENBQUMsSUFBSSxD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
@@ -1,8 +0,0 @@
1
- /**
2
- * autocreated commitinfo by @push.rocks/commitinfo
3
- */
4
- export declare const commitinfo: {
5
- name: string;
6
- version: string;
7
- description: string;
8
- };
@@ -1,9 +0,0 @@
1
- /**
2
- * autocreated commitinfo by @push.rocks/commitinfo
3
- */
4
- export const commitinfo = {
5
- name: '@push.rocks/tapbundle',
6
- version: '6.0.3',
7
- description: 'A comprehensive testing automation library that provides a wide range of utilities and tools for TAP (Test Anything Protocol) based testing, especially suitable for projects using tapbuffer.'
8
- };
9
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMDBfY29tbWl0aW5mb19kYXRhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vdHNfdGFwYnVuZGxlLzAwX2NvbW1pdGluZm9fZGF0YS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLFVBQVUsR0FBRztJQUN4QixJQUFJLEVBQUUsdUJBQXVCO0lBQzdCLE9BQU8sRUFBRSxPQUFPO0lBQ2hCLFdBQVcsRUFBRSxnTUFBZ007Q0FDOU0sQ0FBQSJ9
@@ -1,6 +0,0 @@
1
- export { tap } from './tapbundle.classes.tap.js';
2
- export { TapWrap } from './tapbundle.classes.tapwrap.js';
3
- export { webhelpers } from './webhelpers.js';
4
- export { TapTools } from './tapbundle.classes.taptools.js';
5
- import { expect } from '@push.rocks/smartexpect';
6
- export { expect };
@@ -1,7 +0,0 @@
1
- export { tap } from './tapbundle.classes.tap.js';
2
- export { TapWrap } from './tapbundle.classes.tapwrap.js';
3
- export { webhelpers } from './webhelpers.js';
4
- export { TapTools } from './tapbundle.classes.taptools.js';
5
- import { expect } from '@push.rocks/smartexpect';
6
- export { expect };
7
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90c190YXBidW5kbGUvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ2pELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUN6RCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDN0MsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBRTNELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUVqRCxPQUFPLEVBQUUsTUFBTSxFQUFFLENBQUMifQ==