From 29adece98394bd7c39705dd954607b53d206e4c0 Mon Sep 17 00:00:00 2001 From: Fred Natzke Date: Wed, 30 Nov 2022 11:10:52 +1000 Subject: [PATCH] Original #516 fix causes Tests to fail. Alternative to use pagesByNumber?.Count in Catalog for discovered pages. Some other unrelated tests failed due to source using single rather than two character newlines. Changed to test string itself for '\r' rather than environment is Unix --- .../Parser/Parts/FileHeaderParserTests.cs | 30 +++++++++++-------- src/UglyToad.PdfPig.Tests/TestEnvironment.cs | 3 +- src/UglyToad.PdfPig/Content/Catalog.cs | 7 ++++- src/UglyToad.PdfPig/Content/Pages.cs | 9 +++--- 4 files changed, 30 insertions(+), 19 deletions(-) diff --git a/src/UglyToad.PdfPig.Tests/Parser/Parts/FileHeaderParserTests.cs b/src/UglyToad.PdfPig.Tests/Parser/Parts/FileHeaderParserTests.cs index 374b8396..6a50d0c6 100644 --- a/src/UglyToad.PdfPig.Tests/Parser/Parts/FileHeaderParserTests.cs +++ b/src/UglyToad.PdfPig.Tests/Parser/Parts/FileHeaderParserTests.cs @@ -51,7 +51,7 @@ var result = FileHeaderParser.Parse(scanner.scanner, scanner.bytes, false, log); Assert.Equal(1.2m, result.Version); - Assert.Equal(TestEnvironment.IsUnixPlatform ? 7 : 9, result.OffsetInFile); + Assert.Equal(TestEnvironment.IsSingleByteNewLine(input) ? 7 : 9, result.OffsetInFile); } [Fact] @@ -66,38 +66,42 @@ [Fact] public void HeaderPrecededByJunkNonLenientDoesNotThrow() - { - var scanner = StringBytesTestConverter.Scanner(@"one - %PDF-1.2"); + { + var input = @"one + %PDF-1.2"; + var scanner = StringBytesTestConverter.Scanner(input); var result = FileHeaderParser.Parse(scanner.scanner, scanner.bytes, false, log); Assert.Equal(1.2m, result.Version); - Assert.Equal(TestEnvironment.IsUnixPlatform ? 12 : 13, result.OffsetInFile); + Assert.Equal(TestEnvironment.IsSingleByteNewLine(input) ? 12 : 13, result.OffsetInFile); } [Fact] public void HeaderPrecededByJunkLenientReads() - { - var scanner = StringBytesTestConverter.Scanner(@"one - %PDF-1.7"); + { + var input = @"one + %PDF-1.7"; + var scanner = StringBytesTestConverter.Scanner(input); var result = FileHeaderParser.Parse(scanner.scanner, scanner.bytes, true, log); Assert.Equal(1.7m, result.Version); - Assert.Equal(TestEnvironment.IsUnixPlatform ? 12 : 13, result.OffsetInFile); + Assert.Equal(TestEnvironment.IsSingleByteNewLine(input) ? 12 : 13, result.OffsetInFile); } [Fact] public void HeaderPrecededByJunkDoesNotThrow() - { - var scanner = StringBytesTestConverter.Scanner(@"one two -three %PDF-1.6"); + { + var s = @"one two +three %PDF-1.6"; + + var scanner = StringBytesTestConverter.Scanner(s); var result = FileHeaderParser.Parse(scanner.scanner, scanner.bytes, true, log); Assert.Equal(1.6m, result.Version); - Assert.Equal(TestEnvironment.IsUnixPlatform ? 14 : 15, result.OffsetInFile); + Assert.Equal(TestEnvironment.IsSingleByteNewLine(s) ? 14 : 15, result.OffsetInFile); } [Fact] diff --git a/src/UglyToad.PdfPig.Tests/TestEnvironment.cs b/src/UglyToad.PdfPig.Tests/TestEnvironment.cs index abc44914..17545a27 100644 --- a/src/UglyToad.PdfPig.Tests/TestEnvironment.cs +++ b/src/UglyToad.PdfPig.Tests/TestEnvironment.cs @@ -4,6 +4,7 @@ public static class TestEnvironment { - public static readonly bool IsUnixPlatform = Environment.NewLine.Length == 1; + public static bool IsSingleByteNewLine(string s) => s.IndexOf('\r') < 0; + } } diff --git a/src/UglyToad.PdfPig/Content/Catalog.cs b/src/UglyToad.PdfPig/Content/Catalog.cs index 61906602..9bbdd71f 100644 --- a/src/UglyToad.PdfPig/Content/Catalog.cs +++ b/src/UglyToad.PdfPig/Content/Catalog.cs @@ -29,7 +29,12 @@ /// /// The page tree for this document containing all pages, page numbers and their dictionaries. /// - public PageTreeNode PageTree { get; } + public PageTreeNode PageTree { get; } + + /// + /// Number of discovered pages. + /// + public int? NumberOfDiscoveredPages => pagesByNumber?.Count; /// /// Create a new . diff --git a/src/UglyToad.PdfPig/Content/Pages.cs b/src/UglyToad.PdfPig/Content/Pages.cs index 8d25b2db..3bd55c09 100644 --- a/src/UglyToad.PdfPig/Content/Pages.cs +++ b/src/UglyToad.PdfPig/Content/Pages.cs @@ -21,11 +21,12 @@ this.pdfScanner = pdfScanner ?? throw new ArgumentNullException(nameof(pdfScanner)); Count = catalog.PagesDictionary.GetIntOrDefault(NameToken.Count); - var CountOfPagesByPagesTree = catalog.PageTree.Children.Count; - if (Count != CountOfPagesByPagesTree) + var CountOfPagesByPagesTree = catalog.PageTree.Children.Count; + var numberOfDiscoveredPages = catalog.NumberOfDiscoveredPages; + if (numberOfDiscoveredPages is null == false && Count != numberOfDiscoveredPages) { - //log.Warning($"Dicrionary Page Count {Count} different to discovered pages {CountOfPagesByPagesTree}. Using {CountOfPagesByPagesTree}."); - Count = CountOfPagesByPagesTree; + //log.Warning($"Dictionary Page Count {Count} different to discovered pages {numberOfDiscoveredPages}. Using {numberOfDiscoveredPages}."); + Count = numberOfDiscoveredPages.Value; } }