Better Pdf verification for the excellent ApprovalTests.Net library
PowerShell C# Batchfile
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
.nuget
ApprovalTests.BetterPdfVerification.Tests
ApprovalTests.BetterPdfVerification
.gitattributes
.gitignore
ApprovalTests.BetterPdfVerification.sln
README.md

README.md

This project is a set of test assertions built on top of the amazing ApprovalTests.Net library. Unfortunately, even when using the Approvals.VerifyPdfFile() function [ApprovalTests has problems with pdf files]. At the moment this seems to be for the following reasons, though more can be forthcoming.

  • Pdf files have a CreationDate embedded in them, Of course pdf files can be created at different times and should still be identical to previously verified files. There is also some leniency as far as how this timestamp is denoted.
  • The same applies to the modification date (ModDate).
  • Finally, many pdf files have a trailer ID property that will always be unique.

This library normalizes these values before delegating to ApprovalTests to verify the normalized pdf file, therefore providing a more useful pdf file verifier.

Usage

Stream pdf = createSamplePdf();
PdfApprovals.Verify(pdf);

or

string pdfFilePath = getSamplePdfPath();
PdfApprovals.Verify(pdfFilePath);

The above will attempt to normalize inconsequential but inconsistent values in pdf files but will ultimately compare pdfs as text. Sometimes however there's no way around differences in pdf files (eg timezone differences which come from which computer the code ran on). In that case, the library will allow you to convert the pdf to a tiff image which will drop any metadata and allow you to compare them visually pixel-by-pixel. To use this functionality use

PdfApprovals.VerifyVisually(pdf);

The methods on PdfApprovals are simply wrappers for calls to PdfScrubbingVerifier or PdfAsImageVerifier. You can use these directly. This is especially useful if you want to provide a custom approval reporter or namer. To set these, both classes expose settable GetReporter and GetNamer fields.

Notes