blob: e701e65c3a84a9af3d341d453491dd655eba2dbe [file] [log] [blame]
// 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 "core/fxcrt/span.h"
#include "testing/gtest/include/gtest/gtest.h"
TEST(SeekableStreamProxyTest, NullStream) {
auto proxy_stream = pdfium::MakeRetain<CFX_SeekableStreamProxy>(
pdfium::MakeRetain<CFX_ReadOnlySpanStream>(
pdfium::span<const uint8_t>()));
wchar_t buffer[16];
EXPECT_EQ(0u, proxy_stream->ReadBlock(buffer));
}
TEST(SeekableStreamProxyTest, DefaultStreamBOMNotRecognized) {
ByteStringView data = "abcd";
auto proxy_stream = pdfium::MakeRetain<CFX_SeekableStreamProxy>(
pdfium::MakeRetain<CFX_ReadOnlySpanStream>(data.unsigned_span()));
wchar_t buffer[16];
EXPECT_EQ(0u, proxy_stream->ReadBlock(buffer));
}
TEST(SeekableStreamProxyTest, UTF8Stream) {
ByteStringView data = "\xEF\xBB\xBF*\xC2\xA2*";
auto proxy_stream = pdfium::MakeRetain<CFX_SeekableStreamProxy>(
pdfium::MakeRetain<CFX_ReadOnlySpanStream>(data.unsigned_span()));
wchar_t buffer[16];
EXPECT_EQ(3u, proxy_stream->ReadBlock(buffer));
EXPECT_EQ(L'*', buffer[0]);
EXPECT_EQ(L'\u00A2', buffer[1]);
EXPECT_EQ(L'*', buffer[2]);
}
TEST(SeekableStreamProxyTest, UTF16LEStream) {
// Test embedded NUL not ending in NUL.
const uint8_t data[] = {0xFF, 0xFE, 0x41, 0x00, 0x42, 0x01};
auto proxy_stream = pdfium::MakeRetain<CFX_SeekableStreamProxy>(
pdfium::MakeRetain<CFX_ReadOnlySpanStream>(data));
wchar_t buffer[16];
EXPECT_EQ(2u, proxy_stream->ReadBlock(buffer));
EXPECT_EQ(L'A', buffer[0]);
EXPECT_EQ(L'\u0142', buffer[1]);
}
TEST(SeekableStreamProxyTest, UTF16BEStream) {
const uint8_t data[] = {0xFE, 0xFF, 0x00, 0x41, 0x01, 0x42};
auto proxy_stream = pdfium::MakeRetain<CFX_SeekableStreamProxy>(
pdfium::MakeRetain<CFX_ReadOnlySpanStream>(data));
wchar_t buffer[16];
EXPECT_EQ(2u, proxy_stream->ReadBlock(buffer));
EXPECT_EQ(L'A', buffer[0]);
EXPECT_EQ(L'\u0142', buffer[1]);
}