From 0e052bb4a3d3bcee135d579916f17e8ded225609 Mon Sep 17 00:00:00 2001 From: Claude Date: Sat, 26 Sep 2026 07:23:01 +0000 Subject: [PATCH] Scan image files whose extensions are upper-case ImageScanner matched extensions against a lower-case set using FileExtension's ordinal equality, so .JPG, .PNG and .JPEG files were silently skipped. Lower the extension before the lookup. Fixes #148 Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_0113g7mUxeizhTrH6na279Ez --- ImageDescriber.Test/ImageScannerTests.cs | 26 ++++++++++++++++++++++++ ImageDescriber/ImageScanner.cs | 4 +++- 2 files changed, 29 insertions(+), 1 deletion(-) diff --git a/ImageDescriber.Test/ImageScannerTests.cs b/ImageDescriber.Test/ImageScannerTests.cs index a2b46d5..816cfad 100644 --- a/ImageDescriber.Test/ImageScannerTests.cs +++ b/ImageDescriber.Test/ImageScannerTests.cs @@ -126,4 +126,30 @@ public void ScanForImagesRecognizesAllSupportedExtensions() Directory.Delete(tempDir, true); } } + + [TestMethod] + public void ScanForImagesMatchesExtensionsCaseInsensitively() + { + string tempDir = Path.Combine(Path.GetTempPath(), Guid.NewGuid().ToString()); + Directory.CreateDirectory(tempDir); + + try + { + File.WriteAllBytes(Path.Combine(tempDir, "IMG_0001.JPG"), [0xFF, 0xD8]); + File.WriteAllBytes(Path.Combine(tempDir, "screenshot.Png"), [0x89, 0x50]); + File.WriteAllBytes(Path.Combine(tempDir, "photo.jpeg"), [0xFF, 0xD8]); + File.WriteAllBytes(Path.Combine(tempDir, "scan.TIFF"), [0x49, 0x49]); + File.WriteAllText(Path.Combine(tempDir, "NOTES.TXT"), "text"); + + IReadOnlyList results = ImageScanner.ScanForImages(tempDir.As()); + + string[] names = [.. results.Select(r => Path.GetFileName(r.WeakString)).Order(StringComparer.Ordinal)]; + string[] expected = ["IMG_0001.JPG", "photo.jpeg", "scan.TIFF", "screenshot.Png"]; + CollectionAssert.AreEqual(expected, names); + } + finally + { + Directory.Delete(tempDir, true); + } + } } diff --git a/ImageDescriber/ImageScanner.cs b/ImageDescriber/ImageScanner.cs index 369a042..b9740de 100644 --- a/ImageDescriber/ImageScanner.cs +++ b/ImageDescriber/ImageScanner.cs @@ -39,7 +39,9 @@ internal static IReadOnlyList ScanForImages(AbsoluteDirectoryP continue; } - if (ImageExtensions.Contains(ext.As())) + // FileExtension compares ordinally, and cameras and Windows tools write .JPG/.PNG, + // so fold to the lower-case form the set holds before looking it up. + if (ImageExtensions.Contains(ext.ToLowerInvariant().As())) { imageFiles.Add(file.As()); }