test_library_directory_values_can_look_like_modes passed -L -E as mode
flags, so check_modes took the -E for a preprocessing mode and dropped -c.
Its control commands linked an executable with each compiler, which on
the Windows runner goes through link.exe; the case took about twice as
long as its -I -E counterpart and timed out in 6 Windows CI jobs. The
-L -E pair now goes through configure like the include directory case,
so the control only compiles. The command check_compile checks is the
same, since it drops -c.
test_response_options_compile_without_changing_build_outputs ran 30
check_compile invocations in one case. Its six response files are now
checked by three cases of two.
The round trip configures with -G Ninja but only skipped when CMake was
missing, so it errored on hosts without Ninja. Require both, like the
other configure seed project tests.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
Path.write_text(newline=...) needs Python 3.10, and the Python tests run from 3.9. write_bytes writes the LF text unchanged on every version.
Co-Authored-By: Claude Fable 5.1 <[email protected]>
Path.write_text translates "\n" to the platform newline, so on native
Windows Python the committed fixture held CRLF and the checker counted
the carriage return: 1080 characters instead of 1079.
Co-Authored-By: Claude Fable 5.1 <[email protected]>
conventions_ci_gate built a git repository and ran check_conventions.py
as a subprocess for each of its 35 checks, and took 40.57 s in the
Windows relinker CI job 122160160306. CONTRIBUTING.md requires every
test to finish in 30 s and to be shrunk when it gets close. The test now
commits each case as its own workflow file in one repository, runs one
real Check.workflows() in process and asserts each file's findings. Two
subprocess runs keep the end-to-end path: the repository's workflows
and one job without a gate.
Check that an empty testsuite and an empty testsuites file both exit with 2, print nothing and leave the --summary file untouched. The test fails with the previous behavior, which reported 0 tests and exit code 0.
Parse .github/sanitizer-known-failures.txt for every sanitizer and check that its entries stay sorted by test name, so a malformed or misplaced entry fails the sanitizer_report test in the regular build of the pull request that adds it, instead of the next nightly run. Names that no longer match a test are reported by the nightly summary, since many test names are generated in CMake loops.
Use the shapes ctest writes: a not-run test with SKIP_RETURN_CODE=77 or SKIP_REGULAR_EXPRESSION_MATCHED is a skip, while a not-run test whose executable is missing ('Unable to find executable') or whose skipped element has no message is a failure that fails the run. The test fails with the previous classification.
Check that the SUMMARY line wins over the ERROR line, that LSan and TSan lines and a UBSan runtime error with its source location are found, that output without a sanitizer line gives nothing, that long lines are shortened, and that the failed test table gains the report column only when a failure has a report.
Check that a listed test that passed appears in the passed table with its reason, that a listed test missing from the run appears in the not-run table, that a skipped listed test appears in neither, and that a run whose known failures all still fail has neither table.
Check that known failures apply only to the sanitizers they name and that blank lines are skipped, that a listed failure moves to the Known failure table with its reason escaped for Markdown and stops failing the run while an unlisted one still fails it, that --known without --sanitizer is a usage error, and that malformed lines are rejected with exit code 2 and their line number.
Check how sanitizer_report classifies passed, failed, skipped, not run and disabled tests, the counts and sorted table of the summary, the exit code for runs with and without failures, the exit code 2 for unreadable or malformed reports, and that --summary appends to an existing file.
check_stub runs check_conventions.py in a temporary repository with a
10 s limit. The slowest tests of this file take 8 to 11 s each on a
Windows 10 machine here, and in a full ctest run the call exceeded the
limit (subprocess.TimeoutExpired after 10 seconds), so
conventions_function_bodies_shard_5 failed although it passes on its
own. The limit is now 120 s, the same as the ctest timeout of the shard.
Co-Authored-By: Claude Sonnet 5.5 <[email protected]>