| // Copyright 2019 The PDFium Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "core/fxcrt/cfx_seekablestreamproxy.h" |
| |
| #include <iterator> |
| |
| #include "core/fxcrt/cfx_read_only_span_stream.h" |
| #include "core/fxcrt/retain_ptr.h" |
| #include "testing/gtest/include/gtest/gtest.h" |
| #include "third_party/base/span.h" |
| |
| TEST(SeekableStreamProxyTest, NullStream) { |
| auto proxy_stream = pdfium::MakeRetain<CFX_SeekableStreamProxy>( |
| pdfium::MakeRetain<CFX_ReadOnlySpanStream>( |
| pdfium::make_span<const uint8_t>(nullptr, 0))); |
| |
| wchar_t buffer[16]; |
| EXPECT_EQ(0u, proxy_stream->ReadBlock(buffer, std::size(buffer))); |
| } |
| |
| TEST(SeekableStreamProxyTest, DefaultStreamBOMNotRecognized) { |
| const char data[] = "abcd"; |
| auto proxy_stream = pdfium::MakeRetain<CFX_SeekableStreamProxy>( |
| pdfium::MakeRetain<CFX_ReadOnlySpanStream>(pdfium::make_span( |
| reinterpret_cast<const uint8_t*>(data), sizeof(data) - 1))); |
| |
| wchar_t buffer[16]; |
| EXPECT_EQ(0u, proxy_stream->ReadBlock(buffer, std::size(buffer))); |
| } |
| |
| TEST(SeekableStreamProxyTest, UTF8Stream) { |
| const char data[] = "\xEF\xBB\xBF*\xC2\xA2*"; |
| auto proxy_stream = pdfium::MakeRetain<CFX_SeekableStreamProxy>( |
| pdfium::MakeRetain<CFX_ReadOnlySpanStream>(pdfium::make_span( |
| reinterpret_cast<const uint8_t*>(data), sizeof(data) - 1))); |
| |
| wchar_t buffer[16]; |
| EXPECT_EQ(3u, proxy_stream->ReadBlock(buffer, std::size(buffer))); |
| EXPECT_EQ(L'*', buffer[0]); |
| EXPECT_EQ(L'\u00A2', buffer[1]); |
| EXPECT_EQ(L'*', buffer[2]); |
| } |
| |
| TEST(SeekableStreamProxyTest, UTF16LEStream) { |
| const char data[] = "\xFF\xFE\x41\x00\x42\x01"; |
| auto proxy_stream = pdfium::MakeRetain<CFX_SeekableStreamProxy>( |
| pdfium::MakeRetain<CFX_ReadOnlySpanStream>(pdfium::make_span( |
| reinterpret_cast<const uint8_t*>(data), sizeof(data) - 1))); |
| |
| wchar_t buffer[16]; |
| EXPECT_EQ(2u, proxy_stream->ReadBlock(buffer, std::size(buffer))); |
| EXPECT_EQ(L'A', buffer[0]); |
| EXPECT_EQ(L'\u0142', buffer[1]); |
| } |
| |
| TEST(SeekableStreamProxyTest, UTF16BEStream) { |
| const char data[] = "\xFE\xFF\x00\x41\x01\x42"; |
| auto proxy_stream = pdfium::MakeRetain<CFX_SeekableStreamProxy>( |
| pdfium::MakeRetain<CFX_ReadOnlySpanStream>(pdfium::make_span( |
| reinterpret_cast<const uint8_t*>(data), sizeof(data) - 1))); |
| |
| wchar_t buffer[16]; |
| EXPECT_EQ(2u, proxy_stream->ReadBlock(buffer, std::size(buffer))); |
| EXPECT_EQ(L'A', buffer[0]); |
| EXPECT_EQ(L'\u0142', buffer[1]); |
| } |