1 // Copyright 2014 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.
7 #include "device/serial/data_source_sender.h"
8 #include "device/serial/data_stream.mojom.h"
9 #include "extensions/renderer/api_test_base.h"
10 #include "grit/extensions_renderer_resources.h"
12 namespace extensions {
14 // Runs tests defined in extensions/test/data/data_receiver_unittest.js
15 class DataReceiverTest : public ApiTestBase {
19 void SetUp() override {
21 service_provider()->AddService(base::Bind(
22 &DataReceiverTest::CreateDataSource, base::Unretained(this)));
25 void TearDown() override {
30 ApiTestBase::TearDown();
33 std::queue<int32_t> error_to_send_;
34 std::queue<std::string> data_to_send_;
37 void CreateDataSource(
38 mojo::InterfaceRequest<device::serial::DataSource> request) {
39 sender_ = mojo::WeakBindToRequest(
40 new device::DataSourceSender(
41 base::Bind(&DataReceiverTest::ReadyToSend, base::Unretained(this)),
42 base::Bind(base::DoNothing)),
46 void ReadyToSend(scoped_ptr<device::WritableBuffer> buffer) {
47 if (data_to_send_.empty() && error_to_send_.empty())
52 if (!data_to_send_.empty()) {
53 data = data_to_send_.front();
56 if (!error_to_send_.empty()) {
57 error = error_to_send_.front();
60 DCHECK(buffer->GetSize() >= static_cast<uint32_t>(data.size()));
61 memcpy(buffer->GetData(), data.c_str(), data.size());
63 buffer->DoneWithError(data.size(), error);
65 buffer->Done(data.size());
68 scoped_refptr<device::DataSourceSender> sender_;
70 DISALLOW_COPY_AND_ASSIGN(DataReceiverTest);
73 TEST_F(DataReceiverTest, Receive) {
74 data_to_send_.push("a");
75 RunTest("data_receiver_unittest.js", "testReceive");
78 TEST_F(DataReceiverTest, ReceiveError) {
79 error_to_send_.push(1);
80 RunTest("data_receiver_unittest.js", "testReceiveError");
83 TEST_F(DataReceiverTest, ReceiveDataAndError) {
84 data_to_send_.push("a");
85 data_to_send_.push("b");
86 error_to_send_.push(1);
87 RunTest("data_receiver_unittest.js", "testReceiveDataAndError");
90 TEST_F(DataReceiverTest, ReceiveErrorThenData) {
91 data_to_send_.push("");
92 data_to_send_.push("a");
93 error_to_send_.push(1);
94 RunTest("data_receiver_unittest.js", "testReceiveErrorThenData");
97 TEST_F(DataReceiverTest, ReceiveBeforeAndAfterSerialization) {
98 data_to_send_.push("a");
99 data_to_send_.push("b");
100 RunTest("data_receiver_unittest.js",
101 "testReceiveBeforeAndAfterSerialization");
104 TEST_F(DataReceiverTest, ReceiveErrorSerialization) {
105 error_to_send_.push(1);
106 error_to_send_.push(3);
107 RunTest("data_receiver_unittest.js", "testReceiveErrorSerialization");
110 TEST_F(DataReceiverTest, ReceiveDataAndErrorSerialization) {
111 data_to_send_.push("a");
112 data_to_send_.push("b");
113 error_to_send_.push(1);
114 error_to_send_.push(3);
115 RunTest("data_receiver_unittest.js", "testReceiveDataAndErrorSerialization");
118 TEST_F(DataReceiverTest, SerializeDuringReceive) {
119 data_to_send_.push("a");
120 RunTest("data_receiver_unittest.js", "testSerializeDuringReceive");
123 TEST_F(DataReceiverTest, SerializeAfterClose) {
124 data_to_send_.push("a");
125 RunTest("data_receiver_unittest.js", "testSerializeAfterClose");
128 } // namespace extensions