CNA-VGAP-020: The hand-written CnaPlatformTests filter misses TerminalPresenterThroughPlatformTest and eight other platform suites, so the platform CI cells never select them
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.cmakecontains the tokenTerminalPresenter.*. AGoogleTestpattern matches the fullSuite.Casename, andTerminalPresenter.* requires a literal dot afterTerminalPresenter; the suite is namedTerminalPresenterThroughPlatformTestinTerminalPresenterTests.cpp(a T, not a dot, follows), so it is not selected. It runs only as its own case throughgtest_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/teststhat noCnaPlatformTestsorCnaPlatformWindowTestsfilter matches and no workflow names:KeyCodeTests,KeyCodeTableEquivalenceTests,ScancodeTests,StandardFileSystemTests,SensorSessionContractTests,Sdl3DeviceServicesTest,Sdl3InputDevicesTestandSdl3PlatformExitUnderLockTest. The input filter (CnaInputTests, ctest -L input) reaches only four of their cases through its case-name tokens:ScancodeTests.TheValuesAreHidKeyboardUsageIdsand threeSdl3DeviceServicesTesthaptic 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
cmake/UnitTests.cmake— CnaPlatformTests filter token TerminalPresenter.*modules/platform/tests/CNA/Platform/TerminalPresenterTests.cpp— TerminalPresenterThroughPlatformTest.PresentationIsRefusedWhenStandardOutputIsNotATerminal
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.
Related pages
The same subject is explained at several altitudes. These are the neighbouring pages at each one.
- Tests and validation
- Test architecture: discovery
- Known issues
- Verification gap index