@wp-tester/results 0.0.1 → 0.0.2

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.
@@ -0,0 +1,620 @@
1
+ /**
2
+ * Streaming Test Reporter
3
+ *
4
+ * Provides real-time test result output in a uniform format.
5
+ * Works with both Vitest and PHPUnit test runners.
6
+ *
7
+ * Uses a unified state model with full screen rerendering for clean
8
+ * parallel test execution without output interference.
9
+ */
10
+ import pc from "picocolors";
11
+ /**
12
+ * Spinner frames for animated loader
13
+ */
14
+ const SPINNER_FRAMES = ["⠋", "⠙", "⠹", "⠸", "⠼", "⠴", "⠦", "⠧", "⠇", "⠏"];
15
+ /**
16
+ * Default stdout writer
17
+ */
18
+ export const stdoutWriter = {
19
+ write(text) {
20
+ process.stdout.write(text);
21
+ },
22
+ writeLine(text) {
23
+ process.stdout.write(text + "\n");
24
+ },
25
+ };
26
+ /**
27
+ * Format duration in human-readable format
28
+ */
29
+ function formatDuration(ms) {
30
+ if (ms < 1000) {
31
+ return `${Math.round(ms)}ms`;
32
+ }
33
+ return `${(ms / 1000).toFixed(2)}s`;
34
+ }
35
+ /**
36
+ * Streaming test reporter for real-time test output
37
+ *
38
+ * Uses a unified state model where all test state is centralized and
39
+ * the entire output is rerendered on each update. This approach:
40
+ * - Eliminates output interference between parallel test runs
41
+ * - Simplifies state management (no per-file buffering)
42
+ * - Maintains dynamic UI with loaders/spinners
43
+ * - Makes the code much easier to understand and maintain
44
+ */
45
+ export class StreamingReporter {
46
+ constructor(options = {}) {
47
+ this.enabled = true;
48
+ this.showRunBoundaries = true;
49
+ this.showSummary = true;
50
+ // Rendering state
51
+ this.lastOutputLineCount = 0;
52
+ this.spinnerFrame = 0;
53
+ this.spinnerInterval = null;
54
+ this.writer = options.writer ?? stdoutWriter;
55
+ this.showRunBoundaries = options.showRunBoundaries ?? true;
56
+ this.showSummary = options.showSummary ?? true;
57
+ this.enabled = options.enabled ?? true;
58
+ this.state = {
59
+ files: new Map(),
60
+ toolName: "wp-tester",
61
+ startTime: 0,
62
+ totalTests: 0,
63
+ passedTests: 0,
64
+ failedTests: 0,
65
+ skippedTests: 0,
66
+ };
67
+ }
68
+ /**
69
+ * Enable or disable run boundaries (header and summary)
70
+ */
71
+ setShowRunBoundaries(show) {
72
+ this.showRunBoundaries = show;
73
+ }
74
+ /**
75
+ * Process a stream event
76
+ */
77
+ onEvent(event) {
78
+ switch (event.type) {
79
+ case "run:start":
80
+ this.onRunStart(event.toolName);
81
+ break;
82
+ case "run:end":
83
+ this.onRunEnd();
84
+ break;
85
+ case "file:start":
86
+ this.onFileStart(event.fileId, event.fileName);
87
+ break;
88
+ case "file:end":
89
+ this.onFileEnd(event.fileId);
90
+ break;
91
+ case "suite:start":
92
+ this.onSuiteStart(event.name, event.fileId);
93
+ break;
94
+ case "suite:end":
95
+ this.onSuiteEnd(event.name, event.fileId);
96
+ break;
97
+ case "test:start":
98
+ this.onTestStart(event.name, event.suiteName, event.fileId);
99
+ break;
100
+ case "test:pass":
101
+ this.onTestPass(event.name, event.duration || 0, event.suiteName, event.fileId);
102
+ break;
103
+ case "test:fail":
104
+ this.onTestFail(event.name, event.duration || 0, event.message, event.trace, event.suiteName, event.fileId);
105
+ break;
106
+ case "test:skip":
107
+ this.onTestSkip(event.name, event.message, event.suiteName, event.fileId);
108
+ break;
109
+ case "test:pending":
110
+ this.onTestPending(event.name, event.suiteName, event.fileId);
111
+ break;
112
+ }
113
+ }
114
+ /**
115
+ * Start the spinner animation
116
+ */
117
+ startSpinner() {
118
+ if (this.spinnerInterval || !this.enabled)
119
+ return;
120
+ this.spinnerInterval = setInterval(() => {
121
+ this.spinnerFrame = (this.spinnerFrame + 1) % SPINNER_FRAMES.length;
122
+ this.render();
123
+ }, 80);
124
+ }
125
+ /**
126
+ * Stop the spinner animation
127
+ */
128
+ stopSpinner() {
129
+ if (this.spinnerInterval) {
130
+ clearInterval(this.spinnerInterval);
131
+ this.spinnerInterval = null;
132
+ }
133
+ }
134
+ /**
135
+ * Clear the previous output
136
+ */
137
+ clearPreviousOutput() {
138
+ if (!this.enabled || this.lastOutputLineCount === 0)
139
+ return;
140
+ // Move cursor up and clear each line
141
+ for (let i = 0; i < this.lastOutputLineCount; i++) {
142
+ this.writer.write("\x1b[1A\x1b[2K");
143
+ }
144
+ }
145
+ /**
146
+ * Render the current state to output
147
+ */
148
+ render() {
149
+ if (!this.enabled)
150
+ return;
151
+ // Build output lines
152
+ const lines = [];
153
+ // Check if there are any running tests or loading suites
154
+ let hasRunningTests = false;
155
+ for (const file of this.state.files.values()) {
156
+ for (const suite of file.suites) {
157
+ if (suite.isLoading || suite.tests.some(t => t.status === "running")) {
158
+ hasRunningTests = true;
159
+ break;
160
+ }
161
+ }
162
+ if (hasRunningTests)
163
+ break;
164
+ }
165
+ // Render each file
166
+ for (const file of this.state.files.values()) {
167
+ this.renderFile(file, lines);
168
+ }
169
+ // Clear previous output and render new output
170
+ this.clearPreviousOutput();
171
+ for (const line of lines) {
172
+ this.writer.writeLine(line);
173
+ }
174
+ this.lastOutputLineCount = lines.length;
175
+ // Start/stop spinner based on running tests
176
+ if (hasRunningTests && !this.spinnerInterval) {
177
+ this.startSpinner();
178
+ }
179
+ else if (!hasRunningTests && this.spinnerInterval) {
180
+ this.stopSpinner();
181
+ }
182
+ }
183
+ /**
184
+ * Render a file's tests to output lines
185
+ */
186
+ renderFile(file, lines) {
187
+ for (const suite of file.suites) {
188
+ this.renderSuite(suite, lines);
189
+ }
190
+ }
191
+ /**
192
+ * Render a suite and its tests
193
+ */
194
+ renderSuite(suite, lines) {
195
+ const indent = " ".repeat(suite.depth);
196
+ // Only show spinner if suite is loading AND has no tests yet
197
+ // Don't show spinner if tests have been reported (loading is complete)
198
+ const showSpinner = suite.isLoading && suite.tests.length === 0;
199
+ if (showSpinner) {
200
+ const spinner = pc.cyan(SPINNER_FRAMES[this.spinnerFrame]);
201
+ lines.push(`${indent}${spinner} ${pc.bold(suite.name)}`);
202
+ }
203
+ else {
204
+ // Use two spaces to replace the spinner character and space, preventing text shift
205
+ lines.push(`${indent} ${pc.bold(suite.name)}`);
206
+ }
207
+ // Render tests
208
+ for (const test of suite.tests) {
209
+ this.renderTest(test, suite.depth + 1, lines);
210
+ }
211
+ }
212
+ /**
213
+ * Render a single test
214
+ */
215
+ renderTest(test, depth, lines) {
216
+ const indent = " ".repeat(depth);
217
+ switch (test.status) {
218
+ case "running": {
219
+ const spinner = pc.cyan(SPINNER_FRAMES[this.spinnerFrame]);
220
+ lines.push(`${indent}${spinner} ${pc.dim(test.name)}`);
221
+ break;
222
+ }
223
+ case "passed": {
224
+ const durationStr = test.duration ? pc.dim(` ${formatDuration(test.duration)}`) : "";
225
+ lines.push(`${indent}${pc.green("✓")} ${test.name}${durationStr}`);
226
+ break;
227
+ }
228
+ case "failed": {
229
+ const durationStr = test.duration ? pc.dim(` ${formatDuration(test.duration)}`) : "";
230
+ lines.push(`${indent}${pc.red("✗")} ${test.name}${durationStr}`);
231
+ if (test.message) {
232
+ const messageIndent = " ".repeat(depth + 1);
233
+ const indentedMessage = test.message
234
+ .split("\n")
235
+ .map((line) => `${messageIndent}${pc.red(line)}`)
236
+ .join("\n");
237
+ lines.push(indentedMessage);
238
+ }
239
+ break;
240
+ }
241
+ case "skipped": {
242
+ const reasonStr = test.message ? ` ${pc.dim(`(${test.message})`)}` : "";
243
+ lines.push(`${indent}${pc.yellow("○")} ${pc.dim(test.name)}${reasonStr}`);
244
+ break;
245
+ }
246
+ case "pending": {
247
+ lines.push(`${indent}${pc.yellow("○")} ${pc.dim(test.name)}`);
248
+ break;
249
+ }
250
+ }
251
+ }
252
+ /**
253
+ * Get or create a file state
254
+ */
255
+ getOrCreateFile(fileId, fileName) {
256
+ let file = this.state.files.get(fileId);
257
+ if (!file) {
258
+ file = {
259
+ fileId,
260
+ fileName,
261
+ suites: [],
262
+ currentSuiteStack: [],
263
+ };
264
+ this.state.files.set(fileId, file);
265
+ }
266
+ return file;
267
+ }
268
+ /**
269
+ * Find or create a suite in a file
270
+ */
271
+ getOrCreateSuite(file, suiteName) {
272
+ // Find existing suite
273
+ let suite = file.suites.find(s => s.name === suiteName);
274
+ if (!suite) {
275
+ suite = {
276
+ name: suiteName,
277
+ depth: file.currentSuiteStack.length,
278
+ tests: [],
279
+ isLoading: true, // Start in loading state
280
+ };
281
+ file.suites.push(suite);
282
+ }
283
+ return suite;
284
+ }
285
+ /**
286
+ * Called when test run starts
287
+ */
288
+ onRunStart(toolName) {
289
+ this.state = {
290
+ files: new Map(),
291
+ toolName: toolName || "wp-tester",
292
+ startTime: Date.now(),
293
+ totalTests: 0,
294
+ passedTests: 0,
295
+ failedTests: 0,
296
+ skippedTests: 0,
297
+ };
298
+ this.lastOutputLineCount = 0;
299
+ }
300
+ /**
301
+ * Called when test run ends
302
+ */
303
+ onRunEnd() {
304
+ this.stopSpinner();
305
+ // Clean up any tests still in "running" state across all files
306
+ // This ensures we never show spinners in the final output
307
+ for (const file of this.state.files.values()) {
308
+ for (const suite of file.suites) {
309
+ suite.isLoading = false;
310
+ for (const test of suite.tests) {
311
+ if (test.status === "running") {
312
+ test.status = "pending";
313
+ }
314
+ }
315
+ }
316
+ }
317
+ // Final render
318
+ this.render();
319
+ if (!this.enabled || !this.showSummary)
320
+ return;
321
+ const duration = Date.now() - this.state.startTime;
322
+ this.writer.writeLine("");
323
+ this.printSummary(duration);
324
+ }
325
+ /**
326
+ * Called when a test file starts
327
+ */
328
+ onFileStart(fileId, fileName) {
329
+ this.getOrCreateFile(fileId, fileName);
330
+ }
331
+ /**
332
+ * Called when a test file ends
333
+ */
334
+ onFileEnd(_fileId) {
335
+ // Nothing to do - state is already complete
336
+ // We keep the file in state for final rendering
337
+ }
338
+ /**
339
+ * Called when a test suite starts
340
+ */
341
+ onSuiteStart(name, fileId) {
342
+ const file = fileId ? this.getOrCreateFile(fileId) : this.getOrCreateFile("__global__");
343
+ file.currentSuiteStack.push(name);
344
+ const suite = this.getOrCreateSuite(file, name);
345
+ // When a child suite is created, mark all parent suites as not loading
346
+ // Parent suites are those with depth less than the current suite's depth
347
+ for (const s of file.suites) {
348
+ if (s.depth < suite.depth) {
349
+ s.isLoading = false;
350
+ }
351
+ }
352
+ this.render();
353
+ }
354
+ /**
355
+ * Called when a test suite ends
356
+ */
357
+ onSuiteEnd(name, fileId) {
358
+ const file = fileId ? this.state.files.get(fileId) : this.state.files.get("__global__");
359
+ if (file) {
360
+ const index = file.currentSuiteStack.lastIndexOf(name);
361
+ if (index !== -1) {
362
+ file.currentSuiteStack.splice(index, 1);
363
+ }
364
+ // Mark suite as no longer loading when it ends
365
+ // This ensures loaders are removed even if no tests were reported
366
+ const suite = file.suites.find(s => s.name === name);
367
+ if (suite) {
368
+ suite.isLoading = false;
369
+ // Clean up any tests still in "running" state - they should be marked as pending
370
+ // This handles cases where test:start was received but no completion event followed
371
+ for (const test of suite.tests) {
372
+ if (test.status === "running") {
373
+ test.status = "pending";
374
+ }
375
+ }
376
+ }
377
+ }
378
+ this.render();
379
+ }
380
+ /**
381
+ * Called when a test starts
382
+ */
383
+ onTestStart(name, suiteName, fileId) {
384
+ const file = fileId ? this.getOrCreateFile(fileId) : this.getOrCreateFile("__global__");
385
+ const suite = this.getOrCreateSuite(file, suiteName || "Tests");
386
+ // Mark ALL suites in this file as no longer loading once any test starts
387
+ // This handles nested suite structures where parent suites don't directly contain tests
388
+ for (const s of file.suites) {
389
+ s.isLoading = false;
390
+ }
391
+ suite.tests.push({
392
+ name,
393
+ suiteName,
394
+ status: "running",
395
+ });
396
+ this.render();
397
+ }
398
+ /**
399
+ * Called when a test passes
400
+ */
401
+ onTestPass(name, duration, suiteName, fileId) {
402
+ const file = fileId ? this.getOrCreateFile(fileId) : this.getOrCreateFile("__global__");
403
+ const suite = this.getOrCreateSuite(file, suiteName || "Tests");
404
+ // Mark ALL suites in this file as no longer loading once any test completes
405
+ // This handles nested suite structures where parent suites don't directly contain tests
406
+ for (const s of file.suites) {
407
+ s.isLoading = false;
408
+ }
409
+ // Find and update the test - try exact match first, then fallback to name-only match
410
+ let test = suite.tests.find(t => t.name === name && t.suiteName === suiteName);
411
+ if (!test) {
412
+ // Fallback: try to find by name only (handles cases where suiteName might differ)
413
+ test = suite.tests.find(t => t.name === name && t.status === "running");
414
+ }
415
+ if (test) {
416
+ test.status = "passed";
417
+ test.duration = duration;
418
+ }
419
+ else {
420
+ suite.tests.push({
421
+ name,
422
+ suiteName,
423
+ status: "passed",
424
+ duration,
425
+ });
426
+ }
427
+ this.state.totalTests++;
428
+ this.state.passedTests++;
429
+ this.render();
430
+ }
431
+ /**
432
+ * Called when a test fails
433
+ */
434
+ onTestFail(name, duration, message, trace, suiteName, fileId) {
435
+ const file = fileId ? this.getOrCreateFile(fileId) : this.getOrCreateFile("__global__");
436
+ const suite = this.getOrCreateSuite(file, suiteName || "Tests");
437
+ // Mark ALL suites in this file as no longer loading once any test completes
438
+ // This handles nested suite structures where parent suites don't directly contain tests
439
+ for (const s of file.suites) {
440
+ s.isLoading = false;
441
+ }
442
+ // Find and update the test - try exact match first, then fallback to name-only match
443
+ let test = suite.tests.find(t => t.name === name && t.suiteName === suiteName);
444
+ if (!test) {
445
+ // Fallback: try to find by name only (handles cases where suiteName might differ)
446
+ test = suite.tests.find(t => t.name === name && t.status === "running");
447
+ }
448
+ if (test) {
449
+ test.status = "failed";
450
+ test.duration = duration;
451
+ test.message = message;
452
+ test.trace = trace;
453
+ }
454
+ else {
455
+ suite.tests.push({
456
+ name,
457
+ suiteName,
458
+ status: "failed",
459
+ duration,
460
+ message,
461
+ trace,
462
+ });
463
+ }
464
+ this.state.totalTests++;
465
+ this.state.failedTests++;
466
+ this.render();
467
+ }
468
+ /**
469
+ * Called when a test is skipped
470
+ */
471
+ onTestSkip(name, reason, suiteName, fileId) {
472
+ const file = fileId ? this.getOrCreateFile(fileId) : this.getOrCreateFile("__global__");
473
+ const suite = this.getOrCreateSuite(file, suiteName || "Tests");
474
+ // Mark ALL suites in this file as no longer loading once any test completes
475
+ // This handles nested suite structures where parent suites don't directly contain tests
476
+ for (const s of file.suites) {
477
+ s.isLoading = false;
478
+ }
479
+ // Find and update the test - try exact match first, then fallback to name-only match
480
+ let test = suite.tests.find(t => t.name === name && t.suiteName === suiteName);
481
+ if (!test) {
482
+ // Fallback: try to find by name only (handles cases where suiteName might differ)
483
+ test = suite.tests.find(t => t.name === name && t.status === "running");
484
+ }
485
+ if (test) {
486
+ test.status = "skipped";
487
+ test.message = reason;
488
+ }
489
+ else {
490
+ suite.tests.push({
491
+ name,
492
+ suiteName,
493
+ status: "skipped",
494
+ message: reason,
495
+ });
496
+ }
497
+ this.state.totalTests++;
498
+ this.state.skippedTests++;
499
+ this.render();
500
+ }
501
+ /**
502
+ * Called when a test is pending
503
+ */
504
+ onTestPending(name, suiteName, fileId) {
505
+ const file = fileId ? this.getOrCreateFile(fileId) : this.getOrCreateFile("__global__");
506
+ const suite = this.getOrCreateSuite(file, suiteName || "Tests");
507
+ // Mark suite as no longer loading once first test completes
508
+ suite.isLoading = false;
509
+ // Find and update the test
510
+ const test = suite.tests.find(t => t.name === name && t.suiteName === suiteName);
511
+ if (test) {
512
+ test.status = "pending";
513
+ }
514
+ else {
515
+ suite.tests.push({
516
+ name,
517
+ suiteName,
518
+ status: "pending",
519
+ });
520
+ }
521
+ this.state.totalTests++;
522
+ this.render();
523
+ }
524
+ /**
525
+ * Print final summary
526
+ */
527
+ printSummary(duration) {
528
+ this.writer.writeLine("");
529
+ if (this.state.passedTests > 0) {
530
+ this.writer.writeLine(pc.green(` ✓ ${this.state.passedTests} passed`));
531
+ }
532
+ if (this.state.failedTests > 0) {
533
+ this.writer.writeLine(pc.red(` ✗ ${this.state.failedTests} failed`));
534
+ }
535
+ if (this.state.skippedTests > 0) {
536
+ this.writer.writeLine(pc.yellow(` ○ ${this.state.skippedTests} skipped`));
537
+ }
538
+ this.writer.writeLine("");
539
+ this.writer.writeLine(pc.dim(` ${this.state.totalTests} tests in ${formatDuration(duration)}`));
540
+ this.writer.writeLine("");
541
+ }
542
+ /**
543
+ * Get the current report in CTRF format
544
+ */
545
+ getReport() {
546
+ const tests = [];
547
+ // Collect all tests from all files
548
+ for (const file of this.state.files.values()) {
549
+ for (const suite of file.suites) {
550
+ for (const test of suite.tests) {
551
+ const ctrf = {
552
+ name: test.suiteName ? `${test.suiteName}::${test.name}` : test.name,
553
+ status: test.status === "running" ? "other" : test.status,
554
+ duration: test.duration || 0,
555
+ };
556
+ if (test.message) {
557
+ ctrf.message = test.message;
558
+ }
559
+ if (test.trace) {
560
+ ctrf.trace = test.trace;
561
+ }
562
+ tests.push(ctrf);
563
+ }
564
+ }
565
+ }
566
+ return {
567
+ reportFormat: "CTRF",
568
+ specVersion: "1.0.0",
569
+ results: {
570
+ tool: {
571
+ name: this.state.toolName,
572
+ },
573
+ summary: {
574
+ tests: this.state.totalTests,
575
+ passed: this.state.passedTests,
576
+ failed: this.state.failedTests,
577
+ skipped: this.state.skippedTests,
578
+ pending: 0,
579
+ other: 0,
580
+ start: this.state.startTime,
581
+ stop: Date.now(),
582
+ },
583
+ tests,
584
+ },
585
+ };
586
+ }
587
+ /**
588
+ * Get current counts for external tracking
589
+ */
590
+ getCounts() {
591
+ return {
592
+ total: this.state.totalTests,
593
+ passed: this.state.passedTests,
594
+ failed: this.state.failedTests,
595
+ skipped: this.state.skippedTests,
596
+ };
597
+ }
598
+ }
599
+ /**
600
+ * Create a CTRF Test object from event data
601
+ */
602
+ export function createTestFromEvent(event) {
603
+ const status = event.type === "test:pass"
604
+ ? "passed"
605
+ : event.type === "test:fail"
606
+ ? "failed"
607
+ : event.type === "test:skip"
608
+ ? "skipped"
609
+ : event.type === "test:pending"
610
+ ? "pending"
611
+ : "other";
612
+ return {
613
+ name: event.suiteName ? `${event.suiteName}::${event.name}` : event.name,
614
+ status,
615
+ duration: event.duration || 0,
616
+ ...(event.message && { message: event.message }),
617
+ ...(event.trace && { trace: event.trace }),
618
+ };
619
+ }
620
+ //# sourceMappingURL=streaming.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"streaming.js","sourceRoot":"","sources":["../src/streaming.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Tests for StreamingReporter
3
+ */
4
+ export {};
5
+ //# sourceMappingURL=streaming.spec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"streaming.spec.d.ts","sourceRoot":"","sources":["../src/streaming.spec.ts"],"names":[],"mappings":"AAAA;;GAEG"}