From 823c26ae904b3431475c750d0bda1ab1be7e2fdc Mon Sep 17 00:00:00 2001 From: Wei Li Date: Thu, 5 Nov 2015 13:39:14 -0800 Subject: Merge to XFA: Add base test for RebuildCrossRef function. This tests whether RebuildCrossRef could handle well-formatted pdf file. R=thestig@chromium.org Review URL: https://codereview.chromium.org/1409013005 . (cherry picked from commit 4544797e8998a31e7bc3f5439a5982f7f66dff26) Review URL: https://codereview.chromium.org/1413343004 . --- .../fpdf_parser/fpdf_parser_parser_unittest.cpp | 41 ++++++++++++++++++++++ 1 file changed, 41 insertions(+) (limited to 'core') diff --git a/core/src/fpdfapi/fpdf_parser/fpdf_parser_parser_unittest.cpp b/core/src/fpdfapi/fpdf_parser/fpdf_parser_parser_unittest.cpp index 827d1cec28..73b46b52c2 100644 --- a/core/src/fpdfapi/fpdf_parser/fpdf_parser_parser_unittest.cpp +++ b/core/src/fpdfapi/fpdf_parser/fpdf_parser_parser_unittest.cpp @@ -5,6 +5,28 @@ #include "testing/gtest/include/gtest/gtest.h" #include "../../../include/fpdfapi/fpdf_parser.h" +#include "../../../include/fxcrt/fx_stream.h" + +class CPDF_TestParser : public CPDF_Parser { + public: + CPDF_TestParser() {} + ~CPDF_TestParser() {} + + bool InitTest(const FX_CHAR* path) { + IFX_FileRead* pFileAccess = FX_CreateFileRead(path); + if (!pFileAccess) + return false; + + // For the test file, the header is set at the beginning. + m_Syntax.InitParser(pFileAccess, 0); + return true; + } + + private: + // Add test case as private friend so that RebuildCrossRef in CPDF_Parser + // can be accessed. + FRIEND_TEST(fpdf_parser_parser, RebuildCrossRefCorrectly); +}; // TODO(thestig) Using unique_ptr with ReleaseDeleter is still not ideal. // Come up or wait for something better. @@ -168,3 +190,22 @@ TEST(fpdf_parser_parser, ReadHexString) { EXPECT_EQ(1, parser.SavePos()); } } + +TEST(fpdf_parser_parser, RebuildCrossRefCorrectly) { + CPDF_TestParser parser; + ASSERT_TRUE( + parser.InitTest("testing/resources/parser_rebuildxref_correct.pdf")); + + ASSERT_TRUE(parser.RebuildCrossRef()); + const FX_FILESIZE offsets[] = {0, 15, 61, 154, 296, 374, 450}; + const FX_WORD versions[] = {0, 0, 2, 4, 6, 8, 0}; + static_assert(FX_ArraySize(offsets) == FX_ArraySize(versions), + "numbers of offsets and versions should be same."); + ASSERT_EQ(FX_ArraySize(offsets), parser.m_CrossRef.GetSize()); + ASSERT_EQ(FX_ArraySize(versions), parser.m_ObjVersion.GetSize()); + + for (int i = 0; i < FX_ArraySize(offsets); ++i) { + EXPECT_EQ(offsets[i], parser.m_CrossRef.GetAt(i)); + EXPECT_EQ(versions[i], parser.m_ObjVersion.GetAt(i)); + } +} -- cgit v1.2.3