| // 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 <weave/test/fake_stream.h> | |
| #include <base/bind.h> | |
| #include <gtest/gtest.h> | |
| #include <weave/provider/task_runner.h> | |
| namespace weave { | |
| namespace test { | |
| FakeStream::FakeStream(provider::TaskRunner* task_runner) | |
| : task_runner_{task_runner} {} | |
| FakeStream::FakeStream(provider::TaskRunner* task_runner, | |
| const std::string& read_data) | |
| : task_runner_{task_runner}, read_data_{read_data} {} | |
| void FakeStream::CancelPendingOperations() {} | |
| void FakeStream::ExpectWritePacketString(base::TimeDelta, | |
| const std::string& data) { | |
| write_data_ += data; | |
| } | |
| void FakeStream::AddReadPacketString(base::TimeDelta, const std::string& data) { | |
| read_data_ += data; | |
| } | |
| void FakeStream::Read(void* buffer, | |
| size_t size_to_read, | |
| const ReadCallback& callback) { | |
| if (read_data_.empty()) { | |
| task_runner_->PostDelayedTask( | |
| FROM_HERE, base::Bind(&FakeStream::Read, base::Unretained(this), buffer, | |
| size_to_read, callback), | |
| base::TimeDelta::FromSeconds(0)); | |
| return; | |
| } | |
| size_t size = std::min(size_to_read, read_data_.size()); | |
| memcpy(buffer, read_data_.data(), size); | |
| read_data_ = read_data_.substr(size); | |
| task_runner_->PostDelayedTask(FROM_HERE, base::Bind(callback, size, nullptr), | |
| base::TimeDelta::FromSeconds(0)); | |
| } | |
| void FakeStream::Write(const void* buffer, | |
| size_t size_to_write, | |
| const WriteCallback& callback) { | |
| size_t size = std::min(size_to_write, write_data_.size()); | |
| EXPECT_EQ( | |
| write_data_.substr(0, size), | |
| std::string(reinterpret_cast<const char*>(buffer), size_to_write)); | |
| write_data_ = write_data_.substr(size); | |
| task_runner_->PostDelayedTask(FROM_HERE, base::Bind(callback, nullptr), | |
| base::TimeDelta::FromSeconds(0)); | |
| } | |
| } // namespace test | |
| } // namespace weave |