mirror of
https://github.com/UglyToad/PdfPig.git
synced 2025-10-15 19:54:52 +08:00
add test coverage for direct object finder
This commit is contained in:
@@ -0,0 +1,106 @@
|
|||||||
|
namespace UglyToad.PdfPig.Tests.Parser.Parts
|
||||||
|
{
|
||||||
|
using System;
|
||||||
|
using Exceptions;
|
||||||
|
using PdfPig.Parser.Parts;
|
||||||
|
using PdfPig.Tokens;
|
||||||
|
using Tokens;
|
||||||
|
using Xunit;
|
||||||
|
|
||||||
|
public class DirectObjectFinderTests
|
||||||
|
{
|
||||||
|
private readonly TestPdfTokenScanner scanner = new TestPdfTokenScanner();
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void TryGetCanFollowMultipleReferenceLinks()
|
||||||
|
{
|
||||||
|
var reference1 = new IndirectReference(7, 0);
|
||||||
|
var reference2 = new IndirectReference(9, 0);
|
||||||
|
|
||||||
|
scanner.Objects[reference1] = new ObjectToken(10, reference1, new IndirectReferenceToken(reference2));
|
||||||
|
scanner.Objects[reference2] = new ObjectToken(12, reference2, new NumericToken(69));
|
||||||
|
|
||||||
|
Assert.True(DirectObjectFinder.TryGet(new IndirectReferenceToken(reference1), scanner, out NumericToken result));
|
||||||
|
|
||||||
|
Assert.Equal(69, result.Int);
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void GetCanFollowMultipleReferenceLinks()
|
||||||
|
{
|
||||||
|
var reference1 = new IndirectReference(7, 0);
|
||||||
|
var reference2 = new IndirectReference(9, 0);
|
||||||
|
|
||||||
|
scanner.Objects[reference1] = new ObjectToken(10, reference1, new IndirectReferenceToken(reference2));
|
||||||
|
scanner.Objects[reference2] = new ObjectToken(12, reference2, new NumericToken(69));
|
||||||
|
|
||||||
|
var result = DirectObjectFinder.Get<NumericToken>(reference1, scanner);
|
||||||
|
|
||||||
|
Assert.Equal(69, result.Int);
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void GetTokenCanFollowMultipleReferenceLinks()
|
||||||
|
{
|
||||||
|
var reference1 = new IndirectReference(7, 0);
|
||||||
|
var reference2 = new IndirectReference(9, 0);
|
||||||
|
|
||||||
|
scanner.Objects[reference1] = new ObjectToken(10, reference1, new IndirectReferenceToken(reference2));
|
||||||
|
scanner.Objects[reference2] = new ObjectToken(12, reference2, new NumericToken(69));
|
||||||
|
|
||||||
|
var result = DirectObjectFinder.Get<NumericToken>(new IndirectReferenceToken(reference1), scanner);
|
||||||
|
|
||||||
|
Assert.Equal(69, result.Int);
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void GetReturnsSingleItemFromArray()
|
||||||
|
{
|
||||||
|
var reference = new IndirectReference(10, 0);
|
||||||
|
|
||||||
|
const string expected = "Goopy";
|
||||||
|
scanner.Objects[reference] = new ObjectToken(10, reference, new ArrayToken(new []
|
||||||
|
{
|
||||||
|
new StringToken(expected)
|
||||||
|
}));
|
||||||
|
|
||||||
|
var result = DirectObjectFinder.Get<StringToken>(reference, scanner);
|
||||||
|
|
||||||
|
Assert.Equal(expected, result.Data);
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void GetFollowsSingleIndirectReferenceFromArray()
|
||||||
|
{
|
||||||
|
var reference = new IndirectReference(10, 0);
|
||||||
|
var reference2 = new IndirectReference(69, 0);
|
||||||
|
|
||||||
|
const string expected = "Goopy";
|
||||||
|
scanner.Objects[reference] = new ObjectToken(10, reference, new ArrayToken(new[]
|
||||||
|
{
|
||||||
|
new IndirectReferenceToken(reference2)
|
||||||
|
}));
|
||||||
|
|
||||||
|
scanner.Objects[reference2] = new ObjectToken(69, reference2, new StringToken(expected));
|
||||||
|
|
||||||
|
var result = DirectObjectFinder.Get<StringToken>(reference, scanner);
|
||||||
|
|
||||||
|
Assert.Equal(expected, result.Data);
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void GetThrowsOnInvalidArray()
|
||||||
|
{
|
||||||
|
var reference = new IndirectReference(10, 0);
|
||||||
|
|
||||||
|
scanner.Objects[reference] = new ObjectToken(10, reference, new ArrayToken(new[]
|
||||||
|
{
|
||||||
|
new NumericToken(5), new NumericToken(6), new NumericToken(0)
|
||||||
|
}));
|
||||||
|
|
||||||
|
Action action = () => DirectObjectFinder.Get<StringToken>(reference, scanner);
|
||||||
|
|
||||||
|
Assert.Throws<PdfDocumentFormatException>(action);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@@ -2,12 +2,15 @@
|
|||||||
namespace UglyToad.PdfPig.Tests.Tokens
|
namespace UglyToad.PdfPig.Tests.Tokens
|
||||||
{
|
{
|
||||||
using System;
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
using PdfPig.Tokenization;
|
using PdfPig.Tokenization;
|
||||||
using PdfPig.Tokenization.Scanner;
|
using PdfPig.Tokenization.Scanner;
|
||||||
using PdfPig.Tokens;
|
using PdfPig.Tokens;
|
||||||
|
|
||||||
internal class TestPdfTokenScanner : IPdfTokenScanner
|
internal class TestPdfTokenScanner : IPdfTokenScanner
|
||||||
{
|
{
|
||||||
|
public Dictionary<IndirectReference, ObjectToken> Objects { get; }
|
||||||
|
= new Dictionary<IndirectReference, ObjectToken>();
|
||||||
public bool MoveNext()
|
public bool MoveNext()
|
||||||
{
|
{
|
||||||
throw new NotImplementedException();
|
throw new NotImplementedException();
|
||||||
@@ -37,7 +40,7 @@ namespace UglyToad.PdfPig.Tests.Tokens
|
|||||||
|
|
||||||
public ObjectToken Get(IndirectReference reference)
|
public ObjectToken Get(IndirectReference reference)
|
||||||
{
|
{
|
||||||
throw new NotImplementedException();
|
return Objects[reference];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user