Index: mojo/services/public/cpp/view_manager/tests/view_manager_unittest.cc |
diff --git a/mojo/services/public/cpp/view_manager/tests/view_manager_unittest.cc b/mojo/services/public/cpp/view_manager/tests/view_manager_unittest.cc |
index 90bbb6c0ef2528e57b223368703a3f157c8fbfa5..7c70b456993dd50566a4b124c6f19a0c547a172b 100644 |
--- a/mojo/services/public/cpp/view_manager/tests/view_manager_unittest.cc |
+++ b/mojo/services/public/cpp/view_manager/tests/view_manager_unittest.cc |
@@ -6,6 +6,8 @@ |
#include "base/bind.h" |
#include "base/logging.h" |
+#include "mojo/public/cpp/application/application.h" |
+#include "mojo/service_manager/service_manager.h" |
#include "mojo/services/public/cpp/view_manager/lib/view_manager_private.h" |
#include "mojo/services/public/cpp/view_manager/lib/view_manager_synchronizer.h" |
#include "mojo/services/public/cpp/view_manager/lib/view_tree_node_private.h" |
@@ -20,6 +22,8 @@ namespace mojo { |
namespace view_manager { |
namespace { |
+const char kTestServiceURL[] = "mojo:test_url"; |
+ |
base::RunLoop* current_run_loop = NULL; |
void DoRunLoop() { |
@@ -44,6 +48,33 @@ void WaitForAllChangesToBeAcked(ViewManager* manager) { |
ViewManagerPrivate(manager).synchronizer()->ClearChangesAckedCallback(); |
} |
+// Used with IViewManager::Connect(). Creates a TestViewManagerClientConnection, |
+// which creates and owns the ViewManagerProxy. |
+class ConnectServiceLoader : public ServiceLoader { |
+ public: |
+ explicit ConnectServiceLoader(base::Callback<void(ViewManager*)> callback) |
+ : callback_(callback) {} |
+ virtual ~ConnectServiceLoader() {} |
+ |
+ // ServiceLoader: |
+ virtual void LoadService(ServiceManager* manager, |
+ const GURL& url, |
+ ScopedMessagePipeHandle shell_handle) OVERRIDE { |
+ scoped_ptr<Application> app(new Application(shell_handle.Pass())); |
+ ViewManager::Create(app.get(), callback_); |
+ apps_.push_back(app.release()); |
+ } |
+ virtual void OnServiceError(ServiceManager* manager, |
+ const GURL& url) OVERRIDE { |
+ } |
+ |
+ private: |
+ ScopedVector<Application> apps_; |
+ base::Callback<void(ViewManager*)> callback_; |
+ |
+ DISALLOW_COPY_AND_ASSIGN(ConnectServiceLoader); |
+}; |
+ |
class ActiveViewChangedObserver : public ViewTreeNodeObserver { |
public: |
explicit ActiveViewChangedObserver(ViewTreeNode* node) |
@@ -276,10 +307,45 @@ class ViewManagerTest : public testing::Test { |
// Overridden from testing::Test: |
virtual void SetUp() OVERRIDE { |
test_helper_.Init(); |
+ ConnectServiceLoader* loader = |
+ new ConnectServiceLoader( |
+ base::Bind(&ViewManagerTest::OnViewManagerLoaded, |
+ base::Unretained(this))); |
+ test_helper_.SetLoaderForURL( |
+ scoped_ptr<ServiceLoader>(loader), |
+ GURL(kTestServiceURL)); |
+ |
+ ConnectToService(test_helper_.service_provider(), |
+ "mojo:mojo_view_manager", |
+ &view_manager_init_); |
+ ASSERT_TRUE(ViewManagerInitConnect(view_manager_init_.get(), |
+ kTestServiceURL)); |
+ } |
+ |
+ void ViewManagerInitConnectCallback(bool* result_cache, |
+ bool result) { |
+ *result_cache = result; |
+ } |
+ |
+ bool ViewManagerInitConnect(IViewManagerInit* view_manager_init, |
+ const std::string& url) { |
+ bool result = false; |
+ view_manager_init->Connect( |
+ url, |
+ base::Bind(&ViewManagerTest::ViewManagerInitConnectCallback, |
+ base::Unretained(this), &result)); |
+ init_loop_.Run(); |
+ return result; |
+ } |
+ |
+ void OnViewManagerLoaded(ViewManager* view_manager) { |
+ init_loop_.Quit(); |
} |
base::MessageLoop loop_; |
+ base::RunLoop init_loop_; |
shell::ShellTestHelper test_helper_; |
+ IViewManagerInitPtr view_manager_init_; |
ViewManager* view_manager_1_; |
ViewManager* view_manager_2_; |
int commit_count_; |
@@ -336,6 +402,9 @@ class HierarchyChanged_NodeCreatedObserver : public TreeObserverBase { |
// TODO(beng): reenable these once converted to new way of connecting. |
+TEST_F(ViewManagerTest, SetUp) { |
+} |
+ |
TEST_F(ViewManagerTest, DISABLED_HierarchyChanged_NodeCreated) { |
HierarchyChanged_NodeCreatedObserver observer(view_manager_2()); |
ViewTreeNode* node1 = ViewTreeNode::Create(view_manager_1()); |