This repository has been archived on 2026-04-03. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
core/packages/test-runners/css/main.css
Jeffrey Smith f1c47002aa
All checks were successful
CI/CD / detect-changes (pull_request) Successful in 23s
CI/CD / test-frontend (pull_request) Successful in 26s
CI/CD / test-go-pg (pull_request) Successful in 2m35s
CI/CD / test-sqlite (pull_request) Successful in 3m19s
CI/CD / build-and-deploy (pull_request) Successful in 1m46s
v0.7.1 Surface Runner Framework
sw.testing SDK module — structured test framework for surface runners:
- suite/test registration, lifecycle hooks (beforeAll/afterAll/beforeEach/afterEach)
- Assertion library (ok/eq/neq/gt/match/throws/status/shape/arrayOf)
- Auto-cleanup via track(type, id) with LIFO deletion
- Three result statuses: passed/failed/warned
- Structured JSON results with timing, warnings, cleanup stats

test-runner manifest type:
- ValidateManifest accepts "test-runner" packages
- Excluded from sidebar nav (extensionNavItems filters surface/full only)
- DB migrations: SQLite 013, Postgres 014 (CHECK constraint)

ICD runner migration (kernel-only):
- Migrated from T.test()/T.assert() to sw.testing.suite()
- Stripped extension-dependent tests (channels, notes, personas, etc.)
- Kernel suites: smoke, crud, authz, security, providers, packaging, sdk
- Deleted ui.js + css (rendering delegated to registry surface)

SDK runner migration (kernel-only):
- Migrated from T.dualTest()/T.domains to sw.testing.suite()
- Stripped extension domains (belong in v0.7.2 package runners)
- Kernel suites: misc, workflows, admin, packages, connections, deps, composition

Runner registry surface (/s/test-runners):
- Admin-only dashboard discovering test-runner packages
- Run All / per-runner Run buttons, real-time results
- Export Failures / Export Full Results (JSON download)
- Dark mode styling using kernel CSS variables
- Suite count polling for async runner script loading

141 passed, 0 failed on fresh minimal install.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-01 22:49:55 +00:00

204 lines
5.1 KiB
CSS

