Update To 11.40.268.0
[platform/framework/web/crosswalk.git] / src / extensions / renderer / api / serial / data_receiver_unittest.cc
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.
4
5 #include <queue>
6
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"
11
12 namespace extensions {
13
14 // Runs tests defined in extensions/test/data/data_receiver_unittest.js
15 class DataReceiverTest : public ApiTestBase {
16  public:
17   DataReceiverTest() {}
18
19   void SetUp() override {
20     ApiTestBase::SetUp();
21     service_provider()->AddService(base::Bind(
22         &DataReceiverTest::CreateDataSource, base::Unretained(this)));
23   }
24
25   void TearDown() override {
26     if (sender_.get()) {
27       sender_->ShutDown();
28       sender_ = NULL;
29     }
30     ApiTestBase::TearDown();
31   }
32
33   std::queue<int32_t> error_to_send_;
34   std::queue<std::string> data_to_send_;
35
36  private:
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)),
43         &request);
44   }
45
46   void ReadyToSend(scoped_ptr<device::WritableBuffer> buffer) {
47     if (data_to_send_.empty() && error_to_send_.empty())
48       return;
49
50     std::string data;
51     int32_t error = 0;
52     if (!data_to_send_.empty()) {
53       data = data_to_send_.front();
54       data_to_send_.pop();
55     }
56     if (!error_to_send_.empty()) {
57       error = error_to_send_.front();
58       error_to_send_.pop();
59     }
60     DCHECK(buffer->GetSize() >= static_cast<uint32_t>(data.size()));
61     memcpy(buffer->GetData(), data.c_str(), data.size());
62     if (error)
63       buffer->DoneWithError(data.size(), error);
64     else
65       buffer->Done(data.size());
66   }
67
68   scoped_refptr<device::DataSourceSender> sender_;
69
70   DISALLOW_COPY_AND_ASSIGN(DataReceiverTest);
71 };
72
73 TEST_F(DataReceiverTest, Receive) {
74   data_to_send_.push("a");
75   RunTest("data_receiver_unittest.js", "testReceive");
76 }
77
78 TEST_F(DataReceiverTest, ReceiveError) {
79   error_to_send_.push(1);
80   RunTest("data_receiver_unittest.js", "testReceiveError");
81 }
82
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");
88 }
89
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");
95 }
96
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");
102 }
103
104 TEST_F(DataReceiverTest, ReceiveErrorSerialization) {
105   error_to_send_.push(1);
106   error_to_send_.push(3);
107   RunTest("data_receiver_unittest.js", "testReceiveErrorSerialization");
108 }
109
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");
116 }
117
118 TEST_F(DataReceiverTest, SerializeDuringReceive) {
119   data_to_send_.push("a");
120   RunTest("data_receiver_unittest.js", "testSerializeDuringReceive");
121 }
122
123 TEST_F(DataReceiverTest, SerializeAfterClose) {
124   data_to_send_.push("a");
125   RunTest("data_receiver_unittest.js", "testSerializeAfterClose");
126 }
127
128 }  // namespace extensions