| OLD | NEW |
| (Empty) |
| 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 "base/files/file_path.h" | |
| 6 #include "base/logging.h" | |
| 7 #include "base/path_service.h" | |
| 8 #include "mojo/public/cpp/application/application_impl.h" | |
| 9 #include "mojo/public/cpp/application/application_test_base.h" | |
| 10 #include "mojo/public/cpp/bindings/strong_binding.h" | |
| 11 #include "services/dart/test/pingpong_service.mojom.h" | |
| 12 | |
| 13 namespace dart { | |
| 14 namespace { | |
| 15 | |
| 16 class PingPongClientImpl : public PingPongClient { | |
| 17 public: | |
| 18 PingPongClientImpl(mojo::InterfaceRequest<PingPongClient> request) | |
| 19 : last_pong_value_(0), binding_(this, request.Pass()) {} | |
| 20 ~PingPongClientImpl() override {} | |
| 21 | |
| 22 int16_t WaitForPongValue() { | |
| 23 if (!binding_.WaitForIncomingMethodCall()) | |
| 24 return 0; | |
| 25 return last_pong_value_; | |
| 26 } | |
| 27 | |
| 28 private: | |
| 29 // PingPongClient overrides. | |
| 30 void Pong(uint16_t pong_value) override { | |
| 31 last_pong_value_ = pong_value; | |
| 32 } | |
| 33 | |
| 34 int16_t last_pong_value_; | |
| 35 mojo::StrongBinding<PingPongClient> binding_; | |
| 36 MOJO_DISALLOW_COPY_AND_ASSIGN(PingPongClientImpl); | |
| 37 }; | |
| 38 | |
| 39 class DartPingPongTest : public mojo::test::ApplicationTestBase { | |
| 40 public: | |
| 41 DartPingPongTest() : mojo::test::ApplicationTestBase() {} | |
| 42 ~DartPingPongTest() override {} | |
| 43 | |
| 44 protected: | |
| 45 // ApplicationTestBase: | |
| 46 void SetUp() override { | |
| 47 ApplicationTestBase::SetUp(); | |
| 48 application_impl()->ConnectToService("mojo:dart_pingpong", | |
| 49 &pingpong_service_); | |
| 50 } | |
| 51 | |
| 52 PingPongServicePtr pingpong_service_; | |
| 53 | |
| 54 private: | |
| 55 MOJO_DISALLOW_COPY_AND_ASSIGN(DartPingPongTest); | |
| 56 }; | |
| 57 | |
| 58 struct PingTargetCallback { | |
| 59 explicit PingTargetCallback(bool *b) : value(b) {} | |
| 60 void Run(bool callback_value) const { | |
| 61 *value = callback_value; | |
| 62 } | |
| 63 bool *value; | |
| 64 }; | |
| 65 | |
| 66 // Verify that "pingpong.dart" implements the PingPongService interface | |
| 67 // and sends responses to our client. | |
| 68 TEST_F(DartPingPongTest, PingServiceToPongClient) { | |
| 69 PingPongClientPtr client; | |
| 70 auto pingpong_client = new PingPongClientImpl(GetProxy(&client)); | |
| 71 pingpong_service_->SetClient(client.Pass()); | |
| 72 | |
| 73 pingpong_service_->Ping(1); | |
| 74 EXPECT_EQ(2, pingpong_client->WaitForPongValue()); | |
| 75 pingpong_service_->Ping(100); | |
| 76 EXPECT_EQ(101, pingpong_client->WaitForPongValue()); | |
| 77 pingpong_service_->Quit(); | |
| 78 } | |
| 79 | |
| 80 // Verify that "pingpong.dart" can connect to "pingpong_target.dart", act as | |
| 81 // its client, and return a Future that only resolves after the target.ping() | |
| 82 // => client.pong() methods have executed 9 times. | |
| 83 TEST_F(DartPingPongTest, PingTargetURL) { | |
| 84 bool returned_value = false; | |
| 85 PingTargetCallback callback(&returned_value); | |
| 86 pingpong_service_->PingTargetURL("mojo:dart_pingpong_target", 9, callback); | |
| 87 EXPECT_TRUE(pingpong_service_.WaitForIncomingMethodCall()); | |
| 88 EXPECT_TRUE(returned_value); | |
| 89 pingpong_service_->Quit(); | |
| 90 } | |
| 91 | |
| 92 // Same as the previous test except that instead of providing the | |
| 93 // pingpong_target.dart URL, we provide a connection to its PingPongService. | |
| 94 TEST_F(DartPingPongTest, PingTargetService) { | |
| 95 PingPongServicePtr target; | |
| 96 application_impl()->ConnectToService("mojo:dart_pingpong_target", &target); | |
| 97 bool returned_value = false; | |
| 98 PingTargetCallback callback(&returned_value); | |
| 99 pingpong_service_->PingTargetService(target.Pass(), 9, callback); | |
| 100 EXPECT_TRUE(pingpong_service_.WaitForIncomingMethodCall()); | |
| 101 EXPECT_TRUE(returned_value); | |
| 102 pingpong_service_->Quit(); | |
| 103 } | |
| 104 | |
| 105 // Verify that Dart can implement an interface "request" parameter. | |
| 106 TEST_F(DartPingPongTest, GetTargetService) { | |
| 107 PingPongServicePtr target; | |
| 108 PingPongClientPtr client; | |
| 109 auto pingpong_client = new PingPongClientImpl(GetProxy(&client)); | |
| 110 | |
| 111 pingpong_service_->GetPingPongService(GetProxy(&target)); | |
| 112 target->SetClient(client.Pass()); | |
| 113 | |
| 114 target->Ping(1); | |
| 115 EXPECT_EQ(2, pingpong_client->WaitForPongValue()); | |
| 116 target->Ping(100); | |
| 117 EXPECT_EQ(101, pingpong_client->WaitForPongValue()); | |
| 118 target->Quit(); | |
| 119 pingpong_service_->Quit(); | |
| 120 } | |
| 121 | |
| 122 } // namespace | |
| 123 } // namespace dart | |
| OLD | NEW |