| // Copyright 2015 The Weave 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 "src/streams.h" | |
| #include <functional> | |
| #include <gmock/gmock.h> | |
| #include <gtest/gtest.h> | |
| #include <weave/provider/test/fake_task_runner.h> | |
| #include <src/bind_lambda.h> | |
| namespace weave { | |
| TEST(Stream, CopyStreams) { | |
| provider::test::FakeTaskRunner task_runner; | |
| std::vector<uint8_t> test_data(1024 * 1024); | |
| for (size_t i = 0; i < test_data.size(); ++i) | |
| test_data[i] = static_cast<uint8_t>(std::hash<size_t>()(i)); | |
| MemoryStream source{test_data, &task_runner}; | |
| MemoryStream destination{{}, &task_runner}; | |
| bool done = false; | |
| auto callback = base::Bind( | |
| [](std::vector<uint8_t>* test_data, bool* done, MemoryStream* destination, | |
| size_t size, ErrorPtr error) { | |
| EXPECT_FALSE(error); | |
| *done = true; | |
| EXPECT_EQ(*test_data, destination->GetData()); | |
| }, | |
| base::Unretained(&test_data), base::Unretained(&done), | |
| base::Unretained(&destination)); | |
| StreamCopier copier{&source, &destination}; | |
| copier.Copy(callback); | |
| task_runner.Run(test_data.size()); | |
| EXPECT_TRUE(done); | |
| } | |
| } // namespace weave |