- Identified two main diagnostic formats: JSON-Lines (compiler) and standard JSON (fixtures) - Documented JSON-Lines format from .fingerprint directory output files - Added schema details, field descriptions, and sample entries - Noted encoding (UTF-8) and line endings (Unix \n) - Updated verification note with comprehensive format findings Closes bf-5g04q
135 lines
No EOL
4.5 KiB
Markdown
135 lines
No EOL
4.5 KiB
Markdown
# BF-24GV1: Fixture Discovery Implementation
|
|
|
|
## Overview
|
|
|
|
Implemented comprehensive test fixture discovery mechanism for PDF fixtures that need CLI processing. The system provides a testable, accessible API for enumerating all PDF fixtures across the entire test suite.
|
|
|
|
## What Was Implemented
|
|
|
|
### New File: `crates/pdftract-cli/tests/fixture_discovery.rs`
|
|
|
|
Created a new test module with the following capabilities:
|
|
|
|
#### Core Discovery Functions
|
|
|
|
1. **`discover_all_fixtures()`** - Discovers all 1,301 PDF fixtures recursively
|
|
- Returns: `Vec<PathBuf>` (sorted, absolute paths)
|
|
- Coverage: All fixtures in `tests/fixtures/` tree
|
|
|
|
2. **`discover_fixtures_by_category(category)`** - Category-specific discovery
|
|
- Categories: cjk, classifier, encoding, encrypted, grep-corpus, json_schema, malformed, ocr, page_class, perf, profiles, scanned, security, vector
|
|
- Returns: `Vec<PathBuf>` for specified category
|
|
|
|
3. **`discover_fixtures_flat(dir_path)`** - Non-recursive discovery
|
|
- Use for single-level directories
|
|
- Returns: `Vec<PathBuf>` (sorted)
|
|
|
|
4. **`fixture_categories()`** - Lists all fixture categories
|
|
- Returns: `Vec<String>` of category names
|
|
- Only includes categories that actually contain PDFs
|
|
|
|
5. **`fixture_statistics()`** - Comprehensive statistics
|
|
- Returns: `FixtureStats` struct with:
|
|
- `total_count`: Total number of fixtures
|
|
- `category_count`: Number of categories
|
|
- `category_counts`: HashMap with per-category counts
|
|
|
|
#### Test Coverage
|
|
|
|
9 comprehensive tests covering:
|
|
- ✅ Fixtures root directory existence
|
|
- ✅ All fixture discovery (1,301 fixtures)
|
|
- ✅ Category-based discovery
|
|
- ✅ Fixture categories enumeration (14 categories)
|
|
- ✅ Fixture statistics generation
|
|
- ✅ Flat vs recursive discovery
|
|
- ✅ Nonexistent category handling
|
|
- ✅ Absolute path verification
|
|
- ✅ Sorting verification
|
|
|
|
## Fixture Distribution
|
|
|
|
```
|
|
Total fixtures: 1,301
|
|
Categories: 14
|
|
|
|
Distribution by category:
|
|
- grep-corpus: 1,000 (largest)
|
|
- classifier: 200
|
|
- profiles: 20
|
|
- scanned: 16
|
|
- malformed: 15
|
|
- vector: 10
|
|
- json_schema: 6
|
|
- encoding: 6
|
|
- encrypted: 5
|
|
- security: 4
|
|
- page_class: 4
|
|
- cjk: 4
|
|
- ocr: 2
|
|
- perf: 2
|
|
```
|
|
|
|
## Acceptance Criteria Status
|
|
|
|
| Criterion | Status | Evidence |
|
|
|-----------|--------|----------|
|
|
| All fixture paths are discovered | ✅ PASS | Discovers all 1,301 PDF fixtures across 14 categories |
|
|
| Fixtures are enumerated in test-accessible format | ✅ PASS | Returns `Vec<PathBuf>` (sorted, absolute paths) ready for CLI invocation |
|
|
| Discovery mechanism is testable | ✅ PASS | 9 tests covering all functionality, all passing |
|
|
|
|
## Technical Details
|
|
|
|
### Dependencies
|
|
- Uses `walkdir` crate for recursive filesystem traversal
|
|
- Follows existing pattern from `forms_integration.rs`
|
|
- Zero new dependencies (uses existing walkdir)
|
|
|
|
### Design Decisions
|
|
1. **Absolute paths only** - Ensures reliable CLI invocation regardless of CWD
|
|
2. **Sorted output** - Provides deterministic ordering for tests
|
|
3. **Graceful handling** - Non-existent directories return empty Vec, no panics
|
|
4. **Comprehensive stats** - Provides visibility into fixture distribution
|
|
|
|
### Integration Points
|
|
- **Parent bead**: `bf-5qvoc` (Add pdftract extract CLI invocation to integration tests)
|
|
- **Uses pattern from**: `forms_integration.rs` `discover_pdf_fixtures()` function
|
|
- **Ready for**: CLI invocation on each fixture via `pdftract extract --json <path>`
|
|
|
|
## Verification
|
|
|
|
### Manual Testing
|
|
```bash
|
|
# Run all fixture discovery tests
|
|
cargo test --test fixture_discovery
|
|
|
|
# Specific tests with output
|
|
cargo test --test fixture_discovery test_discover_all_fixtures -- --nocapture
|
|
cargo test --test fixture_discovery test_fixture_categories -- --nocapture
|
|
cargo test --test fixture_discovery test_fixture_statistics -- --nocapture
|
|
```
|
|
|
|
### Output Verification
|
|
- All 9 tests pass
|
|
- Correctly discovers 1,301 fixtures
|
|
- Correctly identifies 14 categories
|
|
- Statistics match actual fixture distribution
|
|
|
|
## Next Steps (Parent Bead: bf-5qvoc)
|
|
|
|
The fixture discovery system is now ready for use by the parent bead `bf-5qvoc` to:
|
|
1. Iterate through all discovered fixtures
|
|
2. Invoke `pdftract extract --json` on each fixture
|
|
3. Capture and validate CLI output
|
|
4. Ensure each fixture processes successfully
|
|
|
|
## Files Modified
|
|
|
|
- **Created**: `crates/pdftract-cli/tests/fixture_discovery.rs` (548 lines)
|
|
- **Test coverage**: 9 comprehensive unit tests
|
|
|
|
## Commit Information
|
|
|
|
- **Commit**: `<commit-hash>` (to be added)
|
|
- **Files**: `crates/pdftract-cli/tests/fixture_discovery.rs`
|
|
- **Tests**: All 9 tests passing (fixture_discovery) |