From 0441fcb06f9223e59c6f136c3f1fefe5871cc2a9 Mon Sep 17 00:00:00 2001 From: Simon Cropp Date: Fri, 2 Oct 2026 09:18:43 +1000 Subject: [PATCH 1/4] Add outputs option to Initialize --- readme.md | 21 +++++++++++++ src/Directory.Build.props | 2 +- src/StaticSettingsTests/ModuleInitializer.cs | 10 ++++++ .../StaticSettingsTests.csproj | 19 ++++++++++++ .../TextOnlyTests.VerifyPdf#pdf.verified.pdf | Bin 0 -> 2718 bytes .../TextOnlyTests.VerifyPdf.verified.txt | 29 ++++++++++++++++++ src/StaticSettingsTests/TextOnlyTests.cs | 6 ++++ src/Verify.DocNet.slnx | 1 + src/Verify.DocNet/DocNetOutputs.cs | 18 +++++++++++ src/Verify.DocNet/VerifyDocNet.cs | 6 +++- src/Verify.DocNet/VerifyDocNet_Pdf.cs | 11 +++++-- 11 files changed, 119 insertions(+), 4 deletions(-) create mode 100644 src/StaticSettingsTests/ModuleInitializer.cs create mode 100644 src/StaticSettingsTests/StaticSettingsTests.csproj create mode 100644 src/StaticSettingsTests/TextOnlyTests.VerifyPdf#pdf.verified.pdf create mode 100644 src/StaticSettingsTests/TextOnlyTests.VerifyPdf.verified.txt create mode 100644 src/StaticSettingsTests/TextOnlyTests.cs create mode 100644 src/Verify.DocNet/DocNetOutputs.cs diff --git a/readme.md b/readme.md index adf8e36..1ed3a72 100644 --- a/readme.md +++ b/readme.md @@ -52,6 +52,27 @@ public static void Initialize() `VerifyImageMagick.RegisterComparers` (provided by https://github.com/VerifyTests/Verify.ImageMagick) allows minor image changes to be ignored. +### Outputs + +By default each pdf is split into a png per page and the text of each page (in the info). `Initialize` accepts a `DocNetOutputs` flags enum to choose which of these are produced globally: + + * `Png`: render each page to a png. + * `Text`: extract the text of each page into the info. + * `All` (default): both. + +Omitted outputs are not rendered/extracted at all. The source pdf snapshot is not affected (use `VerifierSettings.ExcludeTargets("pdf")` for that). + + + +```cs +[ModuleInitializer] +public static void Initialize() => + VerifyDocNet.Initialize(DocNetOutputs.Text); +``` +snippet source | anchor + + + ### Verify a file diff --git a/src/Directory.Build.props b/src/Directory.Build.props index 7b738ea..a14812b 100644 --- a/src/Directory.Build.props +++ b/src/Directory.Build.props @@ -2,7 +2,7 @@ CS1591;CS0649;NU1608;NU1109 - 3.6.0 + 3.7.0 1.0.0 preview false diff --git a/src/StaticSettingsTests/ModuleInitializer.cs b/src/StaticSettingsTests/ModuleInitializer.cs new file mode 100644 index 0000000..00fcd16 --- /dev/null +++ b/src/StaticSettingsTests/ModuleInitializer.cs @@ -0,0 +1,10 @@ +public static class ModuleInitializer +{ + #region InitializeOutputs + + [ModuleInitializer] + public static void Initialize() => + VerifyDocNet.Initialize(DocNetOutputs.Text); + + #endregion +} diff --git a/src/StaticSettingsTests/StaticSettingsTests.csproj b/src/StaticSettingsTests/StaticSettingsTests.csproj new file mode 100644 index 0000000..11fd57c --- /dev/null +++ b/src/StaticSettingsTests/StaticSettingsTests.csproj @@ -0,0 +1,19 @@ + + + net10.0 + Exe + + + + + + + + + + + + + + + diff --git a/src/StaticSettingsTests/TextOnlyTests.VerifyPdf#pdf.verified.pdf b/src/StaticSettingsTests/TextOnlyTests.VerifyPdf#pdf.verified.pdf new file mode 100644 index 0000000000000000000000000000000000000000..f2036d9327494a00a0881d5aa5195b600bb778f6 GIT binary patch literal 2718 zcmbtW2~ZPP7#>@-l^Ug5RI1<_ML}V&oWvw51k~1`28s$^OZEj;lHItwKoaVVTD+=^ zB3gAu$J$Xx>*!cS9WSh)rA|G@vpRTGtgVbk?2Kcj>e%-pA%F*+>CR5F?|Jt z4f#U`Eg1RLXPZ`b8~(wZnllys&N91WtLHKY=R|exzT?AXe|1fX=sY%cPdxLpehA(t zdE&xjia$J;9#l>Ac(a%-we`JD;9b8tQC7%W?*BMOsz3Qu6EWX5IBi+Zj)b3vFxgkt zv0v0h-t#rcxg(!dBx%b0N3L+=BA1T8e|=`u_q%FmMpVwL8+y3mhN9wFmTTYnyQK^I zPW?6i>g4K!_afH+<1RT6cP{OGt@hTcnCEP9heu`R!BbZ(K6~Ir*vsfczt{K zpIEzbyZ=#QRDY@ej9%%{8%H<(nR!G?6VtqBUWiX_m3Hd+(!8I&b~UeX4&PgB+;wVH z&*oK*8!f8FGgIrW;5)%{uANx@Hc3DE})Gb-EVdb$|C1m(Q|9tYSDAk?{?n9!g*U6Fq+Ge6j9GMQ#qZA?)$YTM(^ob|*8s(8ziD%aKDT>JX(%q+ zJUWsZb7o2HvH`=s^mm(a@Il`NXV-kPy|6>AsiNF}#4*eTIy#xfL+ZD?NH>1>)%>C6+c|F^YXyd;j3c?tcxF)TeiF|ruXRsrps$Q%XRgG23C2WP3^lh zNB?sFr57*z(W0tiN%65fy}Vb zjwK@Jkgq=E3q^=6umdsHHp+rQA;MI6B2MBYmVo8SvfDrqMMXup$gpnKf!hUF927dh z$U?J2lYtX>3lxo5i-Bx)WyKLzfqlzVs3KHg%QgfnZ`QZT)^R~8(rfi0k{L&M+>AXR z$XE`@<#?0Qf9R+Z<5-h&lEz9}-N_)28{-o}x-Tum?#s6)vdR%=qsQQJxm~b3n8)Sh zC438#*@HH1DgU^fMgdrw+x$#p@2+|P#~L> z%CIi4!ot014$Dh;pmdaxukWGkfA`fjYtMZf}K4nvSN=KshV zBdRRqWrSrJ0z3kU8D_+ogutCal8`{~&N32hKp`hV%n$@;Fn0@J(?kFnWKcT^TESj9 z!q=t4+n!qpgq*BagGI0xxZqd9SW93ztq#H427%IB`!+?(1fm3Y9|og>ppdBvV}tJy z4sj&e$w-o!1rDabDF@+gW{m_QQVU|4Us)hm;ZyT@Fo(_)jBZjE!PD{v)$)kIp&&7e zRD_m>X*C*^26HIFf;I|@8@e#Q*+%K%d!&tx*1<23Ha4y1b(@}k%|=n$*K$zw8*sG# zbze0NRVSEN78%Y7MD!Jy&iMdb8etOz8ACE_BgXO$0Yj<@A1&F&fY&>I% + VerifyFile("sample.pdf"); +} diff --git a/src/Verify.DocNet.slnx b/src/Verify.DocNet.slnx index 3c64655..09cf009 100644 --- a/src/Verify.DocNet.slnx +++ b/src/Verify.DocNet.slnx @@ -10,6 +10,7 @@ + \ No newline at end of file diff --git a/src/Verify.DocNet/DocNetOutputs.cs b/src/Verify.DocNet/DocNetOutputs.cs new file mode 100644 index 0000000..26081d5 --- /dev/null +++ b/src/Verify.DocNet/DocNetOutputs.cs @@ -0,0 +1,18 @@ +namespace VerifyTests; + +/// +/// Controls which outputs a pdf is split into. Passed to . +/// The source pdf snapshot is not controlled by this (use VerifierSettings.ExcludeTargets("pdf")). +/// +[Flags] +public enum DocNetOutputs +{ + /// Render each page to a png. When omitted, pages are not rendered. + Png = 1, + + /// Extract the text of each page into the info. When omitted, text is not extracted. + Text = 2, + + /// All outputs. + All = Png | Text +} diff --git a/src/Verify.DocNet/VerifyDocNet.cs b/src/Verify.DocNet/VerifyDocNet.cs index 1d7ca67..87f1793 100644 --- a/src/Verify.DocNet/VerifyDocNet.cs +++ b/src/Verify.DocNet/VerifyDocNet.cs @@ -4,7 +4,10 @@ public static partial class VerifyDocNet { public static bool Initialized { get; private set; } - public static void Initialize() + static DocNetOutputs outputs = DocNetOutputs.All; + + /// The outputs each pdf is split into. Defaults to . + public static void Initialize(DocNetOutputs outputs = DocNetOutputs.All) { if (Initialized) { @@ -12,6 +15,7 @@ public static void Initialize() } Initialized = true; + VerifyDocNet.outputs = outputs; InnerVerifier.ThrowIfVerifyHasBeenRun(); VerifierSettings.RegisterStreamConverter("pdf", Convert); diff --git a/src/Verify.DocNet/VerifyDocNet_Pdf.cs b/src/Verify.DocNet/VerifyDocNet_Pdf.cs index bbc9831..8209921 100644 --- a/src/Verify.DocNet/VerifyDocNet_Pdf.cs +++ b/src/Verify.DocNet/VerifyDocNet_Pdf.cs @@ -69,12 +69,21 @@ static ConversionResult Convert(string? name, IDocReader document, IReadOnlyDict } var preserveTransparency = settings.GetPreserveTransparency(); + var includePng = outputs.HasFlag(DocNetOutputs.Png); + var includeText = outputs.HasFlag(DocNetOutputs.Text); var targets = new List(); var pages = new List(); for (var index = start; index < pagesToInclude; index++) { using var reader = document.GetPageReader(index); + pages.Add(new() { Index = index, Text = includeText ? reader.GetText() : null }); + + if (!includePng) + { + continue; + } + var rawBytes = preserveTransparency ? reader.GetImage() : reader.GetImage(transparencyRemover); @@ -85,8 +94,6 @@ static ConversionResult Convert(string? name, IDocReader document, IReadOnlyDict var stream = new MemoryStream(); PngEncoder.WriteBgraAsPng(rawBytes, width, height, stream); targets.Add(new("png", stream, name)); - - pages.Add(new() { Index = index, Text = reader.GetText() }); } var info = new PdfInfo From fd48d0f3eec9dcf96d91e7fa6ef2f1574ea76ad8 Mon Sep 17 00:00:00 2001 From: Simon Cropp Date: Fri, 2 Oct 2026 09:28:30 +1000 Subject: [PATCH 2/4] Add None to outputs enum --- src/Verify.DocNet/DocNetOutputs.cs | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/Verify.DocNet/DocNetOutputs.cs b/src/Verify.DocNet/DocNetOutputs.cs index 26081d5..bbefe94 100644 --- a/src/Verify.DocNet/DocNetOutputs.cs +++ b/src/Verify.DocNet/DocNetOutputs.cs @@ -7,6 +7,9 @@ namespace VerifyTests; [Flags] public enum DocNetOutputs { + /// No outputs. Only the source document and info are emitted. + None = 0, + /// Render each page to a png. When omitted, pages are not rendered. Png = 1, From 6f4971dc8b4c3a972cf1818b72a78cc005e73c14 Mon Sep 17 00:00:00 2001 From: Simon Cropp Date: Fri, 2 Oct 2026 09:29:10 +1000 Subject: [PATCH 3/4] Drop net6.0 --- src/Verify.DocNet/Verify.DocNet.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Verify.DocNet/Verify.DocNet.csproj b/src/Verify.DocNet/Verify.DocNet.csproj index ccea32f..d9f74c6 100644 --- a/src/Verify.DocNet/Verify.DocNet.csproj +++ b/src/Verify.DocNet/Verify.DocNet.csproj @@ -1,6 +1,6 @@ - net6.0;net7.0;net8.0;net9.0;net10.0 + net7.0;net8.0;net9.0;net10.0 From d48322d6ca12d20f56e4f6cded8ccde9c070e416 Mon Sep 17 00:00:00 2001 From: Simon Cropp Date: Fri, 2 Oct 2026 09:30:25 +1000 Subject: [PATCH 4/4] Drop net7.0 --- src/Verify.DocNet/Verify.DocNet.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Verify.DocNet/Verify.DocNet.csproj b/src/Verify.DocNet/Verify.DocNet.csproj index d9f74c6..0385782 100644 --- a/src/Verify.DocNet/Verify.DocNet.csproj +++ b/src/Verify.DocNet/Verify.DocNet.csproj @@ -1,6 +1,6 @@ - net7.0;net8.0;net9.0;net10.0 + net8.0;net9.0;net10.0