BUG: Seven ImageProcessing tests never run under ctest because their names contain a semicolon
I maintainer di solito rispondono entro 3 giorni
Valutazione
- Difficoltà
- 2/5
- Tempo stimato
- 1-3 ore
- Idoneità per principianti
- 78/100
- Tipo di issue
- Bug
- Chiarezza
- Specificata chiaramente
- Stato di attività
- Attiva
- Stack tecnologico
- cmake, cpp
- Ambito
- testing-qa
Direzione di ricerca
Inizia dai sette casi di test interessati indicati nell’issue, in particolare BinaryMorphologicalClosingImageFilterTest.cpp, e consulta la sezione Testing di docs/Code_Style_Guide.md. Esegui i test interessati tramite ctest dopo aver aggiornato i loro nomi, verificando che ogni nome completo del test sia registrato ed eseguito, anziché passare con “No test cases matched.”.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
Problem
Seven ImageProcessing test cases never run under ctest, and ctest reports them as passed. Their names contain a
semicolon, and test discovery splits each name at the semicolon into two ctest entries. Neither entry matches a test
case, so Catch2 runs nothing and exits successfully.
- Expected: every visible test case is registered with ctest under its full name and runs.
- Actual: each of these cases becomes two entries such as
ImageProcessing::BinaryMorphologicalClosingImageFilter: Computed-expected (safeBorder=falseand
both algorithm paths). Both printNo test cases matchedand pass in about 0.02 s.
Occurs on develop at f58acc169595694742cf2afae63ed5e1d3224cf8. The affected test cases:
BinaryMorphologicalClosingImageFilterTest.cppL38 and L104ContourEngineTest.cppL648GrayscaleMorphologicalOpeningImageFilterTest.cppL18GrayscaleMorphologicalClosingImageFilterTest.cppL18WhiteTopHatImageFilterTest.cppL18BlackTopHatImageFilterTest.cppL18
Steps to Reproduce
- Configure a build with
SIMPLNX_BUILD_TESTS=ONand buildImageProcessingUnitTest. - List the registered tests:
ctest --test-dir "<build-dir>" -N -R "safeBorder=false$|both algorithm paths\)$|labels differ\)$".
The list shows the name fragments, not the full names. - Ask ctest for one full name:
ctest --test-dir "<build-dir>" -R "^ImageProcessing::BinaryMorphologicalClosingImageFilter: Computed-expected \(safeBorder=false; both algorithm paths\)$" --no-tests=error.
ctest finds no test. - Run one fragment with
-V: the command passes" both algorithm paths)"to the executable, Catch2 prints
No test cases matched, and ctest reportsPassed.
Cause
cmake/Plugin.cmake L410 registers the plugin tests with
catch_discover_tests(${UNIT_TEST_TARGET}). In Catch2 2.13.6, the discovery script CatchAddTests.cmake (in the
vcpkg Catch2 package) turns the output of --list-test-names-only into a CMake list and registers one test per
element:
string(REPLACE "\n" ";" output "${output}")
...
foreach(line ${output})
A semicolon is the CMake list separator, so a test name that contains ; becomes two list elements. The script
escapes ,, [ and ] in the test spec it passes to the executable, but nothing protects ;.
Verification Unit Test
The existing test cases are the verification; no new test is needed. For example, from
src/Plugins/ImageProcessing/test/BinaryMorphologicalClosingImageFilterTest.cpp:
TEST_CASE("ImageProcessing::BinaryMorphologicalClosingImageFilter: Computed-expected (safeBorder=false; both algorithm paths)",
"[ImageProcessing][BinaryMorphologicalClosingImageFilter]")
Command that should run it (in-core Release build of develop, macOS arm64):
ctest --test-dir "<build-dir>" -R "^ImageProcessing::BinaryMorphologicalClosingImageFilter: Computed-expected \(safeBorder=false; both algorithm paths\)$" -j 1 --output-on-failure --timeout 300 --no-tests=error
Observed:
No tests were found!!!
Errors while running CTest
And the fragment that ctest does run:
203: Test command: .../Bin/ImageProcessingUnitTest " both algorithm paths)"
203: No test cases matched 'both algorithm paths)'
1/1 Test #203: both algorithm paths) ........... Passed 0.02 sec
Proposed Fix
- Replace the
;in the seven test names with,(for example
Computed-expected (safeBorder=false, both algorithm paths)). Run the seven tests afterwards: they have not run
under ctest, so they may fail. - Keep it from coming back: add a rule to
docs/Code_Style_Guide.md(Testing) that a test case name contains no
;, and optionally a CMake check after discovery that fails when a registered name does not match a test case.
Notes
- Found while checking the test registration for BlueQuartzSoftware/simplnx#1889; that pull request does not change
this behavior (its split discovery registers the same names). - One SimplnxOoc test case has the same problem.
- Test names with commas, brackets or parentheses register correctly.
- Lingua principale
- C++
- Stelle
- 18
- Fork
- 15
- Merge medio
- 3g 15h
- PR unite (30g)
- 27
Preparare l'ambiente
- Nessun Dockerfile né file Docker Compose
- Ha un modello di pull request
- Leggi la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di BlueQuartzSoftware/simplnx
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 84/100
BlueQuartzSoftware/simplnx#1912 ·
I maintainer di solito rispondono entro 3 giorni
-
bug
Difficoltà 2/5 1-3 ore Idoneità per principianti 85/100
BlueQuartzSoftware/simplnx#1906 ·
I maintainer di solito rispondono entro 3 giorni
-
bug Filter
Difficoltà 2/5 1-3 ore Idoneità per principianti 84/100
BlueQuartzSoftware/simplnx#1891 ·
I maintainer di solito rispondono entro 3 giorni
-
bug Filter
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
BlueQuartzSoftware/simplnx#1860 · 1 commento ·
I maintainer di solito rispondono entro 3 giorni
-
documentation
Difficoltà 1/5 1-3 ore Idoneità per principianti 88/100
BlueQuartzSoftware/simplnx#1847 ·
I maintainer di solito rispondono entro 3 giorni
Tutte le issue di BlueQuartzSoftware/simplnx
Issue simili
-
bug libcudf
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
I maintainer di solito rispondono entro 2 giorni
-
level/task module/cloud monitoring type/maintenance
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
LadybirdBrowser/ladybird#13809 ·
I maintainer di solito rispondono entro 1 giorno
-
bug module:nodes tests
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
rocketride-org/rocketride-server#3020 ·
I maintainer di solito rispondono entro 2 giorni
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
I maintainer di solito rispondono entro 9 giorni