| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 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 | 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 "mojo/public/cpp/application/connect.h" | 5 #include "mojo/public/cpp/application/connect.h" |
| 6 #include "services/js/test/echo_service.mojom.h" | 6 #include "mojo/public/cpp/bindings/synchronous_interface_ptr.h" |
| 7 #include "services/js/test/echo_service.mojom-sync.h" |
| 7 #include "services/js/test/js_application_test_base.h" | 8 #include "services/js/test/js_application_test_base.h" |
| 8 | 9 |
| 9 using mojo::String; | 10 using mojo::String; |
| 10 | 11 |
| 11 namespace js { | 12 namespace js { |
| 12 namespace { | 13 namespace { |
| 13 | 14 |
| 14 class JSEchoTest : public test::JSApplicationTestBase { | 15 class JSEchoTest : public test::JSApplicationTestBase { |
| 15 public: | 16 public: |
| 16 JSEchoTest() : JSApplicationTestBase() {} | 17 JSEchoTest() : JSApplicationTestBase() {} |
| 17 ~JSEchoTest() override {} | 18 ~JSEchoTest() override {} |
| 18 | 19 |
| 19 protected: | 20 protected: |
| 20 // ApplicationTestBase: | 21 // ApplicationTestBase: |
| 21 void SetUp() override { | 22 void SetUp() override { |
| 22 ApplicationTestBase::SetUp(); | 23 ApplicationTestBase::SetUp(); |
| 23 const std::string& url = JSAppURL("echo.js"); | 24 const std::string& url = JSAppURL("echo.js"); |
| 24 mojo::ConnectToService(application_impl()->shell(), url, | 25 mojo::ConnectToService(application_impl()->shell(), url, |
| 25 GetProxy(&echo_service_)); | 26 GetSynchronousProxy(&echo_service_)); |
| 26 } | 27 } |
| 27 | 28 |
| 28 mojo::EchoServicePtr echo_service_; | 29 mojo::SynchronousInterfacePtr<mojo::EchoService> echo_service_; |
| 29 | 30 |
| 30 private: | 31 private: |
| 31 MOJO_DISALLOW_COPY_AND_ASSIGN(JSEchoTest); | 32 MOJO_DISALLOW_COPY_AND_ASSIGN(JSEchoTest); |
| 32 }; | 33 }; |
| 33 | 34 |
| 34 class JSServiceProviderEchoTest : public test::JSApplicationTestBase { | 35 class JSServiceProviderEchoTest : public test::JSApplicationTestBase { |
| 35 public: | 36 public: |
| 36 JSServiceProviderEchoTest() : JSApplicationTestBase() {} | 37 JSServiceProviderEchoTest() : JSApplicationTestBase() {} |
| 37 ~JSServiceProviderEchoTest() override {} | 38 ~JSServiceProviderEchoTest() override {} |
| 38 | 39 |
| 39 protected: | 40 protected: |
| 40 // ApplicationTestBase: | 41 // ApplicationTestBase: |
| 41 void SetUp() override { | 42 void SetUp() override { |
| 42 ApplicationTestBase::SetUp(); | 43 ApplicationTestBase::SetUp(); |
| 43 const std::string& url = JSAppURL("echo.js"); | 44 const std::string& url = JSAppURL("echo.js"); |
| 44 application_impl()->shell()->ConnectToApplication( | 45 application_impl()->shell()->ConnectToApplication( |
| 45 url, GetProxy(&echo_service_provider_), nullptr); | 46 url, GetProxy(&echo_service_provider_), nullptr); |
| 46 } | 47 } |
| 47 | 48 |
| 48 mojo::ServiceProviderPtr echo_service_provider_; | 49 mojo::ServiceProviderPtr echo_service_provider_; |
| 49 | 50 |
| 50 private: | 51 private: |
| 51 MOJO_DISALLOW_COPY_AND_ASSIGN(JSServiceProviderEchoTest); | 52 MOJO_DISALLOW_COPY_AND_ASSIGN(JSServiceProviderEchoTest); |
| 52 }; | 53 }; |
| 53 | 54 |
| 54 struct EchoStringCallback { | |
| 55 explicit EchoStringCallback(String *s) : echo_value(s) {} | |
| 56 void Run(const String& value) const { | |
| 57 *echo_value = value; | |
| 58 } | |
| 59 String *echo_value; | |
| 60 }; | |
| 61 | |
| 62 struct ShareEchoServiceCallback { | |
| 63 explicit ShareEchoServiceCallback(bool *b) : value(b) {} | |
| 64 void Run(bool callback_value) const { | |
| 65 *value = callback_value; | |
| 66 } | |
| 67 bool *value; | |
| 68 }; | |
| 69 | |
| 70 TEST_F(JSEchoTest, EchoString) { | 55 TEST_F(JSEchoTest, EchoString) { |
| 71 String foo; | 56 String foo; |
| 72 EchoStringCallback callback(&foo); | 57 EXPECT_TRUE(echo_service_->EchoString("foo", &foo)); |
| 73 echo_service_->EchoString("foo", callback); | |
| 74 EXPECT_TRUE(echo_service_.WaitForIncomingResponse()); | |
| 75 EXPECT_EQ("foo", foo); | 58 EXPECT_EQ("foo", foo); |
| 76 echo_service_->Quit(); | 59 echo_service_->Quit(); |
| 77 } | 60 } |
| 78 | 61 |
| 79 TEST_F(JSEchoTest, EchoEmptyString) { | 62 TEST_F(JSEchoTest, EchoEmptyString) { |
| 80 String empty; | 63 String empty; |
| 81 EchoStringCallback callback(&empty); | 64 EXPECT_TRUE(echo_service_->EchoString("", &empty)); |
| 82 echo_service_->EchoString("", callback); | |
| 83 EXPECT_TRUE(echo_service_.WaitForIncomingResponse()); | |
| 84 EXPECT_EQ("", empty); | 65 EXPECT_EQ("", empty); |
| 85 echo_service_->Quit(); | 66 echo_service_->Quit(); |
| 86 } | 67 } |
| 87 | 68 |
| 88 TEST_F(JSEchoTest, EchoNullString) { | 69 TEST_F(JSEchoTest, EchoNullString) { |
| 89 String null; | 70 String null; |
| 90 EchoStringCallback callback(&null); | 71 EXPECT_TRUE(echo_service_->EchoString(nullptr, &null)); |
| 91 echo_service_->EchoString(nullptr, callback); | |
| 92 EXPECT_TRUE(echo_service_.WaitForIncomingResponse()); | |
| 93 EXPECT_TRUE(null.is_null()); | 72 EXPECT_TRUE(null.is_null()); |
| 94 echo_service_->Quit(); | 73 echo_service_->Quit(); |
| 95 } | 74 } |
| 96 | 75 |
| 97 // Verify that a JS app's ServiceProvider can request and provide services. | 76 // Verify that a JS app's ServiceProvider can request and provide services. |
| 98 // This test exercises the same code paths as examples/js/share_echo.js. | 77 // This test exercises the same code paths as examples/js/share_echo.js. |
| 99 TEST_F(JSEchoTest, ShareEchoService) { | 78 TEST_F(JSEchoTest, ShareEchoService) { |
| 100 bool returned_value; | 79 bool returned_value = false; |
| 101 ShareEchoServiceCallback callback(&returned_value); | 80 EXPECT_TRUE(echo_service_->ShareEchoService(&returned_value)); |
| 102 echo_service_->ShareEchoService(callback); | |
| 103 EXPECT_TRUE(echo_service_.WaitForIncomingResponse()); | |
| 104 EXPECT_TRUE(returned_value); | 81 EXPECT_TRUE(returned_value); |
| 105 echo_service_->Quit(); | 82 echo_service_->Quit(); |
| 106 } | 83 } |
| 107 | 84 |
| 108 // Verify that connecting via the echo service application's ServiceProvider | |
| 109 // behaves the same as connecting to the echo service directly. | |
| 110 TEST_F(JSServiceProviderEchoTest, UseApplicationServiceProvider) { | |
| 111 mojo::EchoServicePtr echo_service; | |
| 112 mojo::MessagePipe pipe; | |
| 113 echo_service.Bind( | |
| 114 mojo::InterfaceHandle<mojo::EchoService>(pipe.handle0.Pass(), 0u)); | |
| 115 echo_service_provider_->ConnectToService( | |
| 116 mojo::EchoService::Name_, pipe.handle1.Pass()); | |
| 117 String foo; | |
| 118 EchoStringCallback callback(&foo); | |
| 119 echo_service->EchoString("foo", callback); | |
| 120 EXPECT_TRUE(echo_service.WaitForIncomingResponse()); | |
| 121 EXPECT_EQ("foo", foo); | |
| 122 echo_service->Quit(); | |
| 123 } | |
| 124 | |
| 125 } // namespace | 85 } // namespace |
| 126 } // namespace js | 86 } // namespace js |
| OLD | NEW |