Index: mojo/examples/apptest/example_apptest.cc |
diff --git a/mojo/examples/apptest/example_apptest.cc b/mojo/examples/apptest/example_apptest.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..9f0397a005f43ce777158cf0505be2e3c9099850 |
--- /dev/null |
+++ b/mojo/examples/apptest/example_apptest.cc |
@@ -0,0 +1,92 @@ |
+// 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_impl.h" |
+#include "mojo/examples/apptest/example_service.mojom.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); |
+ mojo::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_; |
+ mojo::RunLoop::current()->Quit(); |
+ } |
+ T* val_; |
+ T result_; |
+}; |
+ |
+TEST_F(ExampleServiceTest, RunCallback) { |
+ bool was_run = false; |
+ example_service_->RunCallback(SetAndQuit<bool>(&was_run, true)); |
+ mojo::RunLoop::current()->Run(); |
+ EXPECT_TRUE(was_run); |
+} |
+ |
+} // namespace |
+ |
+} // namespace mojo |
+ |
+extern "C" APPLICATION_EXPORT MojoResult CDECL MojoMain( |
+ MojoHandle shell_handle) { |
+ mojo::Environment env; |
+ mojo::RunLoop loop; |
+ |
+ mojo::ApplicationDelegate* delegate = mojo::ApplicationDelegate::Create(); |
+ mojo::ApplicationImpl app(delegate); |
+ app.BindShell(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; |
+} |