mirror of
https://github.com/Kpa-clawbot/meshcore-analyzer.git
synced 2026-09-25 15:03:46 +00:00
chore(tests): move root test-*.js into tests/unit and tests/e2e (#2036)
Moves 290 root test-*.js into tests/unit (177, listed in test-all.sh) and tests/e2e (113, classified in scripts/non-unit-tests.json), per #1981 and PR-D of #1385. Root goes from 348 entries to 48. test-all.sh and test-fixtures/ stay put. The inventory guard now fails if a test reappears in the root or sits in the wrong folder.
Verified independently of the diff: the invoked sets are unchanged (test-all.sh 177 before and after, deploy.yml 96 before and after, both identical as sets), and a full local run of test-all.sh on master and on the branch produced 4702 output lines each whose only differences are absolute paths, stack-trace line numbers shifted by the REPO_ROOT line, the inventory wording and two perf ratios. The guard was mutation-checked: a test back in the root, a unit suite in tests/e2e, and a suite dropped from test-all.sh each make it exit 1. CI run 35246304316 ran 97 suites from tests/e2e and is green.
Follow-up 9335c51d finished the instruction files: no bare root test command is left in AGENTS.md, the squad charters, .github or docs, and every tests/ path they name resolves.
Merged by the interim maintainer without a second human reviewer: CI and the local runs above are the independent checks.
Known and deliberately out of scope: 18 of the 113 files in tests/e2e are invoked by no runner at all, and one of them cannot run anywhere because it requires jsdom, which is not a declared dependency. Tracked separately.
This commit is contained in:
@@ -28,7 +28,7 @@ You will pay special attention to the following areas during your review:
|
||||
- **Project Architecture**: Does the PR respect the single Node.js server + static frontend architecture? Are changes in the right place?
|
||||
|
||||
### 2. Testing and Validation
|
||||
- **No commit without tests**: Is the backend logic change covered by unit tests? Is `test-packet-filter.js` or `test-aging.js` updated if necessary?
|
||||
- **No commit without tests**: Is the backend logic change covered by unit tests? Is `tests/unit/test-packet-filter.js` or `tests/unit/test-aging.js` updated if necessary?
|
||||
- **Browser Validation**: Has the contributor confirmed the change works in a browser? Is there a screenshot for visual changes?
|
||||
- **Cache Busters**: If any `public/` assets (`.js`, `.css`) were modified, has the cache buster in `public/index.html` been bumped in the *same commit*? This is critical.
|
||||
|
||||
|
||||
@@ -28,7 +28,7 @@ You will pay special attention to the following areas during your review:
|
||||
- **Project Architecture**: Does the PR respect the single Node.js server + static frontend architecture? Are changes in the right place?
|
||||
|
||||
### 2. Testing and Validation
|
||||
- **No commit without tests**: Is the backend logic change covered by unit tests? Is `test-packet-filter.js` or `test-aging.js` updated if necessary?
|
||||
- **No commit without tests**: Is the backend logic change covered by unit tests? Is `tests/unit/test-packet-filter.js` or `tests/unit/test-aging.js` updated if necessary?
|
||||
- **Browser Validation**: Has the contributor confirmed the change works in a browser? Is there a screenshot for visual changes?
|
||||
- **Cache Busters**: If any `public/` assets (`.js`, `.css`) were modified, has the cache buster in `public/index.html` been bumped in the *same commit*? This is critical.
|
||||
|
||||
|
||||
@@ -472,7 +472,7 @@ jobs:
|
||||
|
||||
- name: Run Playwright E2E tests (fail-fast)
|
||||
run: |
|
||||
BASE_URL=http://localhost:13581 node test-e2e-playwright.js 2>&1 | tee e2e-output.txt
|
||||
BASE_URL=http://localhost:13581 node tests/e2e/test-e2e-playwright.js 2>&1 | tee e2e-output.txt
|
||||
# M5+M6 of #1668 — axe-core CI gate.
|
||||
# M5: color-contrast on desktop dark+light.
|
||||
# M6: expanded ruleset (image-alt, label, aria-required-attr,
|
||||
@@ -483,100 +483,100 @@ jobs:
|
||||
# Allowlist: tests/a11y-allowlist.yaml (0 entries — hard pass policy).
|
||||
# Per-viewport summary printed at the end; any net>0 fails the build.
|
||||
BASE_URL=http://localhost:13581 AXE_SCREENSHOT_DIR=/tmp/axe-1668 \
|
||||
node test-a11y-axe-1668.js 2>&1 | tee -a e2e-output.txt
|
||||
BASE_URL=http://localhost:13581 node test-filter-ux-e2e.js 2>&1 | tee -a e2e-output.txt
|
||||
BASE_URL=http://localhost:13581 node test-channel-issue-1087-e2e.js 2>&1 | tee -a e2e-output.txt
|
||||
BASE_URL=http://localhost:13581 node test-channel-issue-1111-e2e.js 2>&1 | tee -a e2e-output.txt
|
||||
BASE_URL=http://localhost:13581 node test-map-modal-fluid-e2e.js 2>&1 | tee -a e2e-output.txt
|
||||
CHROMIUM_REQUIRE=1 BASE_URL=http://localhost:13581 node test-map-nodes-pagination-e2e.js 2>&1 | tee -a e2e-output.txt
|
||||
BASE_URL=http://localhost:13581 node test-observer-iata-1188-e2e.js 2>&1 | tee -a e2e-output.txt
|
||||
BASE_URL=http://localhost:13581 node test-issue-1639-observers-sort-e2e.js 2>&1 | tee -a e2e-output.txt
|
||||
CHROMIUM_REQUIRE=1 BASE_URL=http://localhost:13581 node test-issue-1758-ng-filter-rerenders-e2e.js 2>&1 | tee -a e2e-output.txt
|
||||
CHROMIUM_REQUIRE=1 BASE_URL=http://localhost:13581 node test-nav-fluid-1055-e2e.js 2>&1 | tee -a e2e-output.txt
|
||||
CHROMIUM_REQUIRE=1 BASE_URL=http://localhost:13581 node test-nav-priority-1102-e2e.js 2>&1 | tee -a e2e-output.txt
|
||||
CHROMIUM_REQUIRE=1 BASE_URL=http://localhost:13581 node test-nav-priority-1311-e2e.js 2>&1 | tee -a e2e-output.txt
|
||||
CHROMIUM_REQUIRE=1 BASE_URL=http://localhost:13581 node test-nav-priority-1391-e2e.js 2>&1 | tee -a e2e-output.txt
|
||||
CHROMIUM_REQUIRE=1 BASE_URL=http://localhost:13581 node test-issue-1413-nav-overlap-e2e.js 2>&1 | tee -a e2e-output.txt
|
||||
CHROMIUM_REQUIRE=1 BASE_URL=http://localhost:13581 node test-issue-1400-nav-vertical-clip.js 2>&1 | tee -a e2e-output.txt
|
||||
CHROMIUM_REQUIRE=1 BASE_URL=http://localhost:13581 node test-nav-more-floor-1139-e2e.js 2>&1 | tee -a e2e-output.txt
|
||||
CHROMIUM_REQUIRE=1 BASE_URL=http://localhost:13581 node test-bottom-nav-1061-e2e.js 2>&1 | tee -a e2e-output.txt
|
||||
CHROMIUM_REQUIRE=1 BASE_URL=http://localhost:13581 node test-gestures-1062-e2e.js 2>&1 | tee -a e2e-output.txt
|
||||
CHROMIUM_REQUIRE=1 BASE_URL=http://localhost:13581 node test-gestures-1185-scroll-discriminator-e2e.js 2>&1 | tee -a e2e-output.txt
|
||||
CHROMIUM_REQUIRE=1 BASE_URL=http://localhost:13581 node test-gesture-hints-1065-e2e.js 2>&1 | tee -a e2e-output.txt
|
||||
CHROMIUM_REQUIRE=1 BASE_URL=http://localhost:13581 node test-touch-gestures-coverage-e2e.js 2>&1 | tee -a e2e-output.txt
|
||||
BASE_URL=http://localhost:13581 node test-channel-fluid-e2e.js 2>&1 | tee -a e2e-output.txt
|
||||
BASE_URL=http://localhost:13581 node test-table-fluid-e2e.js 2>&1 | tee -a e2e-output.txt
|
||||
BASE_URL=http://localhost:13581 node test-charts-fluid-1058-e2e.js 2>&1 | tee -a e2e-output.txt
|
||||
BASE_URL=http://localhost:13581 node test-slideover-1056-e2e.js 2>&1 | tee -a e2e-output.txt
|
||||
BASE_URL=http://localhost:13581 node test-issue-1692-packets-init-parallel-e2e.js 2>&1 | tee -a e2e-output.txt
|
||||
BASE_URL=http://localhost:13581 node test-slideover-1168-munger-e2e.js 2>&1 | tee -a e2e-output.txt
|
||||
BASE_URL=http://localhost:13581 node test-logo-pulse-1173-e2e.js 2>&1 | tee -a e2e-output.txt
|
||||
BASE_URL=http://localhost:13581 node test-issue-1122-packets-filter-ux-e2e.js 2>&1 | tee -a e2e-output.txt
|
||||
BASE_URL=http://localhost:13581 node test-issue-1128-packets-layout-e2e.js 2>&1 | tee -a e2e-output.txt
|
||||
BASE_URL=http://localhost:13581 node test-issue-1128-multi-viewport-e2e.js 2>&1 | tee -a e2e-output.txt
|
||||
BASE_URL=http://localhost:13581 node test-issue-1136-live-region-e2e.js 2>&1 | tee -a e2e-output.txt
|
||||
BASE_URL=http://localhost:13581 node test-live-multibyte-only-e2e.js 2>&1 | tee -a e2e-output.txt
|
||||
BASE_URL=http://localhost:13581 node test-issue-1150-404-state-e2e.js 2>&1 | tee -a e2e-output.txt
|
||||
BASE_URL=http://localhost:13581 node test-issue-1146-path-link-contrast-e2e.js 2>&1 | tee -a e2e-output.txt
|
||||
CHROMIUM_REQUIRE=1 node test-issue-1705-subpath-contrast-e2e.js 2>&1 | tee -a e2e-output.txt
|
||||
BASE_URL=http://localhost:13581 node test-issue-1147-section-order-e2e.js 2>&1 | tee -a e2e-output.txt
|
||||
BASE_URL=http://localhost:13581 node test-issue-1151-orphan-separators-e2e.js 2>&1 | tee -a e2e-output.txt
|
||||
BASE_URL=http://localhost:13581 node test-issue-1486-collapse-reopens-detail-e2e.js 2>&1 | tee -a e2e-output.txt
|
||||
CHROMIUM_REQUIRE=1 BASE_URL=http://localhost:13581 node test-logo-rebrand-e2e.js 2>&1 | tee -a e2e-output.txt
|
||||
CHROMIUM_REQUIRE=1 BASE_URL=http://localhost:13581 node test-logo-theme-e2e.js 2>&1 | tee -a e2e-output.txt
|
||||
CHROMIUM_REQUIRE=1 BASE_URL=http://localhost:13581 node test-logo-default-sage-teal-e2e.js 2>&1 | tee -a e2e-output.txt
|
||||
CHROMIUM_REQUIRE=1 BASE_URL=http://localhost:13581 node test-issue-1109-hamburger-dropdown-visible-e2e.js 2>&1 | tee -a e2e-output.txt
|
||||
CHROMIUM_REQUIRE=1 BASE_URL=http://localhost:13581 node test-live-layout-1178-1179-e2e.js 2>&1 | tee -a e2e-output.txt
|
||||
CHROMIUM_REQUIRE=1 BASE_URL=http://localhost:13581 node test-issue-1205-live-controls-anchor-e2e.js 2>&1 | tee -a e2e-output.txt
|
||||
CHROMIUM_REQUIRE=1 BASE_URL=http://localhost:13581 node test-live-mql-leak-1180-e2e.js 2>&1 | tee -a e2e-output.txt
|
||||
CHROMIUM_REQUIRE=1 BASE_URL=http://localhost:13581 node test-issue-1204-live-panel-structure-e2e.js 2>&1 | tee -a e2e-output.txt
|
||||
CHROMIUM_REQUIRE=1 BASE_URL=http://localhost:13581 node test-issue-1234-live-chrome-pass2-e2e.js 2>&1 | tee -a e2e-output.txt
|
||||
CHROMIUM_REQUIRE=1 BASE_URL=http://localhost:13581 node test-issue-1206-vcr-overlap-e2e.js 2>&1 | tee -a e2e-output.txt
|
||||
CHROMIUM_REQUIRE=1 BASE_URL=http://localhost:13581 node test-issue-1244-live-vcr-row-hints-e2e.js 2>&1 | tee -a e2e-output.txt
|
||||
CHROMIUM_REQUIRE=1 BASE_URL=http://localhost:13581 node test-issue-1510-live-nav-pin-e2e.js 2>&1 | tee -a e2e-output.txt
|
||||
CHROMIUM_REQUIRE=1 BASE_URL=http://localhost:13581 node test-live-fullscreen-1572-e2e.js 2>&1 | tee -a e2e-output.txt
|
||||
CHROMIUM_REQUIRE=1 BASE_URL=http://localhost:13581 node test-issue-1599-replay-freeze-e2e.js 2>&1 | tee -a e2e-output.txt
|
||||
CHROMIUM_REQUIRE=1 BASE_URL=http://localhost:13581 node test-issue-1648-m1-icons-e2e.js 2>&1 | tee -a e2e-output.txt
|
||||
CHROMIUM_REQUIRE=1 BASE_URL=http://localhost:13581 node test-issue-1648-m2-icons-e2e.js 2>&1 | tee -a e2e-output.txt
|
||||
CHROMIUM_REQUIRE=1 BASE_URL=http://localhost:13581 node test-issue-1648-m3-icons-e2e.js 2>&1 | tee -a e2e-output.txt
|
||||
CHROMIUM_REQUIRE=1 BASE_URL=http://localhost:13581 node test-issue-1648-m4-icons-e2e.js 2>&1 | tee -a e2e-output.txt
|
||||
CHROMIUM_REQUIRE=1 BASE_URL=http://localhost:13581 node test-issue-1657-analytics-channels-group-sprites-e2e.js 2>&1 | tee -a e2e-output.txt
|
||||
BASE_URL=http://localhost:13581 node test-issue-1224-channels-mobile-ux-e2e.js 2>&1 | tee -a e2e-output.txt
|
||||
BASE_URL=http://localhost:13581 node test-issue-1367-channels-chat-app-e2e.js 2>&1 | tee -a e2e-output.txt
|
||||
BASE_URL=http://localhost:13581 node test-issue-1236-map-mobile-e2e.js 2>&1 | tee -a e2e-output.txt
|
||||
BASE_URL=http://localhost:13581 node test-issue-1329-map-controls-accordion-e2e.js 2>&1 | tee -a e2e-output.txt
|
||||
BASE_URL=http://localhost:13581 node test-issue-1273-qr-overlay-height-e2e.js 2>&1 | tee -a e2e-output.txt
|
||||
BASE_URL=http://localhost:13581 node test-issue-1281-location-row-e2e.js 2>&1 | tee -a e2e-output.txt
|
||||
BASE_URL=http://localhost:13581 node test-issue-1279-legend-p2-e2e.js 2>&1 | tee -a e2e-output.txt
|
||||
BASE_URL=http://localhost:13581 node test-issue-1799-label-vocab-e2e.js 2>&1 | tee -a e2e-output.txt
|
||||
CHROMIUM_REQUIRE=1 BASE_URL=http://localhost:13581 node test-home-coverage-e2e.js 2>&1 | tee -a e2e-output.txt
|
||||
CHROMIUM_REQUIRE=1 BASE_URL=http://localhost:13581 node test-path-inspector-coverage-e2e.js 2>&1 | tee -a e2e-output.txt
|
||||
CHROMIUM_REQUIRE=1 BASE_URL=http://localhost:13581 node test-issue-1206-resize-observer-leak-e2e.js 2>&1 | tee -a e2e-output.txt
|
||||
CHROMIUM_REQUIRE=1 BASE_URL=http://localhost:13581 node test-nav-drawer-1064-e2e.js 2>&1 | tee -a e2e-output.txt
|
||||
CHROMIUM_REQUIRE=1 BASE_URL=http://localhost:13581 node test-audio-live-1297-e2e.js 2>&1 | tee -a e2e-output.txt
|
||||
CHROMIUM_REQUIRE=1 BASE_URL=http://localhost:13581 node test-audio-lab-1297-e2e.js 2>&1 | tee -a e2e-output.txt
|
||||
BASE_URL=http://localhost:13581 node test-channel-decrypt-e2e.js 2>&1 | tee -a e2e-output.txt
|
||||
BASE_URL=http://localhost:13581 node test-channel-qr-e2e.js 2>&1 | tee -a e2e-output.txt
|
||||
BASE_URL=http://localhost:13581 node test-channel-color-picker-e2e.js 2>&1 | tee -a e2e-output.txt
|
||||
BASE_URL=http://localhost:13581 node test-customize-theme-e2e.js 2>&1 | tee -a e2e-output.txt
|
||||
BASE_URL=http://localhost:13581 node test-customize-branding-e2e.js 2>&1 | tee -a e2e-output.txt
|
||||
BASE_URL=http://localhost:13581 node test-customize-display-e2e.js 2>&1 | tee -a e2e-output.txt
|
||||
BASE_URL=http://localhost:13581 node test-customize-export-e2e.js 2>&1 | tee -a e2e-output.txt
|
||||
CHROMIUM_REQUIRE=1 BASE_URL=http://localhost:13581 node test-drag-manager-e2e.js 2>&1 | tee -a e2e-output.txt
|
||||
CHROMIUM_REQUIRE=1 BASE_URL=http://localhost:13581 node test-issue-1567-corner-clears-drag-e2e.js 2>&1 | tee -a e2e-output.txt
|
||||
CHROMIUM_REQUIRE=1 BASE_URL=http://localhost:13581 node test-issue-1306-collisions-terminology-e2e.js 2>&1 | tee -a e2e-output.txt
|
||||
CHROMIUM_REQUIRE=1 BASE_URL=http://localhost:13581 node test-issue-1374-route-map-a11y-e2e.js 2>&1 | tee -a e2e-output.txt
|
||||
CHROMIUM_REQUIRE=1 BASE_URL=http://localhost:13581 node test-channels-list-render-e2e.js 2>&1 | tee -a e2e-output.txt
|
||||
CHROMIUM_REQUIRE=1 BASE_URL=http://localhost:13581 node test-channels-selection-flow-e2e.js 2>&1 | tee -a e2e-output.txt
|
||||
CHROMIUM_REQUIRE=1 BASE_URL=http://localhost:13581 node test-channels-add-modal-e2e.js 2>&1 | tee -a e2e-output.txt
|
||||
CHROMIUM_REQUIRE=1 BASE_URL=http://localhost:13581 node test-channels-share-color-e2e.js 2>&1 | tee -a e2e-output.txt
|
||||
CHROMIUM_REQUIRE=1 BASE_URL=http://localhost:13581 node test-channels-ws-batch-e2e.js 2>&1 | tee -a e2e-output.txt
|
||||
CHROMIUM_REQUIRE=1 BASE_URL=http://localhost:13581 node test-channels-ws-race-1498-e2e.js 2>&1 | tee -a e2e-output.txt
|
||||
CHROMIUM_REQUIRE=1 BASE_URL=http://localhost:13581 node test-issue-1487-byop-modal-layout-e2e.js 2>&1 | tee -a e2e-output.txt
|
||||
CHROMIUM_REQUIRE=1 BASE_URL=http://localhost:13581 node test-issue-1630-reach-mobile-e2e.js 2>&1 | tee -a e2e-output.txt
|
||||
CHROMIUM_REQUIRE=1 BASE_URL=http://localhost:13581 node test-node-reach-coverage-e2e.js 2>&1 | tee -a e2e-output.txt
|
||||
CHROMIUM_REQUIRE=1 BASE_URL=http://localhost:13581 node test-issue-1640-compare-discovery-e2e.js 2>&1 | tee -a e2e-output.txt
|
||||
CHROMIUM_REQUIRE=1 node test-neighbor-map-btn-clip-e2e.js 2>&1 | tee -a e2e-output.txt
|
||||
node tests/e2e/test-a11y-axe-1668.js 2>&1 | tee -a e2e-output.txt
|
||||
BASE_URL=http://localhost:13581 node tests/e2e/test-filter-ux-e2e.js 2>&1 | tee -a e2e-output.txt
|
||||
BASE_URL=http://localhost:13581 node tests/e2e/test-channel-issue-1087-e2e.js 2>&1 | tee -a e2e-output.txt
|
||||
BASE_URL=http://localhost:13581 node tests/e2e/test-channel-issue-1111-e2e.js 2>&1 | tee -a e2e-output.txt
|
||||
BASE_URL=http://localhost:13581 node tests/e2e/test-map-modal-fluid-e2e.js 2>&1 | tee -a e2e-output.txt
|
||||
CHROMIUM_REQUIRE=1 BASE_URL=http://localhost:13581 node tests/e2e/test-map-nodes-pagination-e2e.js 2>&1 | tee -a e2e-output.txt
|
||||
BASE_URL=http://localhost:13581 node tests/e2e/test-observer-iata-1188-e2e.js 2>&1 | tee -a e2e-output.txt
|
||||
BASE_URL=http://localhost:13581 node tests/e2e/test-issue-1639-observers-sort-e2e.js 2>&1 | tee -a e2e-output.txt
|
||||
CHROMIUM_REQUIRE=1 BASE_URL=http://localhost:13581 node tests/e2e/test-issue-1758-ng-filter-rerenders-e2e.js 2>&1 | tee -a e2e-output.txt
|
||||
CHROMIUM_REQUIRE=1 BASE_URL=http://localhost:13581 node tests/e2e/test-nav-fluid-1055-e2e.js 2>&1 | tee -a e2e-output.txt
|
||||
CHROMIUM_REQUIRE=1 BASE_URL=http://localhost:13581 node tests/e2e/test-nav-priority-1102-e2e.js 2>&1 | tee -a e2e-output.txt
|
||||
CHROMIUM_REQUIRE=1 BASE_URL=http://localhost:13581 node tests/e2e/test-nav-priority-1311-e2e.js 2>&1 | tee -a e2e-output.txt
|
||||
CHROMIUM_REQUIRE=1 BASE_URL=http://localhost:13581 node tests/e2e/test-nav-priority-1391-e2e.js 2>&1 | tee -a e2e-output.txt
|
||||
CHROMIUM_REQUIRE=1 BASE_URL=http://localhost:13581 node tests/e2e/test-issue-1413-nav-overlap-e2e.js 2>&1 | tee -a e2e-output.txt
|
||||
CHROMIUM_REQUIRE=1 BASE_URL=http://localhost:13581 node tests/e2e/test-issue-1400-nav-vertical-clip.js 2>&1 | tee -a e2e-output.txt
|
||||
CHROMIUM_REQUIRE=1 BASE_URL=http://localhost:13581 node tests/e2e/test-nav-more-floor-1139-e2e.js 2>&1 | tee -a e2e-output.txt
|
||||
CHROMIUM_REQUIRE=1 BASE_URL=http://localhost:13581 node tests/e2e/test-bottom-nav-1061-e2e.js 2>&1 | tee -a e2e-output.txt
|
||||
CHROMIUM_REQUIRE=1 BASE_URL=http://localhost:13581 node tests/e2e/test-gestures-1062-e2e.js 2>&1 | tee -a e2e-output.txt
|
||||
CHROMIUM_REQUIRE=1 BASE_URL=http://localhost:13581 node tests/e2e/test-gestures-1185-scroll-discriminator-e2e.js 2>&1 | tee -a e2e-output.txt
|
||||
CHROMIUM_REQUIRE=1 BASE_URL=http://localhost:13581 node tests/e2e/test-gesture-hints-1065-e2e.js 2>&1 | tee -a e2e-output.txt
|
||||
CHROMIUM_REQUIRE=1 BASE_URL=http://localhost:13581 node tests/e2e/test-touch-gestures-coverage-e2e.js 2>&1 | tee -a e2e-output.txt
|
||||
BASE_URL=http://localhost:13581 node tests/e2e/test-channel-fluid-e2e.js 2>&1 | tee -a e2e-output.txt
|
||||
BASE_URL=http://localhost:13581 node tests/e2e/test-table-fluid-e2e.js 2>&1 | tee -a e2e-output.txt
|
||||
BASE_URL=http://localhost:13581 node tests/e2e/test-charts-fluid-1058-e2e.js 2>&1 | tee -a e2e-output.txt
|
||||
BASE_URL=http://localhost:13581 node tests/e2e/test-slideover-1056-e2e.js 2>&1 | tee -a e2e-output.txt
|
||||
BASE_URL=http://localhost:13581 node tests/e2e/test-issue-1692-packets-init-parallel-e2e.js 2>&1 | tee -a e2e-output.txt
|
||||
BASE_URL=http://localhost:13581 node tests/e2e/test-slideover-1168-munger-e2e.js 2>&1 | tee -a e2e-output.txt
|
||||
BASE_URL=http://localhost:13581 node tests/e2e/test-logo-pulse-1173-e2e.js 2>&1 | tee -a e2e-output.txt
|
||||
BASE_URL=http://localhost:13581 node tests/e2e/test-issue-1122-packets-filter-ux-e2e.js 2>&1 | tee -a e2e-output.txt
|
||||
BASE_URL=http://localhost:13581 node tests/e2e/test-issue-1128-packets-layout-e2e.js 2>&1 | tee -a e2e-output.txt
|
||||
BASE_URL=http://localhost:13581 node tests/e2e/test-issue-1128-multi-viewport-e2e.js 2>&1 | tee -a e2e-output.txt
|
||||
BASE_URL=http://localhost:13581 node tests/e2e/test-issue-1136-live-region-e2e.js 2>&1 | tee -a e2e-output.txt
|
||||
BASE_URL=http://localhost:13581 node tests/e2e/test-live-multibyte-only-e2e.js 2>&1 | tee -a e2e-output.txt
|
||||
BASE_URL=http://localhost:13581 node tests/e2e/test-issue-1150-404-state-e2e.js 2>&1 | tee -a e2e-output.txt
|
||||
BASE_URL=http://localhost:13581 node tests/e2e/test-issue-1146-path-link-contrast-e2e.js 2>&1 | tee -a e2e-output.txt
|
||||
CHROMIUM_REQUIRE=1 node tests/e2e/test-issue-1705-subpath-contrast-e2e.js 2>&1 | tee -a e2e-output.txt
|
||||
BASE_URL=http://localhost:13581 node tests/e2e/test-issue-1147-section-order-e2e.js 2>&1 | tee -a e2e-output.txt
|
||||
BASE_URL=http://localhost:13581 node tests/e2e/test-issue-1151-orphan-separators-e2e.js 2>&1 | tee -a e2e-output.txt
|
||||
BASE_URL=http://localhost:13581 node tests/e2e/test-issue-1486-collapse-reopens-detail-e2e.js 2>&1 | tee -a e2e-output.txt
|
||||
CHROMIUM_REQUIRE=1 BASE_URL=http://localhost:13581 node tests/e2e/test-logo-rebrand-e2e.js 2>&1 | tee -a e2e-output.txt
|
||||
CHROMIUM_REQUIRE=1 BASE_URL=http://localhost:13581 node tests/e2e/test-logo-theme-e2e.js 2>&1 | tee -a e2e-output.txt
|
||||
CHROMIUM_REQUIRE=1 BASE_URL=http://localhost:13581 node tests/e2e/test-logo-default-sage-teal-e2e.js 2>&1 | tee -a e2e-output.txt
|
||||
CHROMIUM_REQUIRE=1 BASE_URL=http://localhost:13581 node tests/e2e/test-issue-1109-hamburger-dropdown-visible-e2e.js 2>&1 | tee -a e2e-output.txt
|
||||
CHROMIUM_REQUIRE=1 BASE_URL=http://localhost:13581 node tests/e2e/test-live-layout-1178-1179-e2e.js 2>&1 | tee -a e2e-output.txt
|
||||
CHROMIUM_REQUIRE=1 BASE_URL=http://localhost:13581 node tests/e2e/test-issue-1205-live-controls-anchor-e2e.js 2>&1 | tee -a e2e-output.txt
|
||||
CHROMIUM_REQUIRE=1 BASE_URL=http://localhost:13581 node tests/e2e/test-live-mql-leak-1180-e2e.js 2>&1 | tee -a e2e-output.txt
|
||||
CHROMIUM_REQUIRE=1 BASE_URL=http://localhost:13581 node tests/e2e/test-issue-1204-live-panel-structure-e2e.js 2>&1 | tee -a e2e-output.txt
|
||||
CHROMIUM_REQUIRE=1 BASE_URL=http://localhost:13581 node tests/e2e/test-issue-1234-live-chrome-pass2-e2e.js 2>&1 | tee -a e2e-output.txt
|
||||
CHROMIUM_REQUIRE=1 BASE_URL=http://localhost:13581 node tests/e2e/test-issue-1206-vcr-overlap-e2e.js 2>&1 | tee -a e2e-output.txt
|
||||
CHROMIUM_REQUIRE=1 BASE_URL=http://localhost:13581 node tests/e2e/test-issue-1244-live-vcr-row-hints-e2e.js 2>&1 | tee -a e2e-output.txt
|
||||
CHROMIUM_REQUIRE=1 BASE_URL=http://localhost:13581 node tests/e2e/test-issue-1510-live-nav-pin-e2e.js 2>&1 | tee -a e2e-output.txt
|
||||
CHROMIUM_REQUIRE=1 BASE_URL=http://localhost:13581 node tests/e2e/test-live-fullscreen-1572-e2e.js 2>&1 | tee -a e2e-output.txt
|
||||
CHROMIUM_REQUIRE=1 BASE_URL=http://localhost:13581 node tests/e2e/test-issue-1599-replay-freeze-e2e.js 2>&1 | tee -a e2e-output.txt
|
||||
CHROMIUM_REQUIRE=1 BASE_URL=http://localhost:13581 node tests/e2e/test-issue-1648-m1-icons-e2e.js 2>&1 | tee -a e2e-output.txt
|
||||
CHROMIUM_REQUIRE=1 BASE_URL=http://localhost:13581 node tests/e2e/test-issue-1648-m2-icons-e2e.js 2>&1 | tee -a e2e-output.txt
|
||||
CHROMIUM_REQUIRE=1 BASE_URL=http://localhost:13581 node tests/e2e/test-issue-1648-m3-icons-e2e.js 2>&1 | tee -a e2e-output.txt
|
||||
CHROMIUM_REQUIRE=1 BASE_URL=http://localhost:13581 node tests/e2e/test-issue-1648-m4-icons-e2e.js 2>&1 | tee -a e2e-output.txt
|
||||
CHROMIUM_REQUIRE=1 BASE_URL=http://localhost:13581 node tests/e2e/test-issue-1657-analytics-channels-group-sprites-e2e.js 2>&1 | tee -a e2e-output.txt
|
||||
BASE_URL=http://localhost:13581 node tests/e2e/test-issue-1224-channels-mobile-ux-e2e.js 2>&1 | tee -a e2e-output.txt
|
||||
BASE_URL=http://localhost:13581 node tests/e2e/test-issue-1367-channels-chat-app-e2e.js 2>&1 | tee -a e2e-output.txt
|
||||
BASE_URL=http://localhost:13581 node tests/e2e/test-issue-1236-map-mobile-e2e.js 2>&1 | tee -a e2e-output.txt
|
||||
BASE_URL=http://localhost:13581 node tests/e2e/test-issue-1329-map-controls-accordion-e2e.js 2>&1 | tee -a e2e-output.txt
|
||||
BASE_URL=http://localhost:13581 node tests/e2e/test-issue-1273-qr-overlay-height-e2e.js 2>&1 | tee -a e2e-output.txt
|
||||
BASE_URL=http://localhost:13581 node tests/e2e/test-issue-1281-location-row-e2e.js 2>&1 | tee -a e2e-output.txt
|
||||
BASE_URL=http://localhost:13581 node tests/e2e/test-issue-1279-legend-p2-e2e.js 2>&1 | tee -a e2e-output.txt
|
||||
BASE_URL=http://localhost:13581 node tests/e2e/test-issue-1799-label-vocab-e2e.js 2>&1 | tee -a e2e-output.txt
|
||||
CHROMIUM_REQUIRE=1 BASE_URL=http://localhost:13581 node tests/e2e/test-home-coverage-e2e.js 2>&1 | tee -a e2e-output.txt
|
||||
CHROMIUM_REQUIRE=1 BASE_URL=http://localhost:13581 node tests/e2e/test-path-inspector-coverage-e2e.js 2>&1 | tee -a e2e-output.txt
|
||||
CHROMIUM_REQUIRE=1 BASE_URL=http://localhost:13581 node tests/e2e/test-issue-1206-resize-observer-leak-e2e.js 2>&1 | tee -a e2e-output.txt
|
||||
CHROMIUM_REQUIRE=1 BASE_URL=http://localhost:13581 node tests/e2e/test-nav-drawer-1064-e2e.js 2>&1 | tee -a e2e-output.txt
|
||||
CHROMIUM_REQUIRE=1 BASE_URL=http://localhost:13581 node tests/e2e/test-audio-live-1297-e2e.js 2>&1 | tee -a e2e-output.txt
|
||||
CHROMIUM_REQUIRE=1 BASE_URL=http://localhost:13581 node tests/e2e/test-audio-lab-1297-e2e.js 2>&1 | tee -a e2e-output.txt
|
||||
BASE_URL=http://localhost:13581 node tests/e2e/test-channel-decrypt-e2e.js 2>&1 | tee -a e2e-output.txt
|
||||
BASE_URL=http://localhost:13581 node tests/e2e/test-channel-qr-e2e.js 2>&1 | tee -a e2e-output.txt
|
||||
BASE_URL=http://localhost:13581 node tests/e2e/test-channel-color-picker-e2e.js 2>&1 | tee -a e2e-output.txt
|
||||
BASE_URL=http://localhost:13581 node tests/e2e/test-customize-theme-e2e.js 2>&1 | tee -a e2e-output.txt
|
||||
BASE_URL=http://localhost:13581 node tests/e2e/test-customize-branding-e2e.js 2>&1 | tee -a e2e-output.txt
|
||||
BASE_URL=http://localhost:13581 node tests/e2e/test-customize-display-e2e.js 2>&1 | tee -a e2e-output.txt
|
||||
BASE_URL=http://localhost:13581 node tests/e2e/test-customize-export-e2e.js 2>&1 | tee -a e2e-output.txt
|
||||
CHROMIUM_REQUIRE=1 BASE_URL=http://localhost:13581 node tests/e2e/test-drag-manager-e2e.js 2>&1 | tee -a e2e-output.txt
|
||||
CHROMIUM_REQUIRE=1 BASE_URL=http://localhost:13581 node tests/e2e/test-issue-1567-corner-clears-drag-e2e.js 2>&1 | tee -a e2e-output.txt
|
||||
CHROMIUM_REQUIRE=1 BASE_URL=http://localhost:13581 node tests/e2e/test-issue-1306-collisions-terminology-e2e.js 2>&1 | tee -a e2e-output.txt
|
||||
CHROMIUM_REQUIRE=1 BASE_URL=http://localhost:13581 node tests/e2e/test-issue-1374-route-map-a11y-e2e.js 2>&1 | tee -a e2e-output.txt
|
||||
CHROMIUM_REQUIRE=1 BASE_URL=http://localhost:13581 node tests/e2e/test-channels-list-render-e2e.js 2>&1 | tee -a e2e-output.txt
|
||||
CHROMIUM_REQUIRE=1 BASE_URL=http://localhost:13581 node tests/e2e/test-channels-selection-flow-e2e.js 2>&1 | tee -a e2e-output.txt
|
||||
CHROMIUM_REQUIRE=1 BASE_URL=http://localhost:13581 node tests/e2e/test-channels-add-modal-e2e.js 2>&1 | tee -a e2e-output.txt
|
||||
CHROMIUM_REQUIRE=1 BASE_URL=http://localhost:13581 node tests/e2e/test-channels-share-color-e2e.js 2>&1 | tee -a e2e-output.txt
|
||||
CHROMIUM_REQUIRE=1 BASE_URL=http://localhost:13581 node tests/e2e/test-channels-ws-batch-e2e.js 2>&1 | tee -a e2e-output.txt
|
||||
CHROMIUM_REQUIRE=1 BASE_URL=http://localhost:13581 node tests/e2e/test-channels-ws-race-1498-e2e.js 2>&1 | tee -a e2e-output.txt
|
||||
CHROMIUM_REQUIRE=1 BASE_URL=http://localhost:13581 node tests/e2e/test-issue-1487-byop-modal-layout-e2e.js 2>&1 | tee -a e2e-output.txt
|
||||
CHROMIUM_REQUIRE=1 BASE_URL=http://localhost:13581 node tests/e2e/test-issue-1630-reach-mobile-e2e.js 2>&1 | tee -a e2e-output.txt
|
||||
CHROMIUM_REQUIRE=1 BASE_URL=http://localhost:13581 node tests/e2e/test-node-reach-coverage-e2e.js 2>&1 | tee -a e2e-output.txt
|
||||
CHROMIUM_REQUIRE=1 BASE_URL=http://localhost:13581 node tests/e2e/test-issue-1640-compare-discovery-e2e.js 2>&1 | tee -a e2e-output.txt
|
||||
CHROMIUM_REQUIRE=1 node tests/e2e/test-neighbor-map-btn-clip-e2e.js 2>&1 | tee -a e2e-output.txt
|
||||
|
||||
# #1616: slide-over focus-restore flake-gate. Runs the slide-over
|
||||
# E2E 20 consecutive times against the SAME backend instance so
|
||||
@@ -594,7 +594,7 @@ jobs:
|
||||
set -e
|
||||
for i in $(seq 1 3); do
|
||||
echo "--- slide-over E2E run $i/20 ---"
|
||||
BASE_URL=http://localhost:13581 node test-slideover-1056-e2e.js 2>&1 | tee -a slideover-repeat-output.txt
|
||||
BASE_URL=http://localhost:13581 node tests/e2e/test-slideover-1056-e2e.js 2>&1 | tee -a slideover-repeat-output.txt
|
||||
done
|
||||
echo "3 passed"
|
||||
|
||||
|
||||
@@ -10,16 +10,15 @@ Unit tests, Playwright E2E, coverage gates, and quality assurance for CoreScope.
|
||||
|
||||
## Responsibilities
|
||||
|
||||
- Unit tests: test-packet-filter.js, test-aging.js, test-decoder.js, test-decoder-spec.js, test-server-helpers.js, test-server-routes.js, test-packet-store.js, test-db.js, test-frontend-helpers.js, test-regional-filter.js, test-regional-integration.js, test-live-dedup.js
|
||||
- Playwright E2E: test-e2e-playwright.js (8 browser tests, default localhost:3000)
|
||||
- E2E tools: tools/e2e-test.js, tools/frontend-test.js
|
||||
- Unit tests: `tests/unit/`, all listed in `test-all.sh` (e.g. test-packet-filter.js, test-aging.js, test-frontend-helpers.js); Go tests under `cmd/`
|
||||
- Playwright E2E: `tests/e2e/`, classified in `scripts/non-unit-tests.json` (e.g. test-e2e-playwright.js, default localhost:3000)
|
||||
- Coverage: Backend 85%+ (c8), Frontend 42%+ (Istanbul + nyc). Both only go up.
|
||||
- Review authority: May approve or reject work from Hicks and Newt based on test results
|
||||
|
||||
## Boundaries
|
||||
|
||||
- Test the REAL code — import actual modules, don't copy-paste functions into test files
|
||||
- Use vm.createContext for frontend helpers (see test-frontend-helpers.js pattern)
|
||||
- Use vm.createContext for frontend helpers (see tests/unit/test-frontend-helpers.js pattern)
|
||||
- Playwright tests default to localhost:3000 — NEVER run against prod
|
||||
- Every bug fix gets a regression test
|
||||
- Every new feature must add tests — test count only goes up
|
||||
@@ -37,10 +36,9 @@ Unit tests, Playwright E2E, coverage gates, and quality assurance for CoreScope.
|
||||
npm test # all backend tests + coverage summary
|
||||
npm run test:unit # fast: unit tests only
|
||||
npm run test:coverage # all tests + HTML coverage report
|
||||
node test-packet-filter.js # filter engine
|
||||
node test-decoder.js # packet decoder
|
||||
node test-server-routes.js # API routes via supertest
|
||||
node test-e2e-playwright.js # 8 Playwright browser tests
|
||||
sh test-all.sh # every suite in tests/unit
|
||||
node tests/unit/test-packet-filter.js # filter engine
|
||||
node tests/e2e/test-e2e-playwright.js # Playwright browser tests
|
||||
```
|
||||
|
||||
## Model
|
||||
|
||||
@@ -24,7 +24,7 @@ Vanilla JS UI, Leaflet maps, live visualization, theming, and all public/ module
|
||||
- Use shared helpers from roles.js (ROLE_COLORS, TYPE_COLORS, getNodeStatus, getHealthThresholds)
|
||||
- Prefer `n.last_heard || n.last_seen` for display and status
|
||||
- No per-packet API calls from frontend — fetch bulk, filter client-side
|
||||
- Run `node test-packet-filter.js` and `node test-frontend-helpers.js` after filter/helper changes
|
||||
- Run `node tests/unit/test-packet-filter.js` and `node tests/unit/test-frontend-helpers.js` after filter/helper changes
|
||||
- Always bump cache busters in the SAME commit as code changes
|
||||
|
||||
## Key Files
|
||||
|
||||
@@ -90,7 +90,7 @@ Every change must consider performance impact BEFORE implementation. This codeba
|
||||
No proof = no merge.
|
||||
|
||||
### 1. No commit without tests
|
||||
Every change that touches logic MUST have tests. For Go backend: `cd cmd/server && go test ./...` and `cd cmd/ingestor && go test ./...`, or `make test` for all 14 modules. For frontend: `node test-packet-filter.js && node test-aging.js && node test-frontend-helpers.js`. If you add new logic, add tests. No exceptions.
|
||||
Every change that touches logic MUST have tests. For Go backend: `cd cmd/server && go test ./...` and `cd cmd/ingestor && go test ./...`, or `make test` for all 14 modules. For frontend: `node tests/unit/test-packet-filter.js && node tests/unit/test-aging.js && node tests/unit/test-frontend-helpers.js`. If you add new logic, add tests. No exceptions.
|
||||
|
||||
The SQLite driver (`github.com/mattn/go-sqlite3`) is cgo. **`CGO_ENABLED=0` still *builds*** — that is the trap. It links a stub, and the binary dies on the first query with `go-sqlite3 requires cgo to work. This is a stub`, so a green build proves nothing. A plain `GOOS=linux go build` likewise cannot cross-compile it. Use `make build` / `make crossbuild` — the latter needs [`zig`](https://ziglang.org/download/) as the cross C compiler and produces static musl binaries. Never re-add `CGO_ENABLED=0`.
|
||||
|
||||
@@ -202,7 +202,7 @@ All colors MUST use CSS variables. Never hardcode `#hex` values outside of `:roo
|
||||
### Packet Filter (packet-filter.js)
|
||||
Standalone module. No dependencies on app globals (copies what it needs). Testable in Node.js:
|
||||
```bash
|
||||
node test-packet-filter.js
|
||||
node tests/unit/test-packet-filter.js
|
||||
```
|
||||
Uses firmware-standard type names (GRP_TXT, TXT_MSG, REQ) with aliases for convenience.
|
||||
|
||||
@@ -219,21 +219,13 @@ npm run test:full-coverage # backend + instrumented frontend coverage via Playw
|
||||
### Test Files
|
||||
```bash
|
||||
# Backend (deterministic, run before every push)
|
||||
node test-packet-filter.js # filter engine
|
||||
node test-aging.js # node aging system
|
||||
node test-regional-filter.js # regional observer filtering
|
||||
node test-decoder.js # packet decoder
|
||||
node test-decoder-spec.js # spec-driven + golden fixture tests
|
||||
node test-server-helpers.js # extracted server functions
|
||||
node test-server-routes.js # API route tests via supertest
|
||||
node test-packet-store.js # in-memory packet store
|
||||
node test-db.js # SQLite operations
|
||||
node test-frontend-helpers.js # frontend logic (via vm.createContext)
|
||||
node tools/e2e-test.js # E2E: temp server + synthetic packets
|
||||
node tools/frontend-test.js # frontend smoke: HTML, JS refs, API shapes
|
||||
sh test-all.sh # every suite in tests/unit
|
||||
node tests/unit/test-packet-filter.js # filter engine
|
||||
node tests/unit/test-aging.js # node aging system
|
||||
node tests/unit/test-frontend-helpers.js # frontend logic (via vm.createContext)
|
||||
|
||||
# Frontend E2E (requires running server or Playwright)
|
||||
node test-e2e-playwright.js # 8 Playwright browser tests (default: localhost:3000)
|
||||
node tests/e2e/test-e2e-playwright.js # Playwright browser tests (default: localhost:3000)
|
||||
```
|
||||
|
||||
### Rules
|
||||
@@ -248,14 +240,14 @@ node test-e2e-playwright.js # 8 Playwright browser tests (default: localho
|
||||
2. Write unit tests for the logic
|
||||
3. Write/update Playwright tests if it's a UI change
|
||||
4. Run `npm test` — all tests must pass
|
||||
5. Run `node test-e2e-playwright.js` against a local server — E2E must pass
|
||||
5. Run `node tests/e2e/test-e2e-playwright.js` against a local server — E2E must pass
|
||||
6. THEN push to master
|
||||
|
||||
### Testing infrastructure
|
||||
- **Backend coverage**: c8 tracks server-side code in-process
|
||||
- **Frontend coverage**: Istanbul instruments `public/*.js` → Playwright exercises them → `window.__coverage__` extracted → nyc reports. Instrumented files are generated fresh each CI run, never checked in.
|
||||
- **CI pipeline**: backend tests + coverage → instrument frontend → start local server → Playwright E2E + coverage collection → badges update → deploy (only if all pass)
|
||||
- **Playwright tests default to localhost:3000** — NEVER run against prod. CI sets `BASE_URL=http://localhost:13581`. Running locally: start your server, then `node test-e2e-playwright.js`
|
||||
- **Playwright tests default to localhost:3000** — NEVER run against prod. CI sets `BASE_URL=http://localhost:13581`. Running locally: start your server, then `node tests/e2e/test-e2e-playwright.js`
|
||||
- **ARM machines**: Basic Playwright tests work with system chromium (`CHROMIUM_PATH=/usr/bin/chromium-browser`). Heavy coverage collection scripts may crash — use CI for those.
|
||||
|
||||
Tests that need live mesh data can use `https://analyzer.00id.net` — all API endpoints are public, no auth required.
|
||||
@@ -290,7 +282,7 @@ If the same logic exists in two places, it MUST be extracted into a shared funct
|
||||
### Testability
|
||||
- **Write functions that are easy to test.** Pure functions (input → output, no side effects) are ideal. If a function reads from the DOM, the DB, and localStorage, it's untestable without mocking everything.
|
||||
- **Dependency injection enables testing.** Pass the node list, the map reference, the API function as parameters. Tests can substitute fakes.
|
||||
- **Test the real code, not copies.** Don't paste a function into a test file and test the copy. Import/require the actual module. If the module isn't importable (IIFE, browser-only), refactor it so it is — or use `vm.createContext` like `test-frontend-helpers.js` does.
|
||||
- **Test the real code, not copies.** Don't paste a function into a test file and test the copy. Import/require the actual module. If the module isn't importable (IIFE, browser-only), refactor it so it is — or use `vm.createContext` like `tests/unit/test-frontend-helpers.js` does.
|
||||
- **Every bug fix gets a regression test.** If it broke once, it'll break again. The test proves it stays fixed.
|
||||
|
||||
### Type Safety (without TypeScript)
|
||||
@@ -372,7 +364,7 @@ One logical change per commit. Each commit is deployable. Each commit has its te
|
||||
| Subagent timed out mid-work | 4 | Give clear scope, don't try to run slow pipelines locally |
|
||||
|
||||
## File Naming
|
||||
- Tests: `test-{feature}.js` in repo root
|
||||
- Tests: `test-{feature}.js` in `tests/unit/` (standalone, listed in `test-all.sh`) or `tests/e2e/` (browser, listed in `scripts/non-unit-tests.json`) — never in repo root
|
||||
- No build step, no transpilation — write ES2020 for server, ES5/6 for frontend (broad browser support)
|
||||
|
||||
### Deep Linking
|
||||
|
||||
@@ -228,7 +228,8 @@ corescope/
|
||||
│ └── entrypoint-go.sh # Container entrypoint
|
||||
├── Dockerfile # Multi-stage Go build + Alpine runtime
|
||||
├── config.example.json # Example configuration
|
||||
├── test-*.js # Node.js test suite (frontend + legacy)
|
||||
├── tests/ # Node.js test suite: unit/ (test-all.sh) and e2e/ (Playwright)
|
||||
├── test-all.sh # Runs every suite in tests/unit
|
||||
└── tools/ # Generators, E2E tests, utilities
|
||||
```
|
||||
|
||||
@@ -266,7 +267,7 @@ make test
|
||||
npm test
|
||||
|
||||
# Playwright E2E (requires running server on localhost:3000)
|
||||
node test-e2e-playwright.js
|
||||
node tests/e2e/test-e2e-playwright.js
|
||||
```
|
||||
|
||||
### Generate Test Data
|
||||
|
||||
@@ -55,7 +55,7 @@ If the fix touches ANY frontend file (`public/*.js`, `public/*.css`, or HTML) AN
|
||||
as a user-visible UX behavior (click/hover/navigation/rendering), the PR MUST include a
|
||||
browser-level assertion that would have caught the original bug — NOT only unit tests.
|
||||
|
||||
- Look for an existing E2E harness first (e.g. `test-e2e-playwright.js`, `e2e/`, `tests/e2e/`,
|
||||
- Look for an existing E2E harness first (e.g. `tests/e2e/test-e2e-playwright.js`, `e2e/`, `tests/e2e/`,
|
||||
`playwright.config.*`, or whatever the repo uses). Add the assertion there.
|
||||
- If no E2E harness exists, ADD a small one rather than skip. A 30-line Playwright fixture
|
||||
hitting a public staging URL is acceptable.
|
||||
|
||||
@@ -13,13 +13,17 @@ Windows, use Git Bash and ensure `python3` resolves to Python 3 rather than a
|
||||
Microsoft Store alias; set `PYTHONUTF8=1` for the gate's Unicode output.
|
||||
No server or browser is started by this runner.
|
||||
|
||||
When adding a root `test-*.js` file:
|
||||
Tests live in `tests/unit/` (standalone Node, run by `test-all.sh`) and
|
||||
`tests/e2e/` (needs a browser, a server or extra tooling). They run from the
|
||||
repo root, and refer to it as `REPO_ROOT`. When adding a `test-*.js` file:
|
||||
|
||||
1. Add its `node test-name.js` command to `test-all.sh` if it runs standalone.
|
||||
2. Otherwise add it to `scripts/non-unit-tests.json`, with a prerequisite or
|
||||
1. If it runs standalone, put it in `tests/unit/` and add its
|
||||
`node tests/unit/test-name.js` command to `test-all.sh`.
|
||||
2. Otherwise put it in `tests/e2e/` and add it to `scripts/non-unit-tests.json`, with a prerequisite or
|
||||
reason explaining why it belongs outside the unit runner. Browser suites
|
||||
still need explicit selection in the E2E workflow to become CI gates.
|
||||
3. Run `node test-test-inventory.js`. The guard rejects unclassified files,
|
||||
3. Run `node tests/unit/test-test-inventory.js`. The guard rejects `test-*.js`
|
||||
files in the repo root, unclassified files,
|
||||
duplicate assignments, removed files left in a list, undocumented groups,
|
||||
and local/CI entry points that bypass the unit runner.
|
||||
|
||||
|
||||
+113
-113
@@ -2,129 +2,129 @@
|
||||
"browser": {
|
||||
"reason": "Requires Playwright and Chromium; most suites also require a running local fixture server via BASE_URL. Existing E2E workflow steps retain their separate setup and selection. Never point these tests at production.",
|
||||
"files": [
|
||||
"test-1110-live-filter.js",
|
||||
"test-a11y-axe-1668.js",
|
||||
"test-analytics-fluid-charts.js",
|
||||
"test-audio-lab-1297-e2e.js",
|
||||
"test-audio-live-1297-e2e.js",
|
||||
"test-bottom-nav-1061-e2e.js",
|
||||
"test-channel-color-picker-e2e.js",
|
||||
"test-channel-decrypt-e2e.js",
|
||||
"test-channel-fluid-e2e.js",
|
||||
"test-channel-issue-1087-e2e.js",
|
||||
"test-channel-issue-1111-e2e.js",
|
||||
"test-channel-modal-e2e.js",
|
||||
"test-channel-qr-e2e.js",
|
||||
"test-channels-add-modal-e2e.js",
|
||||
"test-channels-list-render-e2e.js",
|
||||
"test-channels-selection-flow-e2e.js",
|
||||
"test-channels-share-color-e2e.js",
|
||||
"test-channels-ws-batch-e2e.js",
|
||||
"test-channels-ws-race-1498-e2e.js",
|
||||
"test-charts-fluid-1058-e2e.js",
|
||||
"test-customize-branding-e2e.js",
|
||||
"test-customize-display-e2e.js",
|
||||
"test-customize-export-e2e.js",
|
||||
"test-customize-theme-e2e.js",
|
||||
"test-drag-manager-e2e.js",
|
||||
"test-e2e-1267-mobile-vcr.js",
|
||||
"test-e2e-playwright.js",
|
||||
"test-filter-ux-e2e.js",
|
||||
"test-gesture-hints-1065-e2e.js",
|
||||
"test-gestures-1062-e2e.js",
|
||||
"test-gestures-1185-scroll-discriminator-e2e.js",
|
||||
"test-home-coverage-e2e.js",
|
||||
"test-issue-1109-hamburger-dropdown-visible-e2e.js",
|
||||
"test-issue-1122-packets-filter-ux-e2e.js",
|
||||
"test-issue-1128-multi-viewport-e2e.js",
|
||||
"test-issue-1128-packets-layout-e2e.js",
|
||||
"test-issue-1136-live-region-e2e.js",
|
||||
"test-issue-1146-path-link-contrast-e2e.js",
|
||||
"test-issue-1147-section-order-e2e.js",
|
||||
"test-issue-1150-404-state-e2e.js",
|
||||
"test-issue-1151-orphan-separators-e2e.js",
|
||||
"test-issue-1204-live-panel-structure-e2e.js",
|
||||
"test-issue-1205-live-controls-anchor-e2e.js",
|
||||
"test-issue-1206-resize-observer-leak-e2e.js",
|
||||
"test-issue-1206-vcr-overlap-e2e.js",
|
||||
"test-issue-1224-channels-mobile-ux-e2e.js",
|
||||
"test-issue-1234-live-chrome-pass2-e2e.js",
|
||||
"test-issue-1236-map-mobile-e2e.js",
|
||||
"test-issue-1244-live-vcr-row-hints-e2e.js",
|
||||
"test-issue-1273-qr-overlay-height-e2e.js",
|
||||
"test-issue-1274-legend-coverage-e2e.js",
|
||||
"test-issue-1279-legend-p2-e2e.js",
|
||||
"test-issue-1281-location-row-e2e.js",
|
||||
"test-issue-1306-collisions-terminology-e2e.js",
|
||||
"test-issue-1329-map-controls-accordion-e2e.js",
|
||||
"test-issue-1367-channels-chat-app-e2e.js",
|
||||
"test-issue-1374-route-map-a11y-e2e.js",
|
||||
"test-issue-1400-nav-vertical-clip.js",
|
||||
"test-issue-1413-nav-overlap-e2e.js",
|
||||
"test-issue-1486-collapse-reopens-detail-e2e.js",
|
||||
"test-issue-1487-byop-modal-layout-e2e.js",
|
||||
"test-issue-1510-live-nav-pin-e2e.js",
|
||||
"test-issue-1567-corner-clears-drag-e2e.js",
|
||||
"test-issue-1599-replay-freeze-e2e.js",
|
||||
"test-issue-1630-reach-mobile-e2e.js",
|
||||
"test-issue-1639-observers-sort-e2e.js",
|
||||
"test-issue-1640-compare-discovery-e2e.js",
|
||||
"test-issue-1648-m1-icons-e2e.js",
|
||||
"test-issue-1648-m2-icons-e2e.js",
|
||||
"test-issue-1648-m3-icons-e2e.js",
|
||||
"test-issue-1648-m4-icons-e2e.js",
|
||||
"test-issue-1648-m5-icons-e2e.js",
|
||||
"test-issue-1657-analytics-channels-group-sprites-e2e.js",
|
||||
"test-issue-1692-packets-init-parallel-e2e.js",
|
||||
"test-issue-1705-subpath-contrast-e2e.js",
|
||||
"test-issue-1758-ng-filter-rerenders-e2e.js",
|
||||
"test-issue-1799-label-vocab-e2e.js",
|
||||
"test-live-dedup.js",
|
||||
"test-live-fullscreen-1572-e2e.js",
|
||||
"test-live-layout-1178-1179-e2e.js",
|
||||
"test-live-mql-leak-1180-e2e.js",
|
||||
"test-live-multibyte-only-e2e.js",
|
||||
"test-logo-default-sage-teal-e2e.js",
|
||||
"test-logo-pulse-1173-e2e.js",
|
||||
"test-logo-rebrand-e2e.js",
|
||||
"test-logo-theme-e2e.js",
|
||||
"test-map-modal-fluid-e2e.js",
|
||||
"test-map-nodes-pagination-e2e.js",
|
||||
"test-nav-drawer-1064-e2e.js",
|
||||
"test-nav-fluid-1055-e2e.js",
|
||||
"test-nav-more-floor-1139-e2e.js",
|
||||
"test-nav-priority-1102-e2e.js",
|
||||
"test-nav-priority-1311-e2e.js",
|
||||
"test-nav-priority-1391-e2e.js",
|
||||
"test-neighbor-map-btn-clip-e2e.js",
|
||||
"test-node-reach-coverage-e2e.js",
|
||||
"test-node-reach-e2e.js",
|
||||
"test-nodes-export-e2e.js",
|
||||
"test-observer-iata-1188-e2e.js",
|
||||
"test-packets-scope-column.js",
|
||||
"test-path-inspector-coverage-e2e.js",
|
||||
"test-rx-coverage-mobile-nav-e2e.js",
|
||||
"test-show-neighbors.js",
|
||||
"test-slideover-1056-e2e.js",
|
||||
"test-slideover-1168-munger-e2e.js",
|
||||
"test-table-fluid-e2e.js",
|
||||
"test-touch-gestures-coverage-e2e.js",
|
||||
"test-touch-targets.js"
|
||||
"tests/e2e/test-1110-live-filter.js",
|
||||
"tests/e2e/test-a11y-axe-1668.js",
|
||||
"tests/e2e/test-analytics-fluid-charts.js",
|
||||
"tests/e2e/test-audio-lab-1297-e2e.js",
|
||||
"tests/e2e/test-audio-live-1297-e2e.js",
|
||||
"tests/e2e/test-bottom-nav-1061-e2e.js",
|
||||
"tests/e2e/test-channel-color-picker-e2e.js",
|
||||
"tests/e2e/test-channel-decrypt-e2e.js",
|
||||
"tests/e2e/test-channel-fluid-e2e.js",
|
||||
"tests/e2e/test-channel-issue-1087-e2e.js",
|
||||
"tests/e2e/test-channel-issue-1111-e2e.js",
|
||||
"tests/e2e/test-channel-modal-e2e.js",
|
||||
"tests/e2e/test-channel-qr-e2e.js",
|
||||
"tests/e2e/test-channels-add-modal-e2e.js",
|
||||
"tests/e2e/test-channels-list-render-e2e.js",
|
||||
"tests/e2e/test-channels-selection-flow-e2e.js",
|
||||
"tests/e2e/test-channels-share-color-e2e.js",
|
||||
"tests/e2e/test-channels-ws-batch-e2e.js",
|
||||
"tests/e2e/test-channels-ws-race-1498-e2e.js",
|
||||
"tests/e2e/test-charts-fluid-1058-e2e.js",
|
||||
"tests/e2e/test-customize-branding-e2e.js",
|
||||
"tests/e2e/test-customize-display-e2e.js",
|
||||
"tests/e2e/test-customize-export-e2e.js",
|
||||
"tests/e2e/test-customize-theme-e2e.js",
|
||||
"tests/e2e/test-drag-manager-e2e.js",
|
||||
"tests/e2e/test-e2e-1267-mobile-vcr.js",
|
||||
"tests/e2e/test-e2e-playwright.js",
|
||||
"tests/e2e/test-filter-ux-e2e.js",
|
||||
"tests/e2e/test-gesture-hints-1065-e2e.js",
|
||||
"tests/e2e/test-gestures-1062-e2e.js",
|
||||
"tests/e2e/test-gestures-1185-scroll-discriminator-e2e.js",
|
||||
"tests/e2e/test-home-coverage-e2e.js",
|
||||
"tests/e2e/test-issue-1109-hamburger-dropdown-visible-e2e.js",
|
||||
"tests/e2e/test-issue-1122-packets-filter-ux-e2e.js",
|
||||
"tests/e2e/test-issue-1128-multi-viewport-e2e.js",
|
||||
"tests/e2e/test-issue-1128-packets-layout-e2e.js",
|
||||
"tests/e2e/test-issue-1136-live-region-e2e.js",
|
||||
"tests/e2e/test-issue-1146-path-link-contrast-e2e.js",
|
||||
"tests/e2e/test-issue-1147-section-order-e2e.js",
|
||||
"tests/e2e/test-issue-1150-404-state-e2e.js",
|
||||
"tests/e2e/test-issue-1151-orphan-separators-e2e.js",
|
||||
"tests/e2e/test-issue-1204-live-panel-structure-e2e.js",
|
||||
"tests/e2e/test-issue-1205-live-controls-anchor-e2e.js",
|
||||
"tests/e2e/test-issue-1206-resize-observer-leak-e2e.js",
|
||||
"tests/e2e/test-issue-1206-vcr-overlap-e2e.js",
|
||||
"tests/e2e/test-issue-1224-channels-mobile-ux-e2e.js",
|
||||
"tests/e2e/test-issue-1234-live-chrome-pass2-e2e.js",
|
||||
"tests/e2e/test-issue-1236-map-mobile-e2e.js",
|
||||
"tests/e2e/test-issue-1244-live-vcr-row-hints-e2e.js",
|
||||
"tests/e2e/test-issue-1273-qr-overlay-height-e2e.js",
|
||||
"tests/e2e/test-issue-1274-legend-coverage-e2e.js",
|
||||
"tests/e2e/test-issue-1279-legend-p2-e2e.js",
|
||||
"tests/e2e/test-issue-1281-location-row-e2e.js",
|
||||
"tests/e2e/test-issue-1306-collisions-terminology-e2e.js",
|
||||
"tests/e2e/test-issue-1329-map-controls-accordion-e2e.js",
|
||||
"tests/e2e/test-issue-1367-channels-chat-app-e2e.js",
|
||||
"tests/e2e/test-issue-1374-route-map-a11y-e2e.js",
|
||||
"tests/e2e/test-issue-1400-nav-vertical-clip.js",
|
||||
"tests/e2e/test-issue-1413-nav-overlap-e2e.js",
|
||||
"tests/e2e/test-issue-1486-collapse-reopens-detail-e2e.js",
|
||||
"tests/e2e/test-issue-1487-byop-modal-layout-e2e.js",
|
||||
"tests/e2e/test-issue-1510-live-nav-pin-e2e.js",
|
||||
"tests/e2e/test-issue-1567-corner-clears-drag-e2e.js",
|
||||
"tests/e2e/test-issue-1599-replay-freeze-e2e.js",
|
||||
"tests/e2e/test-issue-1630-reach-mobile-e2e.js",
|
||||
"tests/e2e/test-issue-1639-observers-sort-e2e.js",
|
||||
"tests/e2e/test-issue-1640-compare-discovery-e2e.js",
|
||||
"tests/e2e/test-issue-1648-m1-icons-e2e.js",
|
||||
"tests/e2e/test-issue-1648-m2-icons-e2e.js",
|
||||
"tests/e2e/test-issue-1648-m3-icons-e2e.js",
|
||||
"tests/e2e/test-issue-1648-m4-icons-e2e.js",
|
||||
"tests/e2e/test-issue-1648-m5-icons-e2e.js",
|
||||
"tests/e2e/test-issue-1657-analytics-channels-group-sprites-e2e.js",
|
||||
"tests/e2e/test-issue-1692-packets-init-parallel-e2e.js",
|
||||
"tests/e2e/test-issue-1705-subpath-contrast-e2e.js",
|
||||
"tests/e2e/test-issue-1758-ng-filter-rerenders-e2e.js",
|
||||
"tests/e2e/test-issue-1799-label-vocab-e2e.js",
|
||||
"tests/e2e/test-live-dedup.js",
|
||||
"tests/e2e/test-live-fullscreen-1572-e2e.js",
|
||||
"tests/e2e/test-live-layout-1178-1179-e2e.js",
|
||||
"tests/e2e/test-live-mql-leak-1180-e2e.js",
|
||||
"tests/e2e/test-live-multibyte-only-e2e.js",
|
||||
"tests/e2e/test-logo-default-sage-teal-e2e.js",
|
||||
"tests/e2e/test-logo-pulse-1173-e2e.js",
|
||||
"tests/e2e/test-logo-rebrand-e2e.js",
|
||||
"tests/e2e/test-logo-theme-e2e.js",
|
||||
"tests/e2e/test-map-modal-fluid-e2e.js",
|
||||
"tests/e2e/test-map-nodes-pagination-e2e.js",
|
||||
"tests/e2e/test-nav-drawer-1064-e2e.js",
|
||||
"tests/e2e/test-nav-fluid-1055-e2e.js",
|
||||
"tests/e2e/test-nav-more-floor-1139-e2e.js",
|
||||
"tests/e2e/test-nav-priority-1102-e2e.js",
|
||||
"tests/e2e/test-nav-priority-1311-e2e.js",
|
||||
"tests/e2e/test-nav-priority-1391-e2e.js",
|
||||
"tests/e2e/test-neighbor-map-btn-clip-e2e.js",
|
||||
"tests/e2e/test-node-reach-coverage-e2e.js",
|
||||
"tests/e2e/test-node-reach-e2e.js",
|
||||
"tests/e2e/test-nodes-export-e2e.js",
|
||||
"tests/e2e/test-observer-iata-1188-e2e.js",
|
||||
"tests/e2e/test-packets-scope-column.js",
|
||||
"tests/e2e/test-path-inspector-coverage-e2e.js",
|
||||
"tests/e2e/test-rx-coverage-mobile-nav-e2e.js",
|
||||
"tests/e2e/test-show-neighbors.js",
|
||||
"tests/e2e/test-slideover-1056-e2e.js",
|
||||
"tests/e2e/test-slideover-1168-munger-e2e.js",
|
||||
"tests/e2e/test-table-fluid-e2e.js",
|
||||
"tests/e2e/test-touch-gestures-coverage-e2e.js",
|
||||
"tests/e2e/test-touch-targets.js"
|
||||
]
|
||||
},
|
||||
"playwrightRunner": {
|
||||
"reason": "Requires the @playwright/test runner (not plain node), its configuration, Chromium, and a local server. @playwright/test is not currently declared in package.json; these suites are inventoried but not part of the standalone unit gate.",
|
||||
"files": [
|
||||
"test-issue-1522-trace-url-sync-e2e.js",
|
||||
"test-marker-outline-weight.js",
|
||||
"test-path-inspector-e2e.js",
|
||||
"test-pr-1490-live-map-gpu-animations-e2e.js"
|
||||
"tests/e2e/test-issue-1522-trace-url-sync-e2e.js",
|
||||
"tests/e2e/test-marker-outline-weight.js",
|
||||
"tests/e2e/test-path-inspector-e2e.js",
|
||||
"tests/e2e/test-pr-1490-live-map-gpu-animations-e2e.js"
|
||||
]
|
||||
},
|
||||
"domIntegration": {
|
||||
"reason": "Requires jsdom, which is not currently declared in package.json. This DOM integration suite is inventoried separately; no new dependency is installed by the unit gate.",
|
||||
"files": [
|
||||
"test-table-sort.js"
|
||||
"tests/e2e/test-table-sort.js"
|
||||
]
|
||||
}
|
||||
}
|
||||
|
||||
+179
-178
@@ -1,185 +1,186 @@
|
||||
#!/bin/sh
|
||||
# Authoritative standalone frontend test list for local runs and CI.
|
||||
# Every root test is listed here or classified in scripts/non-unit-tests.json.
|
||||
# Every suite in tests/unit is listed here; every suite in tests/e2e is classified
|
||||
# in scripts/non-unit-tests.json.
|
||||
set -e
|
||||
cd "$(dirname "$0")"
|
||||
|
||||
node test-test-inventory.js
|
||||
node test-1108-region-hide-nodes.js
|
||||
node test-1659-analytics-warmup.js
|
||||
node test-a11y-1705-subpath-hop-prefix-e2e.js
|
||||
node test-a11y-1715-dark-role-swatches.js
|
||||
node test-a11y-1716-rf-range-btn-active.js
|
||||
node test-a11y-1719-contrast-root-causes-e2e.js
|
||||
node test-a11y-axe-1668-selftest.js
|
||||
node test-a11y-axe-routes-coverage.js
|
||||
node test-aging.js
|
||||
node test-analytics-channels-integration.js
|
||||
node test-anl1-tooltip-render.js
|
||||
node test-area-filter.js
|
||||
node test-channel-color-picker.js
|
||||
node test-channel-colors.js
|
||||
node test-channel-decrypt-ecb.js
|
||||
node test-channel-decrypt-insecure-context.js
|
||||
node test-channel-decrypt-m345.js
|
||||
node test-channel-fluid-layout.js
|
||||
node test-channel-issue-1087.js
|
||||
node test-channel-issue-1101.js
|
||||
node test-channel-live-decrypt-userprefix.js
|
||||
node test-channel-live-decrypt.js
|
||||
node test-channel-modal-ux.js
|
||||
node test-channel-psk-ux.js
|
||||
node test-channel-qr-wiring.js
|
||||
node test-channel-qr.js
|
||||
node test-channel-sidebar-layout.js
|
||||
node test-channel-ux-followup.js
|
||||
node test-channel-ux-round2.js
|
||||
node test-channels-merge-1498-unit.js
|
||||
node test-clear-filters.js
|
||||
node test-color-picker-ux.js
|
||||
node test-compare-flood-filter.js
|
||||
node test-compare-overlap.js
|
||||
node test-confidence-indicator.js
|
||||
node test-coverage-gate.js
|
||||
node test-customizer-v2.js
|
||||
node test-drag-manager.js
|
||||
node test-embed-mode-1369.js
|
||||
node test-fetch-all-nodes-pagination.js
|
||||
node test-fluid-scaffolding.js
|
||||
node test-frontend-helpers.js
|
||||
node test-geofilter-draft.js
|
||||
node test-hash-color.js
|
||||
node test-hop-resolver-affinity.js
|
||||
node test-issue-1065-gesture-hints-gates.js
|
||||
node test-issue-1107-live-layout.js
|
||||
node test-issue-1136-observer-iata-map.js
|
||||
node test-issue-1166-first-seen-column.js
|
||||
node test-issue-1189-composed-cell.js
|
||||
node test-issue-1189-live-iata-badge.js
|
||||
node test-issue-1279-p2-code-filter.js
|
||||
node test-issue-1293-marker-shapes.js
|
||||
node test-issue-1356-map-a11y.js
|
||||
node test-issue-1360-pill-letter-count.js
|
||||
node test-issue-1361-cb-presets.js
|
||||
node test-issue-1364-pill-no-clamp.js
|
||||
node test-issue-1375-scope-stats-fetch.js
|
||||
node test-issue-1380-cb-reset-button.js
|
||||
node test-issue-1380-cb-sim-overlay.js
|
||||
node test-issue-1407-cb-preset-propagation.js
|
||||
node test-issue-1409-no-encrypted-flood.js
|
||||
node test-issue-1412-customizer-no-override.js
|
||||
node test-issue-1415-packets-layout.js
|
||||
node test-issue-1418-cb-preset-ramp.js
|
||||
node test-issue-1418-deeplink-hops-channels.js
|
||||
node test-issue-1418-edge-weights.js
|
||||
node test-issue-1418-polish-review.js
|
||||
node test-issue-1418-raw-hex-extraction.js
|
||||
node test-issue-1418-spider-fan.js
|
||||
node test-issue-1420-tile-providers.js
|
||||
node test-issue-1438-customizer-mcrole.js
|
||||
node test-issue-1438-marker-css-vars.js
|
||||
node test-issue-1446-cb-preset-cascade.js
|
||||
node test-issue-1450-logo-aspect.js
|
||||
node test-issue-1454-channels-toggle.js
|
||||
node test-issue-1456-score-labels.js
|
||||
node test-issue-1461-mobile-page-actions.js
|
||||
node test-issue-1470-card-bg-contrast.js
|
||||
node test-issue-1470-node-tile-helper.js
|
||||
node test-issue-1473-prefix-generator.js
|
||||
node test-issue-1473-reserved-prefixes.js
|
||||
node test-issue-1485-live-anim-z.js
|
||||
node test-issue-1488-marker-stroke-vars.js
|
||||
node test-issue-1496-reset-all-complete.js
|
||||
node test-issue-1509-detect-preset.js
|
||||
node test-issue-1509-nav-active-bg.js
|
||||
node test-issue-1518-home-url.js
|
||||
node test-issue-1532-live-fullscreen.js
|
||||
node test-issue-1562-observers-summary.js
|
||||
node test-issue-1563-aggregate-and-inflight.js
|
||||
node test-issue-1574-live-map-max-nodes.js
|
||||
node test-issue-1606-pagination.js
|
||||
node test-issue-1614-tile-url-function.js
|
||||
node test-issue-1619-feed-detail-card-draggable.js
|
||||
node test-issue-1633-hide-1byte-hops.js
|
||||
node test-issue-1644-redesign.js
|
||||
node test-issue-1646-compare-polish.js
|
||||
node test-issue-1648-followup-phosphor-leaks.js
|
||||
node test-issue-1648-m1-emoji-scan.js
|
||||
node test-issue-1648-m2-emoji-scan.js
|
||||
node test-issue-1648-m3-emoji-scan.js
|
||||
node test-issue-1648-m4-emoji-scan.js
|
||||
node test-issue-1648-m5-emoji-scan.js
|
||||
node test-issue-1648-m6-final-sweep.js
|
||||
node test-issue-1648-m6-lint-self.js
|
||||
node test-issue-1668-m2-contrast.js
|
||||
node test-issue-1668-m3-typography.js
|
||||
node test-issue-1668-m4-per-route.js
|
||||
node test-issue-1697-mqtt-mobile-e2e.js
|
||||
node test-issue-1699-retransmission-chart.js
|
||||
node test-issue-1705-subpath-contrast.js
|
||||
node test-issue-1753-copy-url-slash.js
|
||||
node test-issue-1770-mobile-row-clamp.js
|
||||
node test-issue-1789-observer-firmware-cols.js
|
||||
node test-issue-1825-observer-node-cross-links.js
|
||||
node test-issue-1833-legend-toggle-vcr-offset.js
|
||||
node test-issue-1836-crossnav-case-normalization.js
|
||||
node test-issue-1843-node-qr-quiet-zone.js
|
||||
node test-issue-1846-observers-width.js
|
||||
node test-issue-1849-trace-hashbytes.js
|
||||
node test-issue-1851-channel-message-scope.js
|
||||
node test-issue-1862-map-region-filter.js
|
||||
node test-issue-1868-control-decode.js
|
||||
node test-issue-1890-og-url.js
|
||||
node test-issue-1956-release-routing.js
|
||||
node test-issue-1979-scope-adverts-by-role.js
|
||||
node test-issue-2001-map-scope-state.js
|
||||
node test-issue-2012-clear-filters-selection.js
|
||||
node test-live-anims.js
|
||||
node test-live-dt-cap-1524.js
|
||||
node test-live-legend-helper.js
|
||||
node test-live-multibyte-filter.js
|
||||
node test-live-region-filter.js
|
||||
node test-live.js
|
||||
node test-map-clustering.js
|
||||
node test-mqtt-status-panel.js
|
||||
node test-my-repeaters-dashboard.js
|
||||
node test-naive-banner-tone.js
|
||||
node test-node-hop-analytics.js
|
||||
node test-node-reach-coverage-debounce.js
|
||||
node test-node-reach-coverage.js
|
||||
node test-nodes-export-wiring.js
|
||||
node test-nodes-export.js
|
||||
node test-observer-iata-1188.js
|
||||
node test-observer-menu-interactions.js
|
||||
node test-observer-naive-clock-1478.js
|
||||
node test-observer-search-filter.js
|
||||
node test-observers-headings.js
|
||||
node test-packet-filter-time.js
|
||||
node test-packet-filter-ux.js
|
||||
node test-packet-filter.js
|
||||
node test-packets-local-channels.js
|
||||
node test-packets.js
|
||||
node test-panel-corner.js
|
||||
node test-path-inspector.js
|
||||
node test-payload-labels-content.js
|
||||
node test-payload-labels-namespace.js
|
||||
node test-perf-anomaly.js
|
||||
node test-perf-disk-io-1120.js
|
||||
node test-perf-go-runtime.js
|
||||
node test-perf-render-1258.js
|
||||
node test-preflight-xss-gate.js
|
||||
node test-pull-to-reconnect-1091.js
|
||||
node test-pull-to-reconnect.js
|
||||
node test-repeater-metric-scatter.js
|
||||
node test-rx-coverage-config-race.js
|
||||
node test-rx-coverage-escape.js
|
||||
node test-scope-audit-styles-linked.js
|
||||
node test-slideover-1056-rowsel-strict.js
|
||||
node test-top-routes-overlay.js
|
||||
node test-traces.js
|
||||
node test-url-state.js
|
||||
node test-warmup-banner.js
|
||||
node test-ws-stale-watchdog-1074.js
|
||||
node test-xss-escape-sinks.js
|
||||
node tests/unit/test-test-inventory.js
|
||||
node tests/unit/test-1108-region-hide-nodes.js
|
||||
node tests/unit/test-1659-analytics-warmup.js
|
||||
node tests/unit/test-a11y-1705-subpath-hop-prefix-e2e.js
|
||||
node tests/unit/test-a11y-1715-dark-role-swatches.js
|
||||
node tests/unit/test-a11y-1716-rf-range-btn-active.js
|
||||
node tests/unit/test-a11y-1719-contrast-root-causes-e2e.js
|
||||
node tests/unit/test-a11y-axe-1668-selftest.js
|
||||
node tests/unit/test-a11y-axe-routes-coverage.js
|
||||
node tests/unit/test-aging.js
|
||||
node tests/unit/test-analytics-channels-integration.js
|
||||
node tests/unit/test-anl1-tooltip-render.js
|
||||
node tests/unit/test-area-filter.js
|
||||
node tests/unit/test-channel-color-picker.js
|
||||
node tests/unit/test-channel-colors.js
|
||||
node tests/unit/test-channel-decrypt-ecb.js
|
||||
node tests/unit/test-channel-decrypt-insecure-context.js
|
||||
node tests/unit/test-channel-decrypt-m345.js
|
||||
node tests/unit/test-channel-fluid-layout.js
|
||||
node tests/unit/test-channel-issue-1087.js
|
||||
node tests/unit/test-channel-issue-1101.js
|
||||
node tests/unit/test-channel-live-decrypt-userprefix.js
|
||||
node tests/unit/test-channel-live-decrypt.js
|
||||
node tests/unit/test-channel-modal-ux.js
|
||||
node tests/unit/test-channel-psk-ux.js
|
||||
node tests/unit/test-channel-qr-wiring.js
|
||||
node tests/unit/test-channel-qr.js
|
||||
node tests/unit/test-channel-sidebar-layout.js
|
||||
node tests/unit/test-channel-ux-followup.js
|
||||
node tests/unit/test-channel-ux-round2.js
|
||||
node tests/unit/test-channels-merge-1498-unit.js
|
||||
node tests/unit/test-clear-filters.js
|
||||
node tests/unit/test-color-picker-ux.js
|
||||
node tests/unit/test-compare-flood-filter.js
|
||||
node tests/unit/test-compare-overlap.js
|
||||
node tests/unit/test-confidence-indicator.js
|
||||
node tests/unit/test-coverage-gate.js
|
||||
node tests/unit/test-customizer-v2.js
|
||||
node tests/unit/test-drag-manager.js
|
||||
node tests/unit/test-embed-mode-1369.js
|
||||
node tests/unit/test-fetch-all-nodes-pagination.js
|
||||
node tests/unit/test-fluid-scaffolding.js
|
||||
node tests/unit/test-frontend-helpers.js
|
||||
node tests/unit/test-geofilter-draft.js
|
||||
node tests/unit/test-hash-color.js
|
||||
node tests/unit/test-hop-resolver-affinity.js
|
||||
node tests/unit/test-issue-1065-gesture-hints-gates.js
|
||||
node tests/unit/test-issue-1107-live-layout.js
|
||||
node tests/unit/test-issue-1136-observer-iata-map.js
|
||||
node tests/unit/test-issue-1166-first-seen-column.js
|
||||
node tests/unit/test-issue-1189-composed-cell.js
|
||||
node tests/unit/test-issue-1189-live-iata-badge.js
|
||||
node tests/unit/test-issue-1279-p2-code-filter.js
|
||||
node tests/unit/test-issue-1293-marker-shapes.js
|
||||
node tests/unit/test-issue-1356-map-a11y.js
|
||||
node tests/unit/test-issue-1360-pill-letter-count.js
|
||||
node tests/unit/test-issue-1361-cb-presets.js
|
||||
node tests/unit/test-issue-1364-pill-no-clamp.js
|
||||
node tests/unit/test-issue-1375-scope-stats-fetch.js
|
||||
node tests/unit/test-issue-1380-cb-reset-button.js
|
||||
node tests/unit/test-issue-1380-cb-sim-overlay.js
|
||||
node tests/unit/test-issue-1407-cb-preset-propagation.js
|
||||
node tests/unit/test-issue-1409-no-encrypted-flood.js
|
||||
node tests/unit/test-issue-1412-customizer-no-override.js
|
||||
node tests/unit/test-issue-1415-packets-layout.js
|
||||
node tests/unit/test-issue-1418-cb-preset-ramp.js
|
||||
node tests/unit/test-issue-1418-deeplink-hops-channels.js
|
||||
node tests/unit/test-issue-1418-edge-weights.js
|
||||
node tests/unit/test-issue-1418-polish-review.js
|
||||
node tests/unit/test-issue-1418-raw-hex-extraction.js
|
||||
node tests/unit/test-issue-1418-spider-fan.js
|
||||
node tests/unit/test-issue-1420-tile-providers.js
|
||||
node tests/unit/test-issue-1438-customizer-mcrole.js
|
||||
node tests/unit/test-issue-1438-marker-css-vars.js
|
||||
node tests/unit/test-issue-1446-cb-preset-cascade.js
|
||||
node tests/unit/test-issue-1450-logo-aspect.js
|
||||
node tests/unit/test-issue-1454-channels-toggle.js
|
||||
node tests/unit/test-issue-1456-score-labels.js
|
||||
node tests/unit/test-issue-1461-mobile-page-actions.js
|
||||
node tests/unit/test-issue-1470-card-bg-contrast.js
|
||||
node tests/unit/test-issue-1470-node-tile-helper.js
|
||||
node tests/unit/test-issue-1473-prefix-generator.js
|
||||
node tests/unit/test-issue-1473-reserved-prefixes.js
|
||||
node tests/unit/test-issue-1485-live-anim-z.js
|
||||
node tests/unit/test-issue-1488-marker-stroke-vars.js
|
||||
node tests/unit/test-issue-1496-reset-all-complete.js
|
||||
node tests/unit/test-issue-1509-detect-preset.js
|
||||
node tests/unit/test-issue-1509-nav-active-bg.js
|
||||
node tests/unit/test-issue-1518-home-url.js
|
||||
node tests/unit/test-issue-1532-live-fullscreen.js
|
||||
node tests/unit/test-issue-1562-observers-summary.js
|
||||
node tests/unit/test-issue-1563-aggregate-and-inflight.js
|
||||
node tests/unit/test-issue-1574-live-map-max-nodes.js
|
||||
node tests/unit/test-issue-1606-pagination.js
|
||||
node tests/unit/test-issue-1614-tile-url-function.js
|
||||
node tests/unit/test-issue-1619-feed-detail-card-draggable.js
|
||||
node tests/unit/test-issue-1633-hide-1byte-hops.js
|
||||
node tests/unit/test-issue-1644-redesign.js
|
||||
node tests/unit/test-issue-1646-compare-polish.js
|
||||
node tests/unit/test-issue-1648-followup-phosphor-leaks.js
|
||||
node tests/unit/test-issue-1648-m1-emoji-scan.js
|
||||
node tests/unit/test-issue-1648-m2-emoji-scan.js
|
||||
node tests/unit/test-issue-1648-m3-emoji-scan.js
|
||||
node tests/unit/test-issue-1648-m4-emoji-scan.js
|
||||
node tests/unit/test-issue-1648-m5-emoji-scan.js
|
||||
node tests/unit/test-issue-1648-m6-final-sweep.js
|
||||
node tests/unit/test-issue-1648-m6-lint-self.js
|
||||
node tests/unit/test-issue-1668-m2-contrast.js
|
||||
node tests/unit/test-issue-1668-m3-typography.js
|
||||
node tests/unit/test-issue-1668-m4-per-route.js
|
||||
node tests/unit/test-issue-1697-mqtt-mobile-e2e.js
|
||||
node tests/unit/test-issue-1699-retransmission-chart.js
|
||||
node tests/unit/test-issue-1705-subpath-contrast.js
|
||||
node tests/unit/test-issue-1753-copy-url-slash.js
|
||||
node tests/unit/test-issue-1770-mobile-row-clamp.js
|
||||
node tests/unit/test-issue-1789-observer-firmware-cols.js
|
||||
node tests/unit/test-issue-1825-observer-node-cross-links.js
|
||||
node tests/unit/test-issue-1833-legend-toggle-vcr-offset.js
|
||||
node tests/unit/test-issue-1836-crossnav-case-normalization.js
|
||||
node tests/unit/test-issue-1843-node-qr-quiet-zone.js
|
||||
node tests/unit/test-issue-1846-observers-width.js
|
||||
node tests/unit/test-issue-1849-trace-hashbytes.js
|
||||
node tests/unit/test-issue-1851-channel-message-scope.js
|
||||
node tests/unit/test-issue-1862-map-region-filter.js
|
||||
node tests/unit/test-issue-1868-control-decode.js
|
||||
node tests/unit/test-issue-1890-og-url.js
|
||||
node tests/unit/test-issue-1956-release-routing.js
|
||||
node tests/unit/test-issue-1979-scope-adverts-by-role.js
|
||||
node tests/unit/test-issue-2001-map-scope-state.js
|
||||
node tests/unit/test-issue-2012-clear-filters-selection.js
|
||||
node tests/unit/test-live-anims.js
|
||||
node tests/unit/test-live-dt-cap-1524.js
|
||||
node tests/unit/test-live-legend-helper.js
|
||||
node tests/unit/test-live-multibyte-filter.js
|
||||
node tests/unit/test-live-region-filter.js
|
||||
node tests/unit/test-live.js
|
||||
node tests/unit/test-map-clustering.js
|
||||
node tests/unit/test-mqtt-status-panel.js
|
||||
node tests/unit/test-my-repeaters-dashboard.js
|
||||
node tests/unit/test-naive-banner-tone.js
|
||||
node tests/unit/test-node-hop-analytics.js
|
||||
node tests/unit/test-node-reach-coverage-debounce.js
|
||||
node tests/unit/test-node-reach-coverage.js
|
||||
node tests/unit/test-nodes-export-wiring.js
|
||||
node tests/unit/test-nodes-export.js
|
||||
node tests/unit/test-observer-iata-1188.js
|
||||
node tests/unit/test-observer-menu-interactions.js
|
||||
node tests/unit/test-observer-naive-clock-1478.js
|
||||
node tests/unit/test-observer-search-filter.js
|
||||
node tests/unit/test-observers-headings.js
|
||||
node tests/unit/test-packet-filter-time.js
|
||||
node tests/unit/test-packet-filter-ux.js
|
||||
node tests/unit/test-packet-filter.js
|
||||
node tests/unit/test-packets-local-channels.js
|
||||
node tests/unit/test-packets.js
|
||||
node tests/unit/test-panel-corner.js
|
||||
node tests/unit/test-path-inspector.js
|
||||
node tests/unit/test-payload-labels-content.js
|
||||
node tests/unit/test-payload-labels-namespace.js
|
||||
node tests/unit/test-perf-anomaly.js
|
||||
node tests/unit/test-perf-disk-io-1120.js
|
||||
node tests/unit/test-perf-go-runtime.js
|
||||
node tests/unit/test-perf-render-1258.js
|
||||
node tests/unit/test-preflight-xss-gate.js
|
||||
node tests/unit/test-pull-to-reconnect-1091.js
|
||||
node tests/unit/test-pull-to-reconnect.js
|
||||
node tests/unit/test-repeater-metric-scatter.js
|
||||
node tests/unit/test-rx-coverage-config-race.js
|
||||
node tests/unit/test-rx-coverage-escape.js
|
||||
node tests/unit/test-scope-audit-styles-linked.js
|
||||
node tests/unit/test-slideover-1056-rowsel-strict.js
|
||||
node tests/unit/test-top-routes-overlay.js
|
||||
node tests/unit/test-traces.js
|
||||
node tests/unit/test-url-state.js
|
||||
node tests/unit/test-warmup-banner.js
|
||||
node tests/unit/test-ws-stale-watchdog-1074.js
|
||||
node tests/unit/test-xss-escape-sinks.js
|
||||
|
||||
echo "All standalone frontend suites passed"
|
||||
|
||||
@@ -31,6 +31,7 @@
|
||||
*/
|
||||
|
||||
'use strict';
|
||||
const REPO_ROOT = require('path').resolve(__dirname, '..', '..');
|
||||
|
||||
const fs = require('fs');
|
||||
const path = require('path');
|
||||
@@ -41,7 +42,7 @@ const path = require('path');
|
||||
const BASE = process.env.BASE_URL || 'http://localhost:13581';
|
||||
const ROUTES_FILTER = (process.env.AXE_ROUTES_ONLY || '').split(',').filter(Boolean);
|
||||
const SHOT_DIR = process.env.AXE_SCREENSHOT_DIR || '/tmp/axe-1668';
|
||||
const ALLOWLIST_PATH = path.join(__dirname, 'tests', 'a11y-allowlist.yaml');
|
||||
const ALLOWLIST_PATH = path.join(REPO_ROOT, 'tests', 'a11y-allowlist.yaml');
|
||||
|
||||
// Routes: M1 audit baseline (already proven coverage).
|
||||
// Hash routes — CoreScope is a SPA, server returns the same shell for any path.
|
||||
@@ -19,12 +19,13 @@
|
||||
* Usage: node test-analytics-fluid-charts.js
|
||||
*/
|
||||
'use strict';
|
||||
const REPO_ROOT = require('path').resolve(__dirname, '..', '..');
|
||||
const { chromium } = require('playwright');
|
||||
const fs = require('fs');
|
||||
const path = require('path');
|
||||
const os = require('os');
|
||||
|
||||
const CSS_PATH = path.join(__dirname, 'public', 'style.css');
|
||||
const CSS_PATH = path.join(REPO_ROOT, 'public', 'style.css');
|
||||
const cssHref = 'file://' + CSS_PATH;
|
||||
|
||||
// Minimal harness: a sized wrapper that defines the available width
|
||||
@@ -1,3 +1,4 @@
|
||||
const REPO_ROOT = require('path').resolve(__dirname, '..', '..');
|
||||
/**
|
||||
* Playwright E2E tests — proof of concept
|
||||
* Runs against prod (analyzer.00id.net), read-only.
|
||||
@@ -2313,7 +2314,7 @@ async function run() {
|
||||
if (coverage) {
|
||||
const fs = require('fs');
|
||||
const path = require('path');
|
||||
const outDir = path.join(__dirname, '.nyc_output');
|
||||
const outDir = path.join(REPO_ROOT, '.nyc_output');
|
||||
if (!fs.existsSync(outDir)) fs.mkdirSync(outDir, { recursive: true });
|
||||
fs.writeFileSync(path.join(outDir, 'e2e-coverage.json'), JSON.stringify(coverage));
|
||||
console.log(`Frontend coverage from E2E: ${Object.keys(coverage).length} files`);
|
||||
+2
-1
@@ -30,12 +30,13 @@
|
||||
* to convert SKIP -> FAIL.
|
||||
*/
|
||||
'use strict';
|
||||
const REPO_ROOT = require('path').resolve(__dirname, '..', '..');
|
||||
|
||||
const fs = require('fs');
|
||||
const path = require('path');
|
||||
const { chromium } = require('playwright');
|
||||
|
||||
const CSS_PATH = path.resolve(__dirname, 'public', 'style.css');
|
||||
const CSS_PATH = path.resolve(REPO_ROOT, 'public', 'style.css');
|
||||
|
||||
function fail(msg) {
|
||||
console.error(`test-issue-1705-subpath-contrast-e2e.js: FAIL — ${msg}`);
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user