From 427b486ff87e5b10bbd2d6cb3f66ec3fb5e3c0d9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ianar=C3=A9=20S=C3=A9vi?= Date: Tue, 16 Jun 2026 11:42:27 +0200 Subject: [PATCH 1/2] :sparkles: add HEIF support --- src/Mindee/Input/LocalInputSource.cs | 2 +- tests/Mindee.UnitTests/Input/LocalInputSourceTest.cs | 3 ++- tests/resources | 2 +- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/src/Mindee/Input/LocalInputSource.cs b/src/Mindee/Input/LocalInputSource.cs index 41e67c57..0cdefa0d 100644 --- a/src/Mindee/Input/LocalInputSource.cs +++ b/src/Mindee/Input/LocalInputSource.cs @@ -17,7 +17,7 @@ public sealed class LocalInputSource : InputSource { private static readonly string[] AuthorizedFileExtensions = [ - ".heic", ".jpg", ".jpga", ".jpeg", ".pdf", ".png", ".tiff", ".tif", ".webp" + ".heic", ".heif", ".jpg", ".jpga", ".jpeg", ".pdf", ".png", ".tiff", ".tif", ".webp" ]; private DocNetApi _pdfOperation; diff --git a/tests/Mindee.UnitTests/Input/LocalInputSourceTest.cs b/tests/Mindee.UnitTests/Input/LocalInputSourceTest.cs index 6dd44803..32abf334 100644 --- a/tests/Mindee.UnitTests/Input/LocalInputSourceTest.cs +++ b/tests/Mindee.UnitTests/Input/LocalInputSourceTest.cs @@ -18,6 +18,7 @@ public void Can_Load_Type_ImageFiles() List imageExtensions = new() { ".heic", + ".heif", ".jpg", ".jpga", ".png", @@ -29,6 +30,7 @@ public void Can_Load_Type_ImageFiles() { var inputSource = new LocalInputSource(Constants.RootDir + "file_types/receipt" + extension); Assert.True(inputSource.IsExtensionValid()); + Assert.Equal(1, inputSource.GetPageCount()); Assert.False(inputSource.IsPdf()); } } @@ -70,7 +72,6 @@ public void Can_Load_Using_MemoryStream() Assert.IsType(new LocalInputSource(memoryStream, "receipt.jpg")); } - [Fact] public void Can_Load_Using_Base64() { diff --git a/tests/resources b/tests/resources index 13093f3a..2d7fcf8f 160000 --- a/tests/resources +++ b/tests/resources @@ -1 +1 @@ -Subproject commit 13093f3a48de212ef26889df71199c1a2a9d1478 +Subproject commit 2d7fcf8f591f6d7f40e39862965325e6a8a21874 From 1b2469f62b430618331c521be77efa4897c44c02 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ianar=C3=A9=20S=C3=A9vi?= Date: Tue, 16 Jun 2026 12:12:24 +0200 Subject: [PATCH 2/2] better testing --- .../Input/LocalInputSourceTest.cs | 102 +++++++++++------- 1 file changed, 64 insertions(+), 38 deletions(-) diff --git a/tests/Mindee.UnitTests/Input/LocalInputSourceTest.cs b/tests/Mindee.UnitTests/Input/LocalInputSourceTest.cs index 32abf334..699b8be3 100644 --- a/tests/Mindee.UnitTests/Input/LocalInputSourceTest.cs +++ b/tests/Mindee.UnitTests/Input/LocalInputSourceTest.cs @@ -12,27 +12,21 @@ namespace Mindee.UnitTests.Input [Collection("Docnet")] public class LocalInputSourceTest { - [Fact] - public void Can_Load_Type_ImageFiles() + [Theory] + [InlineData("heic")] + [InlineData("heif")] + [InlineData("jpg")] + [InlineData("jpga")] + [InlineData("png")] + [InlineData("tif")] + [InlineData("tiff")] + [InlineData("webp")] + public void Can_Load_Type_ImageFiles(string extension) { - List imageExtensions = new() - { - ".heic", - ".heif", - ".jpg", - ".jpga", - ".png", - ".tif", - ".tiff", - ".webp" - }; - foreach (var extension in imageExtensions) - { - var inputSource = new LocalInputSource(Constants.RootDir + "file_types/receipt" + extension); - Assert.True(inputSource.IsExtensionValid()); - Assert.Equal(1, inputSource.GetPageCount()); - Assert.False(inputSource.IsPdf()); - } + var inputSource = new LocalInputSource(Constants.RootDir + $"file_types/receipt.{extension}"); + Assert.True(inputSource.IsExtensionValid()); + Assert.False(inputSource.IsPdf()); + Assert.Equal(1, inputSource.GetPageCount()); } [Fact] @@ -50,26 +44,50 @@ public void DoesNot_Load_InvalidFile() new LocalInputSource(Constants.RootDir + "file_types/receipt.txt")); } - [Fact] - public void Can_Load_Using_FileInfo() + [Theory] + [InlineData("heic")] + [InlineData("heif")] + [InlineData("jpg")] + [InlineData("jpga")] + [InlineData("png")] + [InlineData("tif")] + [InlineData("tiff")] + [InlineData("webp")] + public void Can_Load_Using_FileInfo(string extension) { - var fileInfo = new FileInfo(Constants.RootDir + "file_types/receipt.jpg"); + var fileInfo = new FileInfo(Constants.RootDir + $"file_types/receipt.{extension}"); Assert.IsType(new LocalInputSource(fileInfo)); } - [Fact] - public void Can_Load_Using_FileStream() + [Theory] + [InlineData("heic")] + [InlineData("heif")] + [InlineData("jpg")] + [InlineData("jpga")] + [InlineData("png")] + [InlineData("tif")] + [InlineData("tiff")] + [InlineData("webp")] + public void Can_Load_Using_FileStream(string extension) { - Stream fileStream = File.OpenRead(Constants.RootDir + "file_types/receipt.jpg"); - Assert.IsType(new LocalInputSource(fileStream, "receipt.jpg")); + Stream fileStream = File.OpenRead(Constants.RootDir + $"file_types/receipt.{extension}"); + Assert.IsType(new LocalInputSource(fileStream, $"receipt.{extension}")); } - [Fact] - public void Can_Load_Using_MemoryStream() + [Theory] + [InlineData("heic")] + [InlineData("heif")] + [InlineData("jpg")] + [InlineData("jpga")] + [InlineData("png")] + [InlineData("tif")] + [InlineData("tiff")] + [InlineData("webp")] + public void Can_Load_Using_MemoryStream(string extension) { - var fileBytes = File.ReadAllBytes(Constants.RootDir + "file_types/receipt.jpg"); + var fileBytes = File.ReadAllBytes(Constants.RootDir + $"file_types/receipt.{extension}"); var memoryStream = new MemoryStream(fileBytes); - Assert.IsType(new LocalInputSource(memoryStream, "receipt.jpg")); + Assert.IsType(new LocalInputSource(memoryStream, $"receipt.{extension}")); } [Fact] @@ -98,15 +116,23 @@ public void PDF_Input_Has_Text() Assert.False(hasNoSourceTextSinceItsImage.HasSourceText()); } - [Fact] - public void Image_Quality_Compress_From_Input_Source() + [Theory] + // Not all extensions work! + [InlineData("heif")] + [InlineData("jpg")] + [InlineData("jpga")] + [InlineData("png")] + [InlineData("webp")] + public void Image_Quality_Compress_From_Input_Source(string extension) { - var receiptInput = new LocalInputSource(Constants.RootDir + "file_types/receipt.jpg"); + var receiptInput = new LocalInputSource(Constants.RootDir + $"file_types/receipt.{extension}"); receiptInput.Compress(40); - File.WriteAllBytes("Resources/output/compress_indirect.jpg", receiptInput.FileBytes); - Assert.True(true); - var initialFileInfo = new FileInfo(Constants.RootDir + "file_types/receipt.jpg"); - var renderedFileInfo = new FileInfo("Resources/output/compress_indirect.jpg"); + + File.WriteAllBytes($"Resources/output/compress_indirect.{extension}", receiptInput.FileBytes); + + var initialFileInfo = new FileInfo(Constants.RootDir + $"file_types/receipt.{extension}"); + var renderedFileInfo = new FileInfo($"Resources/output/compress_indirect.{extension}"); + Assert.True(renderedFileInfo.Length < initialFileInfo.Length); }