diff options
author | Ryan Harrison <rharrison@chromium.org> | 2017-11-14 16:05:53 +0000 |
---|---|---|
committer | Chromium commit bot <commit-bot@chromium.org> | 2017-11-14 16:05:53 +0000 |
commit | ccf206a7731e0df773a4c5941736953446ec4d9d (patch) | |
tree | 1d7335125899d0e614b2afa05cfcfad90f74a596 /core/fxcrt/cfx_seekablemultistream_unittest.cpp | |
parent | f2d490650cef611f92e5d4a112c90647f08f054e (diff) | |
download | pdfium-ccf206a7731e0df773a4c5941736953446ec4d9d.tar.xz |
Move CXFA_FileRead out of XFA and rename
This code doesn't depend on XFA, but is only used by it. Moving it
out, so it will be easier for me to write some tools for extracting
data out of PDFs.
Bug:
Change-Id: Ic18613b46abed5124c47f539833b01b12c1c6e56
Reviewed-on: https://pdfium-review.googlesource.com/18410
Reviewed-by: dsinclair <dsinclair@chromium.org>
Commit-Queue: Ryan Harrison <rharrison@chromium.org>
Diffstat (limited to 'core/fxcrt/cfx_seekablemultistream_unittest.cpp')
-rw-r--r-- | core/fxcrt/cfx_seekablemultistream_unittest.cpp | 85 |
1 files changed, 85 insertions, 0 deletions
diff --git a/core/fxcrt/cfx_seekablemultistream_unittest.cpp b/core/fxcrt/cfx_seekablemultistream_unittest.cpp new file mode 100644 index 0000000000..89213b13af --- /dev/null +++ b/core/fxcrt/cfx_seekablemultistream_unittest.cpp @@ -0,0 +1,85 @@ +// Copyright 2016 PDFium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "core/fxcrt/cfx_seekablemultistream.h" + +#include <memory> +#include <vector> + +#include "core/fpdfapi/parser/cpdf_dictionary.h" +#include "core/fpdfapi/parser/cpdf_stream.h" +#include "core/fxcrt/fx_memory.h" +#include "testing/gtest/include/gtest/gtest.h" +#include "testing/test_support.h" +#include "third_party/base/ptr_util.h" + +TEST(CFX_SeekableMultiStreamTest, NoStreams) { + std::vector<CPDF_Stream*> streams; + auto fileread = pdfium::MakeRetain<CFX_SeekableMultiStream>(streams); + + uint8_t output_buffer[16]; + memset(output_buffer, 0xbd, sizeof(output_buffer)); + EXPECT_FALSE(fileread->ReadBlock(output_buffer, 0, 0)); + EXPECT_EQ(0xbd, output_buffer[0]); +} + +TEST(CXFAFileReadTest, EmptyStreams) { + std::vector<CPDF_Stream*> streams; + auto stream1 = pdfium::MakeUnique<CPDF_Stream>(); + streams.push_back(stream1.get()); + auto fileread = pdfium::MakeRetain<CFX_SeekableMultiStream>(streams); + + uint8_t output_buffer[16]; + memset(output_buffer, 0xbd, sizeof(output_buffer)); + EXPECT_FALSE(fileread->ReadBlock(output_buffer, 0, 0)); + EXPECT_EQ(0xbd, output_buffer[0]); +} + +TEST(CXFAFileReadTest, NormalStreams) { + std::vector<CPDF_Stream*> streams; + auto stream1 = pdfium::MakeUnique<CPDF_Stream>(); + auto stream2 = pdfium::MakeUnique<CPDF_Stream>(); + auto stream3 = pdfium::MakeUnique<CPDF_Stream>(); + + // 16 chars total. + stream1->InitStream(reinterpret_cast<const uint8_t*>("one t"), 5, + pdfium::MakeUnique<CPDF_Dictionary>()); + stream2->InitStream(reinterpret_cast<const uint8_t*>("wo "), 3, + pdfium::MakeUnique<CPDF_Dictionary>()); + stream3->InitStream(reinterpret_cast<const uint8_t*>("three!!!"), 8, + pdfium::MakeUnique<CPDF_Dictionary>()); + + streams.push_back(stream1.get()); + streams.push_back(stream2.get()); + streams.push_back(stream3.get()); + auto fileread = pdfium::MakeRetain<CFX_SeekableMultiStream>(streams); + + uint8_t output_buffer[16]; + memset(output_buffer, 0xbd, sizeof(output_buffer)); + EXPECT_TRUE(fileread->ReadBlock(output_buffer, 0, 0)); + EXPECT_EQ(0xbd, output_buffer[0]); + + memset(output_buffer, 0xbd, sizeof(output_buffer)); + EXPECT_TRUE(fileread->ReadBlock(output_buffer, 1, 0)); + EXPECT_EQ(0xbd, output_buffer[0]); + + memset(output_buffer, 0xbd, sizeof(output_buffer)); + EXPECT_TRUE(fileread->ReadBlock(output_buffer, 0, 1)); + EXPECT_EQ(0, memcmp(output_buffer, "o", 1)); + EXPECT_EQ(0xbd, output_buffer[1]); + + memset(output_buffer, 0xbd, sizeof(output_buffer)); + EXPECT_TRUE(fileread->ReadBlock(output_buffer, 0, sizeof(output_buffer))); + EXPECT_EQ(0, memcmp(output_buffer, "one two three!!!", 16)); + + memset(output_buffer, 0xbd, sizeof(output_buffer)); + EXPECT_TRUE(fileread->ReadBlock(output_buffer, 2, 10)); + EXPECT_EQ(0, memcmp(output_buffer, "e two thre", 10)); + EXPECT_EQ(0xbd, output_buffer[11]); + + memset(output_buffer, 0xbd, sizeof(output_buffer)); + EXPECT_FALSE(fileread->ReadBlock(output_buffer, 1, sizeof(output_buffer))); + EXPECT_EQ(0, memcmp(output_buffer, "ne two three!!!", 15)); + EXPECT_EQ(0xbd, output_buffer[15]); +} |