/* Test Runners — Registry Surface
Uses kernel CSS variables from variables.css (--bg-*, --border, --text-*, etc.) */
.ext-test-runners-root {
max-width: 1200px;
margin: 0 auto;
padding: var(--sp-6, 24px) var(--sp-4, 16px);
font-family: var(--font, system-ui, sans-serif);
color: var(--text, #e8e8ed);
}
/* ── Run All Bar ─────────────────────────────── */
.ext-test-runners-bar {
display: flex;
align-items: center;
gap: var(--sp-4, 16px);
margin-bottom: var(--sp-6, 24px);
padding: var(--sp-4, 16px);
background: var(--bg-raised, #222227);
border-radius: var(--radius-lg, 12px);
border: 1px solid var(--border, #2e2e35);
}
.ext-test-runners-bar h2 {
margin: 0;
font-size: 1.1rem;
font-weight: 600;
flex: 1;
color: var(--text, #e8e8ed);
}
.ext-test-runners-summary {
display: flex;
gap: var(--sp-3, 12px);
font-size: 0.85rem;
}
.ext-test-runners-stat {
padding: 2px 8px;
border-radius: var(--radius-sm, 4px);
font-weight: 500;
}
.ext-test-runners-stat--pass { background: var(--success-dim, rgba(34,197,94,0.2)); color: var(--success-light, #4ade80); }
.ext-test-runners-stat--fail { background: var(--danger-dim, rgba(239,68,68,0.2)); color: var(--danger-light, #f87171); }
.ext-test-runners-stat--warn { background: var(--warning-dim, rgba(234,179,8,0.2)); color: var(--warning-light, #fbbf24); }
.ext-test-runners-stat--skip { background: var(--bg-hover, #2a2a30); color: var(--text-3, #6b6b7b); }
/* ── Runner Cards ────────────────────────────── */
.ext-test-runners-grid {
display: flex;
flex-direction: column;
gap: var(--sp-4, 16px);
}
.ext-test-runners-card {
border: 1px solid var(--border, #2e2e35);
border-radius: var(--radius-lg, 12px);
padding: var(--sp-4, 16px);
background: var(--bg-surface, #18181b);
}
.ext-test-runners-card__header {
display: flex;
align-items: center;
gap: var(--sp-3, 12px);
margin-bottom: var(--sp-3, 12px);
}
.ext-test-runners-card__icon {
font-size: 1.5rem;
}
.ext-test-runners-card__title {
font-size: 1rem;
font-weight: 600;
flex: 1;
margin: 0;
color: var(--text, #e8e8ed);
}
.ext-test-runners-card__desc {
font-size: 0.85rem;
color: var(--text-2, #9898a8);
margin: 0 0 var(--sp-3, 12px) 0;
}
.ext-test-runners-card__requires {
font-size: 0.8rem;
color: var(--text-3, #6b6b7b);
margin-bottom: var(--sp-2, 8px);
}
.ext-test-runners-card__requires--missing {
color: var(--warning, #eab308);
}
/* ── Results Panel ───────────────────────────── */
.ext-test-runners-results {
margin-top: var(--sp-3, 12px);
border-top: 1px solid var(--border, #2e2e35);
padding-top: var(--sp-3, 12px);
}
.ext-test-runners-suite {
margin-bottom: var(--sp-3, 12px);
}
.ext-test-runners-suite__name {
font-weight: 600;
font-size: 0.9rem;
margin-bottom: var(--sp-1, 4px);
cursor: pointer;
user-select: none;
color: var(--text, #e8e8ed);
}
.ext-test-runners-suite__name:hover {
text-decoration: underline;
}
.ext-test-runners-test {
display: flex;
align-items: baseline;
gap: var(--sp-2, 8px);
padding: 2px 0 2px var(--sp-4, 16px);
font-size: 0.85rem;
font-family: var(--mono, monospace);
}
.ext-test-runners-test__status {
width: 16px;
text-align: center;
flex-shrink: 0;
}
.ext-test-runners-test__name {
flex: 1;
color: var(--text-2, #9898a8);
}
.ext-test-runners-test__time {
color: var(--text-3, #6b6b7b);
font-size: 0.8rem;
}
.ext-test-runners-test__detail {
color: var(--danger-light, #f87171);
font-size: 0.8rem;
padding-left: calc(var(--sp-4, 16px) + 24px);
word-break: break-word;
}
/* Status colors */
.ext-test-runners-status--passed { color: var(--success, #1dab51); }
.ext-test-runners-status--failed { color: var(--danger, #ef4444); }
.ext-test-runners-status--warned { color: var(--warning, #eab308); }
.ext-test-runners-status--skipped { color: var(--text-3, #6b6b7b); }
/* ── Loading / Empty ─────────────────────────── */
.ext-test-runners-loading,
.ext-test-runners-empty {
text-align: center;
padding: var(--sp-8, 32px);
color: var(--text-2, #9898a8);
}
/* ── Running indicator ───────────────────────── */
.ext-test-runners-running {
display: inline-flex;
align-items: center;
gap: var(--sp-2, 8px);
font-size: 0.85rem;
color: var(--text-2, #9898a8);
}
@keyframes ext-test-runners-spin {
to { transform: rotate(360deg); }
}
.ext-test-runners-spinner {
width: 14px;
height: 14px;
border: 2px solid var(--border, #2e2e35);
border-top-color: var(--accent, #6493ed);
border-radius: 50%;
animation: ext-test-runners-spin 0.8s linear infinite;
}
/* ── Export Bar ───────────────────────────────── */
.ext-test-runners-export {
display: flex;
gap: var(--sp-3, 12px);
margin-top: var(--sp-4, 16px);
padding-top: var(--sp-4, 16px);
border-top: 1px solid var(--border, #2e2e35);
}