Christoph K.
3f0cf5a0fa
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 >
2026-03-14 09:58:53 +01:00
Christoph K.
73ccaa3e95
feat: extend CliRunner with config file/batch mode and add comprehensive tests
...
CliRunner:
- --batch / --config <file> flags trigger batch mode with directory scanning
- collect_files() with recursive support and case-insensitive extension matching
- build_pipeline() respects AppConfig conversion flags (invert toggle)
- Progress output to stderr: "[1/42] Processing DSC09246.ARW..."
Tests (test_pipeline.cpp):
- AppConfig: load/save roundtrip, missing file error, extension parsing,
format mapping, write_default
- CropProcessor: levels adjustment, sharpening no-clip, empty image error
- ColorCorrector: AWB preserves neutral grey, skips B&W film
- Inverter: color negative changes values, B&W inversion, positive passthrough
- Preprocessor: 8-bit→16-bit conversion
test_rawloader.cpp: added missing <fstream> include
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-03-14 09:42:01 +01:00
Christoph K.
65b411b23d
chore: initial project scaffold from architecture design
...
- Add CLAUDE.md with project overview, tech stack, build commands,
architecture description, coding standards, and sample images section
- Add full directory structure: src/, docs/, tests/, import/
- Add CMakeLists.txt with C++20, OpenCV/LibRaw/Qt6 dependencies,
converter_core static lib, optional GUI, and GTest tests
- Add architecture documentation: ARCHITECTURE.md, PIPELINE.md, MODULES.md
- Add source skeletons for all pipeline stages:
RawLoader, Preprocessor, NegativeDetector, Inverter, ColorCorrector,
CropProcessor, OutputWriter, Pipeline, MainWindow, CliRunner, main.cpp
- Add initial test stubs for pipeline and rawloader
- Add sample ARW files in import/ for integration testing
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-03-14 09:28:32 +01:00