| // Copyright 2014 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "mojo/examples/apptest/example_client_application.h" |
| #include "mojo/examples/apptest/example_client_impl.h" |
| #include "mojo/examples/apptest/example_service.mojom.h" |
| #include "mojo/public/c/system/main.h" |
| #include "mojo/public/cpp/application/application_delegate.h" |
| #include "mojo/public/cpp/application/application_impl.h" |
| #include "mojo/public/cpp/bindings/callback.h" |
| #include "mojo/public/cpp/environment/environment.h" |
| #include "mojo/public/cpp/system/macros.h" |
| #include "mojo/public/cpp/utility/run_loop.h" |
| #include "testing/gtest/include/gtest/gtest.h" |
| |
| namespace { |
| |
| // TODO(msw): Remove this once we can get ApplicationImpl from TLS. |
| mojo::ApplicationImpl* g_application_impl_hack = NULL; |
| |
| } // namespace |
| |
| namespace mojo { |
| |
| namespace { |
| |
| class ExampleServiceTest : public testing::Test { |
| public: |
| ExampleServiceTest() { |
| g_application_impl_hack->ConnectToService("mojo:mojo_example_service", |
| &example_service_); |
| example_service_.set_client(&example_client_); |
| } |
| |
| virtual ~ExampleServiceTest() MOJO_OVERRIDE {} |
| |
| protected: |
| ExampleServicePtr example_service_; |
| ExampleClientImpl example_client_; |
| |
| private: |
| MOJO_DISALLOW_COPY_AND_ASSIGN(ExampleServiceTest); |
| }; |
| |
| TEST_F(ExampleServiceTest, Ping) { |
| EXPECT_EQ(0, example_client_.last_pong_value()); |
| example_service_->Ping(1); |
| RunLoop::current()->Run(); |
| EXPECT_EQ(1, example_client_.last_pong_value()); |
| } |
| |
| template <typename T> |
| struct SetAndQuit : public Callback<void()>::Runnable { |
| SetAndQuit(T* val, T result) : val_(val), result_(result) {} |
| virtual ~SetAndQuit() {} |
| virtual void Run() const MOJO_OVERRIDE{ |
| *val_ = result_; |
| RunLoop::current()->Quit(); |
| } |
| T* val_; |
| T result_; |
| }; |
| |
| TEST_F(ExampleServiceTest, RunCallback) { |
| bool was_run = false; |
| example_service_->RunCallback(SetAndQuit<bool>(&was_run, true)); |
| RunLoop::current()->Run(); |
| EXPECT_TRUE(was_run); |
| } |
| |
| } // namespace |
| |
| } // namespace mojo |
| |
| MojoResult MojoMain(MojoHandle shell_handle) { |
| mojo::Environment env; |
| mojo::RunLoop loop; |
| |
| // TODO(tim): Perhaps the delegate should be the thing that provides |
| // the ExampleServiceTest with the ApplicationImpl somehow. |
| mojo::ApplicationDelegate* delegate = new mojo::ExampleClientApplication(); |
| mojo::ApplicationImpl app(delegate, shell_handle); |
| g_application_impl_hack = &app; |
| |
| // TODO(msw): Get actual commandline arguments. |
| int argc = 0; |
| char** argv = NULL; |
| testing::InitGoogleTest(&argc, argv); |
| mojo_ignore_result(RUN_ALL_TESTS()); |
| |
| delete delegate; |
| return MOJO_RESULT_OK; |
| } |