CNA-VGAP-020: The hand-written CnaPlatformTests filter misses TerminalPresenterThroughPlatformTest and eight other platform suites, so the platform CI cells never select them

CNA snapshot 009d40f5  ·  Known Issues › Verification gaps  ·  source links pinned to 009d40f5

✓

Evidence basis: source-verified at the pinned commit; tests exist (not executed for this page). Claims on this page were checked by reading the CNA source at commit 009d40f5; unless a sentence says otherwise, nothing here was built or executed. Nothing on this page was executed unless the Evidence section says so.

CnaPlatformTests selects suites by hand-written name tokens: TerminalPresenter.* misses TerminalPresenterThroughPlatformTest, and eight more platform suites (key codes, scancodes, filesystem, sensor session, SDL3 device services, SDL3 input devices, SDL3 exit under lock) match no platform filter. Only four of their cases are selected, by the input filter's case-name tokens.

Identifier
CNA-VGAP-020
Category
Verification gap
Subsystem
Testing & evidence
Status
Open
Verified against
CNA 009d40f5 (009d40f5dd085c4e674d3479675fac84b12b3e0a)
Evidence basis
Source-verified: read at TARGET, not executed
Tests touching this area
Yes: see Current tests
Affected contract
cmake/UnitTests.cmake CnaPlatformTests filter coverage of the platform suites (the terminal presenter through-the-platform case and eight others)

Expected behaviour

The CnaPlatformTests aggregate is what the terminal platform CI cell runs (ctest -R '^CnaPlatformTests$'); its filter names the terminal suites explicitly, and every terminal suite should be reachable through it.

Actual behaviour at TARGET

  • The filter in UnitTests.cmake contains the token TerminalPresenter.*. A GoogleTest pattern matches the full Suite.Case name, and TerminalPresenter.* requires a literal dot after TerminalPresenter; the suite is named TerminalPresenterThroughPlatformTest in TerminalPresenterTests.cpp (a T, not a dot, follows), so it is not selected. It runs only as its own case through gtest_discover_tests(CnaTests) in an unfiltered ctest (the general-tests workflow), never in the terminal cell that filters to ^CnaPlatformTests$.
  • The same hand-written selection misses eight further suites of modules/platform/tests that no CnaPlatformTests or CnaPlatformWindowTests filter matches and no workflow names: KeyCodeTests, KeyCodeTableEquivalenceTests, ScancodeTests, StandardFileSystemTests, SensorSessionContractTests, Sdl3DeviceServicesTest, Sdl3InputDevicesTest and Sdl3PlatformExitUnderLockTest. The input filter (CnaInputTests, ctest -L input) reaches only four of their cases through its case-name tokens: ScancodeTests.TheValuesAreHidKeyboardUsageIds and three Sdl3DeviceServicesTest haptic cases. Sdl3PlatformLinuxHintsTest, counted in an earlier version of this entry, is selected by the input filter's *Joystick* token and is not missed. Like the terminal case, the rest run only as discovered cases of an unfiltered ctest.

Source locations

Evidence

Checked by reading the CnaPlatformTests filter string, the suite name, and the terminal platform-ci cell's ctest -R '^CnaPlatformTests$' step at 009d40f5. Not executed. The Development terminal page states the same: the suite “is reached only through the per-case discovery.” The case does run in the unfiltered general-tests workflow, so this is a coverage gap in the platform cell, not a total absence.

Independent re-verification: Checked by reading the CnaPlatformTests filter string, the suite names, and the terminal platform-ci cell's ctest -R '^CnaPlatformTests$' step at 009d40f5. Not executed. The wider count was recomputed at case level: every Suite.Case name in modules/platform/tests was matched against the CnaPlatformTests, CnaPlatformWindowTests and CnaInputTests filters with GoogleTest glob semantics. An earlier count matched suite names only, which missed the input filter's *Keyboard*, *Haptic* and *Joystick* tokens matching case names. The Development terminal page states the same for the presenter suite: it is reached only through the per-case discovery. The case does run in the unfiltered general-tests workflow, so this is a coverage gap in the platform cell, not a total absence. The public_contract line should read: the terminal presenter through-the-platform case and eight others.

Focused reproduction

No focused reproduction is known. Nothing has been invented here; the evidence above is what exists.

Current tests

The presenter's other suites (TerminalPresenter.*, TerminalFrameGridTest.*, TerminalAnsiWriterTest.*) match the filter; only TerminalPresenterThroughPlatformTest falls outside it.

Regression test

Add TerminalPresenterThroughPlatformTest.* (or broaden the token to TerminalPresenter*) to the CnaPlatformTests filter, so the terminal CI cell exercises the refuse-into-a-pipe case.

Blast radius

The terminal platform CI cell's coverage of surface-presenter refusal on a non-TTY; the case is still exercised by the unfiltered general-tests run.

Workaround

No workaround is known.

The same subject is explained at several altitudes. These are the neighbouring pages at each one.

Tests and validation
Test architecture: discovery