Skip to content

Latest commit

 

History

History
125 lines (105 loc) · 4.31 KB

File metadata and controls

125 lines (105 loc) · 4.31 KB

Representative real-media validation

Phase 11D validates the live macOS adapters with a small private set of representative FUJIFILM X100VI files. The media and its populated manifest stay outside Git. Deterministic Core, app, and UI tests do not depend on this suite.

Local layout

The recommended repository-local layout is ignored by Git:

LocalTestMedia/
  Phase11D/
    manifest.json
    source/
      DCIM/
        100_FUJI/
          DSCF0001.RAF
          DSCF0001.JPG
          DSCF0002.HIF
          DSCF0003.MOV

Keep original filenames, extensions, bytes, and metadata. Put manifest.json beside source, not inside it, because every non-hidden regular file below source is expected to be an import item.

Manifest version 1

Record dates verified independently from PicChronoImporter. Use an ISO 8601 instant with an explicit offset and the IANA time zone used to interpret EXIF timestamps that do not carry their own offset.

{
  "version": 1,
  "cameraModel": "FUJIFILM X100VI",
  "timeZoneIdentifier": "Asia/Tokyo",
  "sourceDirectory": "source",
  "items": [
    {
      "relativePath": "DCIM/100_FUJI/DSCF0001.RAF",
      "expectedMediaKind": "rawImage",
      "expectedCaptureDate": "2026-01-02T03:04:05+09:00",
      "expectedDateSource": "exifDateTimeOriginal",
      "expectedDestinationRelativePath": "2026-01-02/DSCF0001.RAF",
      "expectsThumbnail": true
    },
    {
      "relativePath": "DCIM/100_FUJI/DSCF0001.JPG",
      "expectedMediaKind": "compressedImage",
      "expectedCaptureDate": "2026-01-02T03:04:05+09:00",
      "expectedDateSource": "exifDateTimeOriginal",
      "expectedDestinationRelativePath": "2026-01-02/DSCF0001.JPG",
      "expectsThumbnail": true
    },
    {
      "relativePath": "DCIM/100_FUJI/DSCF0002.HIF",
      "expectedMediaKind": "compressedImage",
      "expectedCaptureDate": "2026-01-02T03:05:06+09:00",
      "expectedDateSource": "exifDateTimeOriginal",
      "expectedDestinationRelativePath": "2026-01-02/DSCF0002.HIF",
      "expectsThumbnail": true
    },
    {
      "relativePath": "DCIM/100_FUJI/DSCF0003.MOV",
      "expectedMediaKind": "video",
      "expectedCaptureDate": "2026-01-02T03:06:07+09:00",
      "expectedDateSource": "exifAlternate",
      "expectedDestinationRelativePath": "2026-01-02/DSCF0003.MOV",
      "expectsThumbnail": true
    }
  ]
}

The required matrix is one RAF, one JPEG, one HIF or HEIC, and one MOV. Every item must expect a thumbnail. Image representatives must use exifDateTimeOriginal or exifAlternate; the MOV representative must use exifAlternate so the run exercises its container creation date. Paths must be relative, must not contain . or .. components, and must name regular files. The source directory must contain exactly the files declared in items apart from hidden files.

Run the suite

From Packages/PhotoImportPlatformMac, run:

PICCHRONO_REAL_MEDIA_MANIFEST=/absolute/path/to/manifest.json \
DEVELOPER_DIR=/Applications/Xcode.app/Contents/Developer \
/usr/bin/xcrun swift test --filter RepresentativeRealMedia

Without PICCHRONO_REAL_MEDIA_MANIFEST, Swift Testing reports the suite as skipped. If the variable is set, a missing or invalid manifest, incomplete matrix, missing file, or mismatched expectation fails the test.

The suite checks:

  1. recursive file listing and Scan output
  2. media kind, capture date, date source, and destination planning
  3. source Quick Look thumbnails
  4. empty-destination duplicate detection
  5. real copies through ImportUseCase and MacImporter
  6. result paths, sizes, source preservation, and SHA-256 equality
  7. destination Quick Look thumbnails

Use a fresh curated copy of the media rather than the mounted SD card itself. No absolute media path, private metadata, or content hash belongs in committed documentation.

Verified baseline

The required matrix passed on 2026-07-20 with Xcode 26.6 and macOS 26.5.2. The local run included X100VI RAF, JPEG, HIF, HEIC, and MOV representatives and completed every check listed above. The populated Manifest and media remain Git-ignored.

Completion policy

If a future supported macOS baseline cannot process a required representative with ImageIO or Quick Look, record the format and failing stage before changing the verified baseline. Do not add a third-party codec or custom decoder as part of this validation suite.