Files
PdfPig/src/UglyToad.PdfPig.Tests/Parser/Parts/BruteForceSearcherTests.cs
Eliot Jones a6541f1cfc fix test references
update references for unit tests to reference new core and fonts projects. all tests except the public api scanner tests now run successfully.
2020-01-04 22:56:41 +00:00

88 lines
2.6 KiB
C#
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// ReSharper disable ObjectCreationAsStatement
namespace UglyToad.PdfPig.Tests.Parser.Parts
{
using System;
using PdfPig.Core;
using PdfPig.Parser.Parts;
using Xunit;
public class BruteForceSearcherTests
{
private const string TestData = @"%PDF-1.5
%¿÷¢þ
2 17 obj
<< /Linearized 1 /L 26082 /H [ 722 130 ] /O 6 /E 25807 /N 1 /T 25806 >>
endobj
3 0 obj
<< /Type /XRef /Length 58 /Filter /FlateDecode /DecodeParms << /Columns 4 /Predictor 12 >> /W [ 1 2 1 ] /Index [ 2 20 ] /Info 13 0 R /Root 4 0 R /Size 22 /Prev 25807 /ID [<2ee88f3ee8a59b4041754ecb5960c518><2ee88f3ee8a59b4041754ecb5960c518>] >>
stream
xœcbdàg`b`8 $˜N€XF@‚± DÜÌå@ÂÞ$$$¦ƒXê LŒó~30A
endstream
endobj
4 0 obj
<< /Pages 14 0 R /Type /Catalog >>
endobj
5 0 obj
<< /Filter /FlateDecode /S 36 /Length 53 >>
stream
xœc```g``ºÄ
endstream
endobj
startxref
216
%%EOF";
[Fact]
public void ReaderNull_Throws()
{
Action action = () => new BruteForceSearcher(null);
Assert.Throws<ArgumentNullException>(action);
}
[Fact]
public void SearcherFindsCorrectObjects()
{
var input = new ByteArrayInputBytes(OtherEncodings.StringAsLatin1Bytes(TestData));
var searcher = new BruteForceSearcher(input);
var locations = searcher.GetObjectLocations();
Assert.Equal(4, locations.Count);
Assert.Equal(locations.Values, new long[]
{
TestData.IndexOf("2 17 obj", StringComparison.OrdinalIgnoreCase) + 1,
TestData.IndexOf("3 0 obj", StringComparison.OrdinalIgnoreCase) + 1,
TestData.IndexOf("4 0 obj", StringComparison.OrdinalIgnoreCase) + 1,
TestData.IndexOf("5 0 obj", StringComparison.OrdinalIgnoreCase) + 1
});
}
[Fact]
public void ReaderOnlyCallsOnce()
{
var reader = StringBytesTestConverter.Convert(TestData, false);
var searcher = new BruteForceSearcher(reader.Bytes);
var locations = searcher.GetObjectLocations();
Assert.Equal(4, locations.Count);
var newLocations = searcher.GetObjectLocations();
Assert.Equal(4, locations.Count);
foreach (var keyValuePair in locations)
{
Assert.Contains(newLocations.Keys, x => x.Equals(keyValuePair.Key));
}
}
}
}