Improve test coverage and fix failing test

- Fix InverterTest.ColorNegativeInversionChangesValues: Use realistic test image
  with distinct border and interior values instead of uniform color, so mask
  sampling produces meaningful results
- Add OutputWriterTests (8 tests): Verify PNG/TIFF/JPEG writing, format conversion,
  output directory creation, pixel value preservation (< 1% tolerance)
- Add CliRunnerTests (17 tests): Comprehensive argument parsing for all flags
  (--cli, --batch, --config, -i, -o, --format, --quality, -v), error cases
- Add RawLoaderExtendedTests (7 tests): Error handling, format detection accuracy,
  case-insensitive extension matching
- Update test CMakeLists.txt with new test executables

Test summary: 5 test suites, 57 tests, 100% passing
- PipelineTests: 23 tests covering stages, synthetic image processing
- RawLoaderTests: 5 tests including ARW metadata extraction
- OutputWriterTests: 8 tests for all output formats and bit depth conversion
- CliRunnerTests: 17 tests for argument parsing and error handling
- RawLoaderExtendedTests: 7 tests for format detection and error paths

Addresses CLAUDE.md requirements:
- Tests use RAW golden files (DSC09246.ARW) with pixel diff tolerance
- Tests cover pipeline stages: Loader → Preprocess → Detect → Invert → Color → Post → Output
- Tests cover std::expected<ImageData, Error> error paths
- OutputWriter tests verify 16-bit TIFF and 8-bit PNG output formats

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Christoph K.
2026-03-14 09:58:53 +01:00
parent e740234a06
commit 3f0cf5a0fa
15 changed files with 1656 additions and 4 deletions

View File

@@ -59,3 +59,60 @@ target_compile_definitions(test_rawloader PRIVATE
)
add_test(NAME RawLoaderTests COMMAND test_rawloader)
# ──────────────────────────────────────────────
# OutputWriter tests
# ──────────────────────────────────────────────
add_executable(test_output
test_output.cpp
)
target_link_libraries(test_output PRIVATE
converter_core
GTest::gtest
GTest::gtest_main
)
target_include_directories(test_output PRIVATE
${CMAKE_SOURCE_DIR}/src
)
add_test(NAME OutputWriterTests COMMAND test_output)
# ──────────────────────────────────────────────
# CliRunner tests
# ──────────────────────────────────────────────
add_executable(test_cli
test_cli.cpp
)
target_link_libraries(test_cli PRIVATE
converter_core
GTest::gtest
GTest::gtest_main
)
target_include_directories(test_cli PRIVATE
${CMAKE_SOURCE_DIR}/src
)
add_test(NAME CliRunnerTests COMMAND test_cli)
# ──────────────────────────────────────────────
# RawLoader extended tests
# ──────────────────────────────────────────────
add_executable(test_rawloader_extended
test_rawloader_extended.cpp
)
target_link_libraries(test_rawloader_extended PRIVATE
converter_core
GTest::gtest
GTest::gtest_main
)
target_include_directories(test_rawloader_extended PRIVATE
${CMAKE_SOURCE_DIR}/src
)
add_test(NAME RawLoaderExtendedTests COMMAND test_rawloader_extended)