Index: webrtc/base/copyonwritebuffer_unittest.cc |
diff --git a/webrtc/base/copyonwritebuffer_unittest.cc b/webrtc/base/copyonwritebuffer_unittest.cc |
index a95ad67a03e6ec2c41ad1210d3ae241f590ed3e7..dbf59f7718f2779f0dff9bc0c3c26d79918a00c5 100644 |
--- a/webrtc/base/copyonwritebuffer_unittest.cc |
+++ b/webrtc/base/copyonwritebuffer_unittest.cc |
@@ -41,6 +41,13 @@ void EnsureBuffersDontShareData(const CopyOnWriteBuffer& buf1, |
EXPECT_NE(data1, data2); |
} |
+TEST(CopyOnWriteBufferTest, TestCreateEmptyData) { |
+ CopyOnWriteBuffer buf(static_cast<const uint8_t*>(nullptr), 0); |
+ EXPECT_EQ(buf.size(), 0u); |
+ EXPECT_EQ(buf.capacity(), 0u); |
+ EXPECT_EQ(buf.data(), nullptr); |
+} |
+ |
TEST(CopyOnWriteBufferTest, TestMoveConstruct) { |
CopyOnWriteBuffer buf1(kTestData, 3, 10); |
size_t buf1_size = buf1.size(); |
@@ -125,6 +132,21 @@ TEST(CopyOnWriteBufferTest, TestSetData) { |
EnsureBuffersDontShareData(buf1, buf3); |
const int8_t exp[] = {'f', 'o', 'o', 0x0}; |
EXPECT_EQ(buf3, CopyOnWriteBuffer(exp)); |
+ |
+ buf2.SetData(static_cast<const uint8_t*>(nullptr), 0u); |
+ EnsureBuffersDontShareData(buf1, buf2); |
+ EXPECT_EQ(buf1.size(), 3u); |
+ EXPECT_EQ(buf1.capacity(), 10u); |
+ EXPECT_EQ(buf2.size(), 0u); |
+ EXPECT_EQ(buf2.capacity(), 0u); |
+} |
+ |
+TEST(CopyOnWriteBufferTest, TestSetDataEmpty) { |
+ CopyOnWriteBuffer buf; |
+ buf.SetData(static_cast<const uint8_t*>(nullptr), 0u); |
+ EXPECT_EQ(buf.size(), 0u); |
+ EXPECT_EQ(buf.capacity(), 0u); |
+ EXPECT_EQ(buf.data(), nullptr); |
} |
TEST(CopyOnWriteBufferTest, TestEnsureCapacity) { |
@@ -196,4 +218,43 @@ TEST(CopyOnWriteBufferTest, TestConstDataAccessor) { |
EXPECT_EQ(data2, cdata1); |
} |
+TEST(CopyOnWriteBufferTest, TestBacketRead) { |
+ CopyOnWriteBuffer buf1(kTestData, 3, 10); |
+ CopyOnWriteBuffer buf2(buf1); |
+ |
+ EnsureBuffersShareData(buf1, buf2); |
+ // Non-const reads clone the data if shared. |
+ for (size_t i = 0; i != 3u; ++i) { |
+ EXPECT_EQ(buf1[i], kTestData[i]); |
+ } |
+ EnsureBuffersDontShareData(buf1, buf2); |
+} |
+ |
+TEST(CopyOnWriteBufferTest, TestBacketReadConst) { |
+ CopyOnWriteBuffer buf1(kTestData, 3, 10); |
+ CopyOnWriteBuffer buf2(buf1); |
+ |
+ EnsureBuffersShareData(buf1, buf2); |
+ const CopyOnWriteBuffer& cbuf1 = buf1; |
+ for (size_t i = 0; i != 3u; ++i) { |
+ EXPECT_EQ(cbuf1[i], kTestData[i]); |
+ } |
+ EnsureBuffersShareData(buf1, buf2); |
+} |
+ |
+TEST(CopyOnWriteBufferTest, TestBacketWrite) { |
+ CopyOnWriteBuffer buf1(kTestData, 3, 10); |
+ CopyOnWriteBuffer buf2(buf1); |
+ |
+ EnsureBuffersShareData(buf1, buf2); |
+ for (size_t i = 0; i != 3u; ++i) { |
+ buf1[i] = kTestData[i] + 1; |
+ } |
+ EXPECT_EQ(buf1.size(), 3u); |
+ EXPECT_EQ(buf1.capacity(), 10u); |
+ EXPECT_EQ(buf2.size(), 3u); |
+ EXPECT_EQ(buf2.capacity(), 10u); |
+ EXPECT_EQ(0, memcmp(buf2.cdata(), kTestData, 3)); |
+} |
+ |
} // namespace rtc |