1 // Copyright 2022 The PDFium Authors
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "core/fxcrt/binary_buffer.h"
6
7 #include <utility>
8 #include <vector>
9
10 #include "core/fxcrt/bytestring.h"
11 #include "testing/gtest/include/gtest/gtest.h"
12
13 namespace fxcrt {
14
TEST(BinaryBuffer,Empty)15 TEST(BinaryBuffer, Empty) {
16 BinaryBuffer buffer;
17 EXPECT_TRUE(buffer.IsEmpty());
18 EXPECT_EQ(0u, buffer.GetSize());
19 EXPECT_EQ(0u, buffer.GetLength());
20 EXPECT_TRUE(buffer.GetSpan().empty());
21 }
22
TEST(BinaryBuffer,MoveConstruct)23 TEST(BinaryBuffer, MoveConstruct) {
24 BinaryBuffer buffer;
25 buffer.AppendUint8(65u);
26
27 BinaryBuffer buffer2(std::move(buffer));
28
29 EXPECT_TRUE(buffer.IsEmpty());
30 EXPECT_EQ(0u, buffer.GetSize());
31 EXPECT_EQ(0u, buffer.GetLength());
32 EXPECT_TRUE(buffer.GetSpan().empty());
33
34 EXPECT_FALSE(buffer2.IsEmpty());
35 EXPECT_EQ(1u, buffer2.GetSize());
36 EXPECT_EQ(1u, buffer2.GetLength());
37 EXPECT_EQ(65u, buffer2.GetSpan()[0]);
38 }
39
TEST(BinaryBuffer,MoveAssign)40 TEST(BinaryBuffer, MoveAssign) {
41 BinaryBuffer buffer;
42 BinaryBuffer buffer2;
43 buffer.AppendUint8(65u);
44 buffer2 = std::move(buffer);
45
46 EXPECT_TRUE(buffer.IsEmpty());
47 EXPECT_EQ(0u, buffer.GetSize());
48 EXPECT_EQ(0u, buffer.GetLength());
49 EXPECT_TRUE(buffer.GetSpan().empty());
50
51 EXPECT_FALSE(buffer2.IsEmpty());
52 EXPECT_EQ(1u, buffer2.GetSize());
53 ASSERT_EQ(1u, buffer2.GetLength());
54 EXPECT_EQ(65u, buffer2.GetSpan()[0]);
55 }
56
TEST(BinaryBuffer,Clear)57 TEST(BinaryBuffer, Clear) {
58 BinaryBuffer buffer;
59 buffer.AppendUint8(65u);
60 buffer.Clear();
61 EXPECT_TRUE(buffer.IsEmpty());
62 EXPECT_EQ(0u, buffer.GetSize());
63 EXPECT_EQ(0u, buffer.GetLength());
64 EXPECT_TRUE(buffer.GetSpan().empty());
65 }
66
TEST(BinaryBuffer,AppendSpans)67 TEST(BinaryBuffer, AppendSpans) {
68 BinaryBuffer buffer;
69 std::vector<uint8_t> aaa(3, 65u);
70 std::vector<uint8_t> bbb(3, 66u);
71 buffer.AppendSpan(aaa);
72 buffer.AppendSpan(bbb);
73 EXPECT_FALSE(buffer.IsEmpty());
74 EXPECT_EQ(6u, buffer.GetSize());
75 EXPECT_EQ(6u, buffer.GetLength());
76 EXPECT_EQ(65u, buffer.GetSpan()[0]);
77 EXPECT_EQ(65u, buffer.GetSpan()[1]);
78 EXPECT_EQ(65u, buffer.GetSpan()[2]);
79 EXPECT_EQ(66u, buffer.GetSpan()[3]);
80 EXPECT_EQ(66u, buffer.GetSpan()[4]);
81 EXPECT_EQ(66u, buffer.GetSpan()[5]);
82 }
83
TEST(BinaryBuffer,AppendBlocks)84 TEST(BinaryBuffer, AppendBlocks) {
85 BinaryBuffer buffer;
86 std::vector<uint8_t> aaa(3, 65u);
87 std::vector<uint8_t> bbb(3, 66u);
88 buffer.AppendSpan(aaa);
89 buffer.AppendSpan(bbb);
90 EXPECT_EQ(6u, buffer.GetSize());
91 EXPECT_EQ(6u, buffer.GetLength());
92 EXPECT_EQ(65u, buffer.GetSpan()[0]);
93 EXPECT_EQ(65u, buffer.GetSpan()[1]);
94 EXPECT_EQ(65u, buffer.GetSpan()[2]);
95 EXPECT_EQ(66u, buffer.GetSpan()[3]);
96 EXPECT_EQ(66u, buffer.GetSpan()[4]);
97 EXPECT_EQ(66u, buffer.GetSpan()[5]);
98 }
99
TEST(BinaryBuffer,AppendStrings)100 TEST(BinaryBuffer, AppendStrings) {
101 BinaryBuffer buffer;
102 buffer.AppendString("AA");
103 buffer.AppendString("BB");
104 EXPECT_EQ(4u, buffer.GetSize());
105 EXPECT_EQ(4u, buffer.GetLength());
106 EXPECT_EQ(65u, buffer.GetSpan()[0]);
107 EXPECT_EQ(65u, buffer.GetSpan()[1]);
108 EXPECT_EQ(66u, buffer.GetSpan()[2]);
109 EXPECT_EQ(66u, buffer.GetSpan()[3]);
110 }
111
TEST(BinaryBuffer,AppendBytes)112 TEST(BinaryBuffer, AppendBytes) {
113 BinaryBuffer buffer;
114 buffer.AppendUint8(65u);
115 buffer.AppendUint8(66u);
116 EXPECT_EQ(2u, buffer.GetSize());
117 EXPECT_EQ(2u, buffer.GetLength());
118 EXPECT_EQ(65u, buffer.GetSpan()[0]);
119 EXPECT_EQ(66u, buffer.GetSpan()[1]);
120 }
121
122 // Assumes little endian.
TEST(BinaryBuffer,AppendUint16)123 TEST(BinaryBuffer, AppendUint16) {
124 BinaryBuffer buffer;
125 buffer.AppendUint16(0x4321);
126 EXPECT_EQ(2u, buffer.GetSize());
127 EXPECT_EQ(2u, buffer.GetLength());
128 EXPECT_EQ(0x21u, buffer.GetSpan()[0]);
129 EXPECT_EQ(0x43u, buffer.GetSpan()[1]);
130 }
131
132 // Assumes little endian.
TEST(BinaryBuffer,AppendUint32)133 TEST(BinaryBuffer, AppendUint32) {
134 BinaryBuffer buffer;
135 buffer.AppendUint32(0x87654321);
136 EXPECT_EQ(4u, buffer.GetSize());
137 EXPECT_EQ(4u, buffer.GetLength());
138 EXPECT_EQ(0x21u, buffer.GetSpan()[0]);
139 EXPECT_EQ(0x43u, buffer.GetSpan()[1]);
140 EXPECT_EQ(0x65u, buffer.GetSpan()[2]);
141 EXPECT_EQ(0x87u, buffer.GetSpan()[3]);
142 }
143
TEST(BinaryBuffer,AppendDouble)144 TEST(BinaryBuffer, AppendDouble) {
145 BinaryBuffer buffer;
146 buffer.AppendDouble(1234.5678);
147 EXPECT_EQ(8u, buffer.GetSize());
148 EXPECT_EQ(8u, buffer.GetLength());
149 // arch-dependent bit pattern.
150 }
151
152 } // namespace fxcrt
153