ReviewOS

also looking at this

zig-utils/zig-test-framework

Implement the web UI server with Zig I/O

#26
Merged glennmichael123 wants to merge codex/issue-9-ui-server into main
8 files +513 -114
src/ui/index.htmlmodified+23-2
Changes to src/ui/index.html
@@ -84,6 +84,7 @@
8484
8585 .stat.total .stat-value { color: #58a6ff; }
8686 .stat.passed .stat-value { color: #3fb950; }
87 .stat.flaky .stat-value { color: #dbab09; }
8788 .stat.failed .stat-value { color: #f85149; }
8889 .stat.skipped .stat-value { color: #d29922; }
8990
@@ -148,6 +149,11 @@
148149 background: #1c2128;
149150 }
150151
152 .test.flaky {
153 border-left-color: #dbab09;
154 background: #1c2128;
155 }
156
151157 .test.skipped {
152158 border-left-color: #d29922;
153159 opacity: 0.6;
@@ -181,6 +187,11 @@
181187 color: #fff;
182188 }
183189
190 .test-status.flaky {
191 background: #9e6a03;
192 color: #fff;
193 }
194
184195 .test-status.skipped {
185196 background: #9e6a03;
186197 color: #fff;
@@ -263,6 +274,10 @@
263274 <div class="stat-value" id="passed-tests">0</div>
264275 <div class="stat-label">Passed</div>
265276 </div>
277 <div class="flaky stat">
278 <div class="stat-value" id="flaky-tests">0</div>
279 <div class="stat-label">Flaky</div>
280 </div>
266281 <div class="failed stat">
267282 <div class="stat-value" id="failed-tests">0</div>
268283 <div class="stat-label">Failed</div>
@@ -290,6 +305,7 @@
290305 const state = {
291306 total: 0,
292307 passed: 0,
308 flaky: 0,
293309 failed: 0,
294310 skipped: 0,
295311 suites: new Map(),
@@ -300,6 +316,7 @@
300316 connectionStatus: document.getElementById('connection-status'),
301317 totalTests: document.getElementById('total-tests'),
302318 passedTests: document.getElementById('passed-tests'),
319 flakyTests: document.getElementById('flaky-tests'),
303320 failedTests: document.getElementById('failed-tests'),
304321 skippedTests: document.getElementById('skipped-tests'),
305322 progress: document.getElementById('progress'),
formatting only · 10 hidden lines
Changes to src/ui/index.html
@@ -316,9 +333,9 @@ formatting only
316333
317334 eventSource.addEventListener('run_start', (e) => {
318335 const data = JSON.parse(e.data);
336 clearTests();
319337 state.total = data.total;
320338 updateStats();
321 clearTests();
322339 });
323340
324341 eventSource.addEventListener('suite_start', (e) => {
Changes to src/ui/index.html
@@ -337,6 +354,7 @@
337354 updateTest(state.currentSuite, data.name, data.status, data.execution_time_ns, data.error_message);
338355
339356 if (data.status === 'passed') state.passed++;
357 else if (data.status === 'flaky') state.flaky++;
340358 else if (data.status === 'failed') state.failed++;
341359 else if (data.status === 'skipped') state.skipped++;
342360
@@ -347,6 +365,7 @@
347365 const data = JSON.parse(e.data);
348366 state.total = data.total;
349367 state.passed = data.passed;
368 state.flaky = data.flaky;
350369 state.failed = data.failed;
351370 state.skipped = data.skipped;
352371 updateStats();
@@ -364,10 +383,11 @@
364383 function updateStats() {
365384 elements.totalTests.textContent = state.total;
366385 elements.passedTests.textContent = state.passed;
386 elements.flakyTests.textContent = state.flaky;
367387 elements.failedTests.textContent = state.failed;
368388 elements.skippedTests.textContent = state.skipped;
369389
370 const completed = state.passed + state.failed + state.skipped;
390 const completed = state.passed + state.flaky + state.failed + state.skipped;
371391 const progress = state.total > 0 ? (completed / state.total) * 100 : 0;
372392 elements.progress.style.width = `${progress}%`;
373393 }
@@ -375,6 +395,7 @@
375395 function clearTests() {
376396 state.suites.clear();
377397 state.passed = 0;
398 state.flaky = 0;
378399 state.failed = 0;
379400 state.skipped = 0;
380401 elements.tests.innerHTML = '';