| Index: services/ui/view_manager/tests/view_manager_test.cc
|
| diff --git a/services/ui/view_manager/tests/view_manager_test.cc b/services/ui/view_manager/tests/view_manager_test.cc
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..13e30c6fc1c5835bee3b9a7386d4c54cc13fa486
|
| --- /dev/null
|
| +++ b/services/ui/view_manager/tests/view_manager_test.cc
|
| @@ -0,0 +1,174 @@
|
| +// Copyright 2016 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/public/cpp/application/application_impl.h"
|
| +#include "mojo/public/cpp/application/connect.h"
|
| +#include "mojo/services/ui/views/interfaces/view_manager.mojom.h"
|
| +#include "mojo/services/ui/views/interfaces/views.mojom.h"
|
| +#include "services/ui/view_manager/tests/mock_view_associate.h"
|
| +#include "services/ui/view_manager/tests/view_manager_test_base.h"
|
| +
|
| +namespace view_manager {
|
| +namespace test {
|
| +
|
| +class MockViewListener : public mojo::ui::ViewListener {
|
| + public:
|
| + MockViewListener() {}
|
| + ~MockViewListener() override {}
|
| +
|
| + void OnPropertiesChanged(
|
| + uint32_t scene_version,
|
| + mojo::ui::ViewPropertiesPtr properties,
|
| + const OnPropertiesChangedCallback& callback) override {}
|
| +};
|
| +
|
| +class ViewManagerTest : public ViewManagerTestBase {
|
| + public:
|
| + ViewManagerTest() {}
|
| + ~ViewManagerTest() override {}
|
| +
|
| + void SetUp() override {
|
| + ViewManagerTestBase::SetUp();
|
| +
|
| + // Connect to view manager
|
| + mojo::ConnectToService(shell(), "mojo:view_manager_service",
|
| + mojo::GetProxy(&view_manager_));
|
| + }
|
| +
|
| + protected:
|
| + mojo::ui::ViewManagerPtr view_manager_;
|
| +
|
| + private:
|
| + DISALLOW_COPY_AND_ASSIGN(ViewManagerTest);
|
| +};
|
| +
|
| +TEST_F(ViewManagerTest, CreateAViewManagerAndView) {
|
| + // Create and bind a mock view listener
|
| + mojo::ui::ViewListenerPtr view_listener;
|
| + MockViewListener mock_view_listener;
|
| + mojo::Binding<mojo::ui::ViewListener> view_listener_binding(
|
| + &mock_view_listener, mojo::GetProxy(&view_listener));
|
| +
|
| + // Create a view
|
| + mojo::ui::ViewPtr view;
|
| + mojo::ui::ViewOwnerPtr client_view_owner;
|
| + view_manager_->CreateView(mojo::GetProxy(&view),
|
| + mojo::GetProxy(&client_view_owner),
|
| + view_listener.Pass(), "test_view");
|
| +
|
| + // Call View::GetToken. Check that you get the callback.
|
| + int view_token_callback_invokecount = 0;
|
| + auto view_token_callback = [&view_token_callback_invokecount](
|
| + mojo::ui::ViewTokenPtr token) { view_token_callback_invokecount++; };
|
| +
|
| + EXPECT_EQ(0, view_token_callback_invokecount);
|
| + view->GetToken(view_token_callback);
|
| +
|
| + KICK_MESSAGE_LOOP_WHILE(view_token_callback_invokecount != 1);
|
| +
|
| + EXPECT_EQ(1, view_token_callback_invokecount);
|
| +}
|
| +
|
| +TEST_F(ViewManagerTest, ConnectAMockViewAssociate) {
|
| + // Create and bind a MockViewAssociate
|
| + mojo::InterfaceHandle<mojo::ui::ViewAssociate> associate;
|
| + MockViewAssociate mock_view_associate;
|
| + mojo::Binding<mojo::ui::ViewAssociate> view_associate_binding(
|
| + &mock_view_associate, mojo::GetProxy(&associate));
|
| +
|
| + // Call ViewManager::RegisterViewAssociate. MockViewAssociate::Connect
|
| + // should be called back
|
| + EXPECT_EQ(0, mock_view_associate.connect_invokecount);
|
| + mojo::ui::ViewAssociateOwnerPtr view_associate_owner;
|
| + view_manager_->RegisterViewAssociate(associate.Pass(),
|
| + mojo::GetProxy(&view_associate_owner),
|
| + "test_view_associate");
|
| +
|
| + KICK_MESSAGE_LOOP_WHILE(mock_view_associate.connect_invokecount != 1);
|
| +
|
| + EXPECT_EQ(1, mock_view_associate.connect_invokecount);
|
| +}
|
| +
|
| +TEST_F(ViewManagerTest, DisconnectAMockViewAssociate) {
|
| + mojo::ui::ViewAssociateOwnerPtr view_associate_owner;
|
| + int owner_connection_error_callback_invokecount = 0;
|
| +
|
| + {
|
| + // Create and bind a MockViewAssociate
|
| + mojo::InterfaceHandle<mojo::ui::ViewAssociate> associate;
|
| + MockViewAssociate mock_view_associate;
|
| + mojo::Binding<mojo::ui::ViewAssociate> view_associate_binding(
|
| + &mock_view_associate, mojo::GetProxy(&associate));
|
| +
|
| + // Call ViewManager::RegisterViewAssociate. MockViewAssociate::Connect
|
| + // should be called back
|
| + EXPECT_EQ(0, mock_view_associate.connect_invokecount);
|
| +
|
| + view_manager_->RegisterViewAssociate(associate.Pass(),
|
| + mojo::GetProxy(&view_associate_owner),
|
| + "test_view_associate_xyz");
|
| +
|
| + // set a callback for errors
|
| + view_associate_owner.set_connection_error_handler(
|
| + // use lambda function as callback
|
| + [&owner_connection_error_callback_invokecount]() {
|
| + owner_connection_error_callback_invokecount++;
|
| + });
|
| +
|
| + KICK_MESSAGE_LOOP_WHILE(mock_view_associate.connect_invokecount != 1);
|
| +
|
| + EXPECT_EQ(1, mock_view_associate.connect_invokecount);
|
| +
|
| + EXPECT_EQ(0, owner_connection_error_callback_invokecount);
|
| + }
|
| +
|
| + // mock_view_associate is out of scope, should be destroyed
|
| + // we expect to get a connection error from the owner
|
| + KICK_MESSAGE_LOOP_WHILE(owner_connection_error_callback_invokecount != 1)
|
| +
|
| + EXPECT_EQ(1, owner_connection_error_callback_invokecount);
|
| +}
|
| +
|
| +TEST_F(ViewManagerTest, DisconnectAViewAssociateOwner) {
|
| + // Create and bind a MockViewAssociate
|
| + mojo::InterfaceHandle<mojo::ui::ViewAssociate> associate;
|
| + MockViewAssociate mock_view_associate;
|
| + mojo::Binding<mojo::ui::ViewAssociate> view_associate_binding(
|
| + &mock_view_associate, mojo::GetProxy(&associate));
|
| +
|
| + // set a callback for errors
|
| + int connection_error_callback_invokecount = 0;
|
| + view_associate_binding.set_connection_error_handler(
|
| + // use lambda function as callback
|
| + [&connection_error_callback_invokecount]() {
|
| + connection_error_callback_invokecount++;
|
| + });
|
| +
|
| + {
|
| + mojo::ui::ViewAssociateOwnerPtr view_associate_owner;
|
| +
|
| + // Call ViewManager::RegisterViewAssociate. MockViewAssociate::Connect
|
| + // should be called back
|
| + EXPECT_EQ(0, mock_view_associate.connect_invokecount);
|
| +
|
| + view_manager_->RegisterViewAssociate(associate.Pass(),
|
| + mojo::GetProxy(&view_associate_owner),
|
| + "test_view_associate_xyz");
|
| +
|
| + KICK_MESSAGE_LOOP_WHILE(mock_view_associate.connect_invokecount != 1);
|
| +
|
| + EXPECT_EQ(1, mock_view_associate.connect_invokecount);
|
| +
|
| + EXPECT_EQ(0, connection_error_callback_invokecount);
|
| + }
|
| +
|
| + // view_associate_owner is out of scope, should be destroyed
|
| + // we expect to get a connection error from the view associate
|
| + KICK_MESSAGE_LOOP_WHILE(connection_error_callback_invokecount != 1)
|
| +
|
| + EXPECT_EQ(1, connection_error_callback_invokecount);
|
| +}
|
| +
|
| +} // namespace test
|
| +} // namespace view_manager
|
|
|