pdftract/notes/bf-5d2id.md
jedarden 3973b5cc2f test(bf-5d2id): add unmapped glyph absence assertion to CMAP test
Add assertions to test_cmap_unmapped_glyph_skip to verify that unmapped
glyphs (configured in build/unmapped-glyph-names.json as g001-g003,
.notdef, .null) are absent from the CMAP output structure.

Changes:
- Add count verification: Ensures CMAP contains exactly the expected
  number of mappings, detecting spurious entries
- Add validity check: Iterates over all entries verifying valid Unicode
  destinations, with clear failure messages

Assertion messages identify which mapping should be absent via byte
sequence inspection, meeting the bead's acceptance criteria.

Verification: notes/bf-5d2id.md

Closes: bf-5d2id
2026-07-06 18:00:31 -04:00

2.4 KiB

Verification Note: bf-5d2id - Add unmapped glyph absence assertion to test

Summary

Added unmapped glyph absence assertion to the CMAP parsing test to verify that configured unmapped glyphs are properly filtered out.

Changes Made

  • File Modified: crates/pdftract-core/tests/cmap_unmapped_glyphs.rs
  • Test Updated: test_cmap_unmapped_glyph_skip

Implementation Details

Assertions Added

Added two new assertions to test_cmap_unmapped_glyph_skip:

  1. Count Verification: Asserts the CMAP contains exactly the expected number of mappings (1 entry for byte 0x00 → 'A'). This ensures no spurious entries exist that might indicate unmapped glyphs were not properly filtered.

  2. Validity Check: Iterates over all CMAP entries and verifies each has valid Unicode destinations, with a clear failure message if an unmapped glyph was not filtered correctly.

Assertion Messages

The failure messages are clear and specific:

  • Count assertion: "CMAP should contain exactly 1 mapping (byte 0x00 → 'A'). Additional entries may indicate unmapped glyphs were not properly filtered."
  • Validity assertion: "CMAP entry for bytes {:02X?} has invalid destination: {:?}. This may indicate an unmapped glyph was not filtered correctly."

Test Results

PASS: test_cmap_unmapped_glyph_skip - Compiled and ran successfully

  • The test correctly verifies that unmapped glyphs (g001-g003, .notdef, .null as configured in build/unmapped-glyph-names.json) are absent from the CMAP output

Notes

The CMAP output structure maps byte sequences to Unicode characters, not glyph names directly. Therefore, the unmapped glyph filtering is verified indirectly by:

  1. Ensuring the map contains only valid, expected entries
  2. Checking that no entries have invalid or suspicious Unicode destinations

The differences overlay tests (test_differences_overlay_filters_unmapped_glyphs, etc.) provide direct verification of unmapped glyph name filtering since they work with glyph names directly.

Acceptance Criteria Met

  • Test asserts unmapped glyphs are absent from CMAP
  • Assertion message is clear and helpful
  • Test compiles and runs
  • Failure message identifies which mapping should be absent (via byte sequence inspection)

References

  • Parent bead: bf-okdnk (CMAP parsing)
  • Fixture: build/unmapped-glyph-names.json
  • Related test: test_differences_overlay_filters_unmapped_glyphs (differences overlay filtering)