| // Copyright 2019 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include <cstdlib> |
| #include <string> |
| |
| #include "serializable.h" |
| #include "test_platform.h" |
| |
| namespace crdtp { |
| // ============================================================================= |
| // Serializable - An object to be emitted as a sequence of bytes. |
| // ============================================================================= |
| |
| namespace { |
| // Tests the default behavior for ::TakeSerialized (to invoke |
| // ::AppendSerialized). |
| class SimpleExample : public Serializable { |
| public: |
| explicit SimpleExample(const std::vector<uint8_t>& contents) |
| : contents_(contents) {} |
| |
| void AppendSerialized(std::vector<uint8_t>* out) const override { |
| out->insert(out->end(), contents_.begin(), contents_.end()); |
| } |
| |
| private: |
| std::vector<uint8_t> contents_; |
| }; |
| } // namespace |
| |
| TEST(SerializableTest, YieldsContents) { |
| std::vector<uint8_t> contents = {1, 2, 3}; |
| SimpleExample foo(contents); |
| foo.AppendSerialized(&contents); // Yields contents by appending. |
| EXPECT_THAT(contents, testing::ElementsAre(1, 2, 3, 1, 2, 3)); |
| // Yields contents by returning. |
| EXPECT_THAT(std::move(foo).TakeSerialized(), testing::ElementsAre(1, 2, 3)); |
| } |
| } // namespace crdtp |