buffer_sink_unittest.cc 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. // Copyright 2017 The Chromium Authors. All rights reserved.
  2. // Use of this source code is governed by a BSD-style license that can be
  3. // found in the LICENSE file.
  4. #include "components/zucchini/buffer_sink.h"
  5. #include <stddef.h>
  6. #include <stdint.h>
  7. #include <vector>
  8. #include "testing/gtest/include/gtest/gtest.h"
  9. namespace zucchini {
  10. constexpr uint8_t kUninit = 0xFF;
  11. class BufferSinkTest : public testing::Test {
  12. protected:
  13. BufferSinkTest()
  14. : buffer_(10, kUninit), sink_(buffer_.data(), buffer_.size()) {}
  15. std::vector<uint8_t> buffer_;
  16. BufferSink sink_;
  17. };
  18. TEST_F(BufferSinkTest, PutValue) {
  19. EXPECT_EQ(size_t(10), sink_.Remaining());
  20. EXPECT_TRUE(sink_.PutValue(uint32_t(0x76543210)));
  21. EXPECT_EQ(size_t(6), sink_.Remaining());
  22. EXPECT_TRUE(sink_.PutValue(uint32_t(0xFEDCBA98)));
  23. EXPECT_EQ(size_t(2), sink_.Remaining());
  24. EXPECT_FALSE(sink_.PutValue(uint32_t(0x00)));
  25. EXPECT_EQ(size_t(2), sink_.Remaining());
  26. EXPECT_TRUE(sink_.PutValue(uint16_t(0x0010)));
  27. EXPECT_EQ(size_t(0), sink_.Remaining());
  28. // Assuming little-endian architecture.
  29. EXPECT_EQ(std::vector<uint8_t>(
  30. {0x10, 0x32, 0x54, 0x76, 0x98, 0xBA, 0xDC, 0xFE, 0x10, 0x00}),
  31. buffer_);
  32. }
  33. TEST_F(BufferSinkTest, PutRange) {
  34. std::vector<uint8_t> range = {0x10, 0x32, 0x54, 0x76, 0x98, 0xBA,
  35. 0xDC, 0xFE, 0x10, 0x00, 0x42};
  36. EXPECT_EQ(size_t(10), sink_.Remaining());
  37. EXPECT_FALSE(sink_.PutRange(range.begin(), range.end()));
  38. EXPECT_EQ(size_t(10), sink_.Remaining());
  39. EXPECT_TRUE(sink_.PutRange(range.begin(), range.begin() + 8));
  40. EXPECT_EQ(size_t(2), sink_.Remaining());
  41. EXPECT_EQ(std::vector<uint8_t>({0x10, 0x32, 0x54, 0x76, 0x98, 0xBA, 0xDC,
  42. 0xFE, kUninit, kUninit}),
  43. buffer_);
  44. EXPECT_FALSE(sink_.PutRange(range.begin(), range.begin() + 4));
  45. EXPECT_EQ(size_t(2), sink_.Remaining());
  46. // range is not written
  47. EXPECT_EQ(std::vector<uint8_t>({0x10, 0x32, 0x54, 0x76, 0x98, 0xBA, 0xDC,
  48. 0xFE, kUninit, kUninit}),
  49. buffer_);
  50. }
  51. } // namespace zucchini