| OLD | NEW |
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include <stdlib.h> | 5 #include <stdlib.h> |
| 6 #include <string.h> | 6 #include <string.h> |
| 7 | 7 |
| 8 #include "mojo/public/cpp/bindings/lib/connector.h" | 8 #include "mojo/public/cpp/bindings/lib/connector.h" |
| 9 #include "mojo/public/cpp/bindings/lib/message_builder.h" | 9 #include "mojo/public/cpp/bindings/lib/message_builder.h" |
| 10 #include "mojo/public/cpp/bindings/lib/message_queue.h" | 10 #include "mojo/public/cpp/bindings/lib/message_queue.h" |
| (...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 52 class ReentrantMessageAccumulator : public MessageAccumulator { | 52 class ReentrantMessageAccumulator : public MessageAccumulator { |
| 53 public: | 53 public: |
| 54 ReentrantMessageAccumulator(internal::Connector* connector) | 54 ReentrantMessageAccumulator(internal::Connector* connector) |
| 55 : connector_(connector), number_of_calls_(0) {} | 55 : connector_(connector), number_of_calls_(0) {} |
| 56 | 56 |
| 57 bool Accept(Message* message) override { | 57 bool Accept(Message* message) override { |
| 58 if (!MessageAccumulator::Accept(message)) | 58 if (!MessageAccumulator::Accept(message)) |
| 59 return false; | 59 return false; |
| 60 number_of_calls_++; | 60 number_of_calls_++; |
| 61 if (number_of_calls_ == 1) { | 61 if (number_of_calls_ == 1) { |
| 62 return connector_->WaitForIncomingMessage(); | 62 return connector_->WaitForIncomingMessage(MOJO_DEADLINE_INDEFINITE); |
| 63 } | 63 } |
| 64 return true; | 64 return true; |
| 65 } | 65 } |
| 66 | 66 |
| 67 int number_of_calls() { return number_of_calls_; } | 67 int number_of_calls() { return number_of_calls_; } |
| 68 | 68 |
| 69 private: | 69 private: |
| 70 internal::Connector* connector_; | 70 internal::Connector* connector_; |
| 71 int number_of_calls_; | 71 int number_of_calls_; |
| 72 }; | 72 }; |
| (...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 132 const char kText[] = "hello world"; | 132 const char kText[] = "hello world"; |
| 133 | 133 |
| 134 Message message; | 134 Message message; |
| 135 AllocMessage(kText, &message); | 135 AllocMessage(kText, &message); |
| 136 | 136 |
| 137 connector0.Accept(&message); | 137 connector0.Accept(&message); |
| 138 | 138 |
| 139 MessageAccumulator accumulator; | 139 MessageAccumulator accumulator; |
| 140 connector1.set_incoming_receiver(&accumulator); | 140 connector1.set_incoming_receiver(&accumulator); |
| 141 | 141 |
| 142 connector1.WaitForIncomingMessage(); | 142 connector1.WaitForIncomingMessage(MOJO_DEADLINE_INDEFINITE); |
| 143 | 143 |
| 144 ASSERT_FALSE(accumulator.IsEmpty()); | 144 ASSERT_FALSE(accumulator.IsEmpty()); |
| 145 | 145 |
| 146 Message message_received; | 146 Message message_received; |
| 147 accumulator.Pop(&message_received); | 147 accumulator.Pop(&message_received); |
| 148 | 148 |
| 149 EXPECT_EQ( | 149 EXPECT_EQ( |
| 150 std::string(kText), | 150 std::string(kText), |
| 151 std::string(reinterpret_cast<const char*>(message_received.payload()))); | 151 std::string(reinterpret_cast<const char*>(message_received.payload()))); |
| 152 } | 152 } |
| (...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 216 for (size_t i = 0; i < MOJO_ARRAYSIZE(kText); ++i) { | 216 for (size_t i = 0; i < MOJO_ARRAYSIZE(kText); ++i) { |
| 217 Message message; | 217 Message message; |
| 218 AllocMessage(kText[i], &message); | 218 AllocMessage(kText[i], &message); |
| 219 | 219 |
| 220 connector0.Accept(&message); | 220 connector0.Accept(&message); |
| 221 } | 221 } |
| 222 | 222 |
| 223 MessageAccumulator accumulator; | 223 MessageAccumulator accumulator; |
| 224 connector1.set_incoming_receiver(&accumulator); | 224 connector1.set_incoming_receiver(&accumulator); |
| 225 | 225 |
| 226 connector1.WaitForIncomingMessage(); | 226 connector1.WaitForIncomingMessage(MOJO_DEADLINE_INDEFINITE); |
| 227 | 227 |
| 228 ASSERT_FALSE(accumulator.IsEmpty()); | 228 ASSERT_FALSE(accumulator.IsEmpty()); |
| 229 | 229 |
| 230 Message message_received; | 230 Message message_received; |
| 231 accumulator.Pop(&message_received); | 231 accumulator.Pop(&message_received); |
| 232 | 232 |
| 233 EXPECT_EQ( | 233 EXPECT_EQ( |
| 234 std::string(kText[0]), | 234 std::string(kText[0]), |
| 235 std::string(reinterpret_cast<const char*>(message_received.payload()))); | 235 std::string(reinterpret_cast<const char*>(message_received.payload()))); |
| 236 | 236 |
| (...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 320 | 320 |
| 321 EXPECT_EQ( | 321 EXPECT_EQ( |
| 322 std::string(kText), | 322 std::string(kText), |
| 323 std::string(reinterpret_cast<const char*>(message_received.payload()))); | 323 std::string(reinterpret_cast<const char*>(message_received.payload()))); |
| 324 } | 324 } |
| 325 | 325 |
| 326 TEST_F(ConnectorTest, WaitForIncomingMessageWithError) { | 326 TEST_F(ConnectorTest, WaitForIncomingMessageWithError) { |
| 327 internal::Connector connector0(handle0_.Pass()); | 327 internal::Connector connector0(handle0_.Pass()); |
| 328 // Close the other end of the pipe. | 328 // Close the other end of the pipe. |
| 329 handle1_.reset(); | 329 handle1_.reset(); |
| 330 ASSERT_FALSE(connector0.WaitForIncomingMessage()); | 330 ASSERT_FALSE(connector0.WaitForIncomingMessage(MOJO_DEADLINE_INDEFINITE)); |
| 331 } | 331 } |
| 332 | 332 |
| 333 TEST_F(ConnectorTest, WaitForIncomingMessageWithDeletion) { | 333 TEST_F(ConnectorTest, WaitForIncomingMessageWithDeletion) { |
| 334 internal::Connector connector0(handle0_.Pass()); | 334 internal::Connector connector0(handle0_.Pass()); |
| 335 internal::Connector* connector1 = new internal::Connector(handle1_.Pass()); | 335 internal::Connector* connector1 = new internal::Connector(handle1_.Pass()); |
| 336 | 336 |
| 337 const char kText[] = "hello world"; | 337 const char kText[] = "hello world"; |
| 338 | 338 |
| 339 Message message; | 339 Message message; |
| 340 AllocMessage(kText, &message); | 340 AllocMessage(kText, &message); |
| 341 | 341 |
| 342 connector0.Accept(&message); | 342 connector0.Accept(&message); |
| 343 | 343 |
| 344 ConnectorDeletingMessageAccumulator accumulator(&connector1); | 344 ConnectorDeletingMessageAccumulator accumulator(&connector1); |
| 345 connector1->set_incoming_receiver(&accumulator); | 345 connector1->set_incoming_receiver(&accumulator); |
| 346 | 346 |
| 347 connector1->WaitForIncomingMessage(); | 347 connector1->WaitForIncomingMessage(MOJO_DEADLINE_INDEFINITE); |
| 348 | 348 |
| 349 ASSERT_FALSE(connector1); | 349 ASSERT_FALSE(connector1); |
| 350 ASSERT_FALSE(accumulator.IsEmpty()); | 350 ASSERT_FALSE(accumulator.IsEmpty()); |
| 351 | 351 |
| 352 Message message_received; | 352 Message message_received; |
| 353 accumulator.Pop(&message_received); | 353 accumulator.Pop(&message_received); |
| 354 | 354 |
| 355 EXPECT_EQ( | 355 EXPECT_EQ( |
| 356 std::string(kText), | 356 std::string(kText), |
| 357 std::string(reinterpret_cast<const char*>(message_received.payload()))); | 357 std::string(reinterpret_cast<const char*>(message_received.payload()))); |
| (...skipping 27 matching lines...) Expand all Loading... |
| 385 std::string(kText[i]), | 385 std::string(kText[i]), |
| 386 std::string(reinterpret_cast<const char*>(message_received.payload()))); | 386 std::string(reinterpret_cast<const char*>(message_received.payload()))); |
| 387 } | 387 } |
| 388 | 388 |
| 389 ASSERT_EQ(2, accumulator.number_of_calls()); | 389 ASSERT_EQ(2, accumulator.number_of_calls()); |
| 390 } | 390 } |
| 391 | 391 |
| 392 } // namespace | 392 } // namespace |
| 393 } // namespace test | 393 } // namespace test |
| 394 } // namespace mojo | 394 } // namespace mojo |
| OLD | NEW |