| // 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 <utility> | |
| #include <vector> | |
| #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<uint8_t> aaa(3, 65u); | |
| std::vector<uint8_t> 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<uint8_t> aaa(3, 65u); | |
| std::vector<uint8_t> 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 |