Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(775)

Unified Diff: mojo/examples/test/example_unittest.cc

Issue 399653004: Add a Mojo example apptest that runs in mojo_shell. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: mojo/examples/test/example_unittest.cc
diff --git a/mojo/examples/test/example_unittest.cc b/mojo/examples/test/example_unittest.cc
new file mode 100644
index 0000000000000000000000000000000000000000..2448fdc04afca61266f66eb7ef8704cbb9b4bea5
--- /dev/null
+++ b/mojo/examples/test/example_unittest.cc
@@ -0,0 +1,202 @@
+// 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 "base/bind.h"
+#include "base/logging.h"
+#include "base/memory/scoped_ptr.h"
+//#include "base/message_loop/message_loop.h"
+//#include "base/run_loop.h"
+//#include "mojo/common/common_type_converters.h"
+#include "mojo/examples/test/example_service.mojom.h"
+#include "mojo/examples/test/example_service_impl.h"
+//#include "mojo/public/cpp/application/application_connection.h"
+#include "mojo/public/cpp/application/application_delegate.h"
+#include "mojo/public/cpp/application/application_impl.h"
+#include "mojo/public/cpp/system/macros.h"
+#include "mojo/public/cpp/utility/run_loop.h"
+#include "mojo/service_manager/service_manager.h"
+//#include "mojo/services/public/interfaces/view_manager/view_manager.mojom.h"
+//#include "mojo/shell/shell_test_helper.h"
+#include "mojo/shell/init.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+namespace mojo {
+
+//class ApplicationImpl;
+
+class ExampleServiceTest : public testing::Test {
+ public:
+ ExampleServiceTest() {}
+
+ virtual void SetUp() MOJO_OVERRIDE {
+ //ServiceManager* service_manager = shell_context()->service_manager();
+ ServiceManager* service_manager = ServiceManager::GetInstance();
+ LOG(ERROR) << "MSW ServiceManager::GetInstance(): " << service_manager;
+ //test_api_.reset(new ServiceManager::TestAPI(service_manager));
+ //test_helper_.Init();
+
+ //service_manager->SetLoaderForURL(
+ // scoped_ptr<ServiceLoader>(new EmbedServiceLoader()),
+ // GURL(kTestServiceURL));
+
+ // TODO(msw): ServiceManager::GetInstance()->ConnectToService(...) Crashes:
+ // mojo_service_manager.dll!mojo::InterfaceImpl<mojo::ServiceProvider>::internal_state() Line 50 C++
+ // mojo_service_manager.dll!mojo::BindToProxy<mojo::`anonymous namespace'::StubServiceProvider,mojo::ServiceProvider>(mojo::`anonymous-namespace'::StubServiceProvider * instance, mojo::InterfacePtr<mojo::ServiceProvider> * ptr, const MojoAsyncWaiter * waiter) Line 92 C++
+ // mojo_service_manager.dll!mojo::ServiceManager::ConnectToServiceByName(const GURL & application_url, const std::basic_string<char, std::char_traits<char>, std::allocator<char> > & interface_name) Line 181 C++
+ // F143.tmp!mojo::ServiceManager::ConnectToService<mojo::ExampleService>(const GURL & application_url, mojo::InterfacePtr<mojo::ExampleService> * ptr) Line 63 C++
+ //service_manager->ConnectToService(
+ // GURL("mojo:mojo_example_service"),
+ // &example_service_);
+
+ //test_helper_.SetLoaderForURL(
+ // scoped_ptr<ServiceLoader>(new EmbedServiceLoader()),
+ // GURL(kTestServiceURL));
+ //test_helper_.service_manager()->ConnectToService(
+ // GURL("mojo:mojo_view_manager"),
+ // &view_manager_init_);
+ //ASSERT_TRUE(EmbedRoot(view_manager_init_.get(), kTestServiceURL));
+ //connection_ = ViewManagerProxy::WaitForInstance();
+ //ASSERT_TRUE(connection_ != NULL);
+ //connection_->DoRunLoopUntilChangesCount(1);
Ben Goodger (Google) 2014/07/18 20:02:52 Check out the code I recently landed here: http:/
msw 2014/07/21 18:58:22 I'm having issues using ShellTestHelper here, and
Ben Goodger (Google) 2014/07/21 20:02:38 So I don't think you can use a ShellTestHelper...
+ }
+
+ virtual void TearDown() MOJO_OVERRIDE {}
+
+ protected:
+ //ExampleServicePtr example_service_;
+ //shell::ShellTestHelper test_helper_;
+ //scoped_ptr<ServiceManager::TestAPI> test_api_;
+
+ private:
+ MOJO_DISALLOW_COPY_AND_ASSIGN(ExampleServiceTest);
+};
+
+// Test ExampleService's Ping.
+TEST_F(ExampleServiceTest, Ping) {
+ //example_service_->Echo(String::From("Echo string"), base::Bind(&OnEcho));
+ // TODO(msw): Verify that OnEcho was called...
+}
+
+
+// TODO(msw): Is this needed ??? Move this elsewhere ...
Ben Goodger (Google) 2014/07/18 20:02:52 No. You should be relying on the shell's service l
msw 2014/07/21 18:58:22 Done.
+class ExampleServiceLoader : public ServiceLoader, public ApplicationDelegate {
+ public:
+ ExampleServiceLoader() {}
+
+ virtual ~ExampleServiceLoader() {
+ test_app_.reset(NULL);
+ }
+
+ private:
+ virtual void LoadService(
+ ServiceManager* manager,
+ const GURL& url,
+ ScopedMessagePipeHandle service_provider_handle) MOJO_OVERRIDE {
+ test_app_.reset(new ApplicationImpl(this, service_provider_handle.Pass()));
+ }
+
+ virtual void OnServiceError(ServiceManager* manager,
+ const GURL& url) MOJO_OVERRIDE {
+ }
+
+ virtual bool ConfigureIncomingConnection(
+ ApplicationConnection* connection) MOJO_OVERRIDE {
+ // TODO(msw): connection->AddService<ExampleServiceImpl>(context_);
+ return true;
+ }
+
+ scoped_ptr<ApplicationImpl> test_app_;
+ DISALLOW_COPY_AND_ASSIGN(ExampleServiceLoader);
+};
+
+// TODO(msw): Move this elsewhere ...
+class ExampleClientImpl : public InterfaceImpl<ExampleClient> {
+ public:
+ explicit ExampleClientImpl(ExampleServicePtr example_service)
+ : example_service_(example_service.Pass()) {
+ example_service_.set_client(this);
+ }
+ virtual ~ExampleClientImpl() {
+ example_service_.reset();
+ }
+
+ void PingExampleService() {
+ // TODO(msw): Can't supply a callback from this process...
+ //example_service_->Echo(String::From("Echo string"), base::Bind(&OnEcho));
+ example_service_->Ping(kMagicNumber);
+ }
+
+ protected:
+ // InterfaceImpl<ExampleClient> overrides.
+ virtual void Pong(uint16_t pong_value) MOJO_OVERRIDE {
+ LOG(ERROR) << "MSW: ExampleClientImpl::Pong: " << pong_value;
+ EXPECT_EQ(kMagicNumber, pong_value);
+ // TODO(msw): Disconnect from ExampleService??? Quit properly....
+ //base::MessageLoop::current()->Quit();
+ RunLoop::current()->Quit();
+ }
+
+ private:
+ ExampleServicePtr example_service_;
+ static const int16_t kMagicNumber = 42;
+ MOJO_DISALLOW_COPY_AND_ASSIGN(ExampleClientImpl);
+};
+
+
+// TODO(msw): Generalize a GTest ApplicationDelegeate for all such tests?
+class TestApp : public ApplicationDelegate {
+ public:
+ TestApp() {}
+ virtual ~TestApp() {}
+
+ virtual void Initialize(ApplicationImpl* app) MOJO_OVERRIDE{
+ printf("Running TestApp::Initialize() from example_unittest.cc\n");
+ // TODO(msw): Get actual commandline arguments...
+ int argc = 0;
+ char** argv = NULL;
+ testing::InitGoogleTest(&argc, argv);
+ mojo::shell::InitializeLogging();
+
+ ServiceManager* service_manager = ServiceManager::GetInstance();
Ben Goodger (Google) 2014/07/18 20:02:52 I *think* you should be able to write this test wi
msw 2014/07/21 18:58:22 Done (with a hacky global for now, need help).
+ LOG(ERROR) << "MSW ServiceManager::GetInstance(): " << service_manager;
+ //ExampleServiceLoader* default_loader = new ExampleServiceLoader;
+ //default_loader->set_context(&context_);
+ service_manager->set_default_loader(
+ scoped_ptr<ServiceLoader>(new ExampleServiceLoader));
+
+ // TODO(msw): Connect to service in the test...
+ ExampleServicePtr example_service;
+ LOG(ERROR) << "MSW 0";
+ //service_manager->ConnectToService(
+ // GURL("mojo:mojo_example_service"),
+ // &example_service);
+ app->ConnectToService("mojo:mojo_example_service", &example_service);
+ LOG(ERROR) << "MSW 1";
+ example_client_.reset(new ExampleClientImpl(example_service.Pass()));
+ LOG(ERROR) << "MSW 2";
+ example_client_->PingExampleService();
+ // TODO(msw): Run tests here?
+ RUN_ALL_TESTS();
+ LOG(ERROR) << "MSW 3";
+
+ // TODO(msw): Disconnect from ExampleService??? Quit properly....
+ //base::MessageLoop::current()->Quit();
+ //RunLoop::current()->RunUntilIdle();
+ RunLoop::current()->Quit();
+ }
+
+ private:
+ // TODO(msw): Expose to ExampleServiceTest ...
+ scoped_ptr<ExampleClientImpl> example_client_;
+ MOJO_DISALLOW_COPY_AND_ASSIGN(TestApp);
+};
+
+// TODO(msw): Move this and TestApp to a common mojo test helper...
+// TODO(msw): Make a AppTestBase like ShellTestBase, etc. ???
+// static
+ApplicationDelegate* ApplicationDelegate::Create() {
+ return new TestApp();
+}
+
+} // namespace mojo

Powered by Google App Engine
This is Rietveld 408576698