// Copyright 2022 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/binary_buffer.h" #include #include #include "core/fxcrt/bytestring.h" #include "testing/gtest/include/gtest/gtest.h" namespace fxcrt { TEST(BinaryBuffer, Empty) { BinaryBuffer buffer; EXPECT_TRUE(buffer.IsEmpty()); EXPECT_EQ(0u, buffer.GetSize()); EXPECT_EQ(0u, buffer.GetLength()); EXPECT_TRUE(buffer.GetSpan().empty()); } TEST(BinaryBuffer, MoveConstruct) { BinaryBuffer buffer; buffer.AppendUint8(65u); BinaryBuffer buffer2(std::move(buffer)); EXPECT_TRUE(buffer.IsEmpty()); EXPECT_EQ(0u, buffer.GetSize()); EXPECT_EQ(0u, buffer.GetLength()); EXPECT_TRUE(buffer.GetSpan().empty()); EXPECT_FALSE(buffer2.IsEmpty()); EXPECT_EQ(1u, buffer2.GetSize()); EXPECT_EQ(1u, buffer2.GetLength()); EXPECT_EQ(65u, buffer2.GetSpan()[0]); } TEST(BinaryBuffer, MoveAssign) { BinaryBuffer buffer; BinaryBuffer buffer2; buffer.AppendUint8(65u); buffer2 = std::move(buffer); EXPECT_TRUE(buffer.IsEmpty()); EXPECT_EQ(0u, buffer.GetSize()); EXPECT_EQ(0u, buffer.GetLength()); EXPECT_TRUE(buffer.GetSpan().empty()); EXPECT_FALSE(buffer2.IsEmpty()); EXPECT_EQ(1u, buffer2.GetSize()); ASSERT_EQ(1u, buffer2.GetLength()); EXPECT_EQ(65u, buffer2.GetSpan()[0]); } TEST(BinaryBuffer, Clear) { BinaryBuffer buffer; buffer.AppendUint8(65u); buffer.Clear(); EXPECT_TRUE(buffer.IsEmpty()); EXPECT_EQ(0u, buffer.GetSize()); EXPECT_EQ(0u, buffer.GetLength()); EXPECT_TRUE(buffer.GetSpan().empty()); } TEST(BinaryBuffer, AppendSpans) { BinaryBuffer buffer; std::vector aaa(3, 65u); std::vector bbb(3, 66u); buffer.AppendSpan(aaa); buffer.AppendSpan(bbb); EXPECT_FALSE(buffer.IsEmpty()); EXPECT_EQ(6u, buffer.GetSize()); EXPECT_EQ(6u, buffer.GetLength()); EXPECT_EQ(65u, buffer.GetSpan()[0]); EXPECT_EQ(65u, buffer.GetSpan()[1]); EXPECT_EQ(65u, buffer.GetSpan()[2]); EXPECT_EQ(66u, buffer.GetSpan()[3]); EXPECT_EQ(66u, buffer.GetSpan()[4]); EXPECT_EQ(66u, buffer.GetSpan()[5]); } TEST(BinaryBuffer, AppendBlocks) { BinaryBuffer buffer; std::vector aaa(3, 65u); std::vector bbb(3, 66u); buffer.AppendSpan(aaa); buffer.AppendSpan(bbb); EXPECT_EQ(6u, buffer.GetSize()); EXPECT_EQ(6u, buffer.GetLength()); EXPECT_EQ(65u, buffer.GetSpan()[0]); EXPECT_EQ(65u, buffer.GetSpan()[1]); EXPECT_EQ(65u, buffer.GetSpan()[2]); EXPECT_EQ(66u, buffer.GetSpan()[3]); EXPECT_EQ(66u, buffer.GetSpan()[4]); EXPECT_EQ(66u, buffer.GetSpan()[5]); } TEST(BinaryBuffer, AppendStrings) { BinaryBuffer buffer; buffer.AppendString("AA"); buffer.AppendString("BB"); EXPECT_EQ(4u, buffer.GetSize()); EXPECT_EQ(4u, buffer.GetLength()); EXPECT_EQ(65u, buffer.GetSpan()[0]); EXPECT_EQ(65u, buffer.GetSpan()[1]); EXPECT_EQ(66u, buffer.GetSpan()[2]); EXPECT_EQ(66u, buffer.GetSpan()[3]); } TEST(BinaryBuffer, AppendBytes) { BinaryBuffer buffer; buffer.AppendUint8(65u); buffer.AppendUint8(66u); EXPECT_EQ(2u, buffer.GetSize()); EXPECT_EQ(2u, buffer.GetLength()); EXPECT_EQ(65u, buffer.GetSpan()[0]); EXPECT_EQ(66u, buffer.GetSpan()[1]); } // Assumes little endian. TEST(BinaryBuffer, AppendUint16) { BinaryBuffer buffer; buffer.AppendUint16(0x4321); EXPECT_EQ(2u, buffer.GetSize()); EXPECT_EQ(2u, buffer.GetLength()); EXPECT_EQ(0x21u, buffer.GetSpan()[0]); EXPECT_EQ(0x43u, buffer.GetSpan()[1]); } // Assumes little endian. TEST(BinaryBuffer, AppendUint32) { BinaryBuffer buffer; buffer.AppendUint32(0x87654321); EXPECT_EQ(4u, buffer.GetSize()); EXPECT_EQ(4u, buffer.GetLength()); EXPECT_EQ(0x21u, buffer.GetSpan()[0]); EXPECT_EQ(0x43u, buffer.GetSpan()[1]); EXPECT_EQ(0x65u, buffer.GetSpan()[2]); EXPECT_EQ(0x87u, buffer.GetSpan()[3]); } TEST(BinaryBuffer, AppendDouble) { BinaryBuffer buffer; buffer.AppendDouble(1234.5678); EXPECT_EQ(8u, buffer.GetSize()); EXPECT_EQ(8u, buffer.GetLength()); // arch-dependent bit pattern. } } // namespace fxcrt