mirror of
https://github.com/UglyToad/PdfPig.git
synced 2025-10-14 19:05:01 +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
|
||||
{
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using PdfPig.Tokenization;
|
||||
using PdfPig.Tokenization.Scanner;
|
||||
using PdfPig.Tokens;
|
||||
|
||||
internal class TestPdfTokenScanner : IPdfTokenScanner
|
||||
{
|
||||
public Dictionary<IndirectReference, ObjectToken> Objects { get; }
|
||||
= new Dictionary<IndirectReference, ObjectToken>();
|
||||
public bool MoveNext()
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
@@ -37,7 +40,7 @@ namespace UglyToad.PdfPig.Tests.Tokens
|
||||
|
||||
public ObjectToken Get(IndirectReference reference)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
return Objects[reference];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user