diff options
Diffstat (limited to 'components/mus/public/cpp/tests')
4 files changed, 92 insertions, 1 deletions
diff --git a/components/mus/public/cpp/tests/BUILD.gn b/components/mus/public/cpp/tests/BUILD.gn index b9cf72b..a8492a0 100644 --- a/components/mus/public/cpp/tests/BUILD.gn +++ b/components/mus/public/cpp/tests/BUILD.gn @@ -53,11 +53,13 @@ test("mojo_view_manager_lib_unittests") { "//components/mus/public/cpp", "//mojo/application/public/cpp", "//mojo/converters/geometry", + "//mojo/converters/input_events", "//mojo/gles2", "//mojo/platform_handle:platform_handle_impl", "//mojo/public/cpp/system", "//testing/gtest", "//third_party/mojo/src/mojo/edk/system", + "//ui/events", "//ui/gfx:test_support", "//ui/gfx/geometry", "//ui/mojo/geometry:interfaces", diff --git a/components/mus/public/cpp/tests/test_window_tree.cc b/components/mus/public/cpp/tests/test_window_tree.cc index 1d70f32..d1f7945 100644 --- a/components/mus/public/cpp/tests/test_window_tree.cc +++ b/components/mus/public/cpp/tests/test_window_tree.cc @@ -4,6 +4,8 @@ #include "components/mus/public/cpp/tests/test_window_tree.h" +#include "testing/gtest/include/gtest/gtest.h" + namespace mus { TestWindowTree::TestWindowTree() : got_change_(false), change_id_(0) {} @@ -20,6 +22,10 @@ bool TestWindowTree::GetAndClearChangeId(uint32_t* change_id) { return true; } +bool TestWindowTree::WasEventAcked(uint32_t event_id) const { + return acked_events_.count(event_id); +} + void TestWindowTree::NewWindow( uint32_t change_id, uint32_t window_id, @@ -106,7 +112,10 @@ void TestWindowTree::SetImeVisibility(uint32_t window_id, bool visible, mojo::TextInputStatePtr state) {} -void TestWindowTree::OnWindowInputEventAck(uint32_t event_id) {} +void TestWindowTree::OnWindowInputEventAck(uint32_t event_id) { + EXPECT_FALSE(acked_events_.count(event_id)); + acked_events_.insert(event_id); +} void TestWindowTree::WmResponse(uint32_t change_id, bool response) {} } // namespace mus diff --git a/components/mus/public/cpp/tests/test_window_tree.h b/components/mus/public/cpp/tests/test_window_tree.h index 8a35699..a61c8c9 100644 --- a/components/mus/public/cpp/tests/test_window_tree.h +++ b/components/mus/public/cpp/tests/test_window_tree.h @@ -5,6 +5,8 @@ #ifndef COMPONENTS_MUS_PUBLIC_CPP_TESTS_TEST_WINDOW_TREE_H_ #define COMPONENTS_MUS_PUBLIC_CPP_TESTS_TEST_WINDOW_TREE_H_ +#include <set> + #include "base/macros.h" #include "components/mus/public/interfaces/window_tree.mojom.h" @@ -21,6 +23,8 @@ class TestWindowTree : public mojom::WindowTree { // invoked since the last GetAndClearChangeId(). bool GetAndClearChangeId(uint32_t* change_id); + bool WasEventAcked(uint32_t event_id) const; + private: // mojom::WindowTree: void NewWindow( @@ -78,6 +82,7 @@ class TestWindowTree : public mojom::WindowTree { bool got_change_; uint32_t change_id_; + std::set<uint32_t> acked_events_; DISALLOW_COPY_AND_ASSIGN(TestWindowTree); }; diff --git a/components/mus/public/cpp/tests/window_tree_client_impl_unittest.cc b/components/mus/public/cpp/tests/window_tree_client_impl_unittest.cc index 5c61a40..14542b8 100644 --- a/components/mus/public/cpp/tests/window_tree_client_impl_unittest.cc +++ b/components/mus/public/cpp/tests/window_tree_client_impl_unittest.cc @@ -6,6 +6,7 @@ #include "base/logging.h" #include "components/mus/common/util.h" +#include "components/mus/public/cpp/input_event_handler.h" #include "components/mus/public/cpp/lib/window_private.h" #include "components/mus/public/cpp/property_type_converters.h" #include "components/mus/public/cpp/tests/test_window.h" @@ -15,7 +16,10 @@ #include "components/mus/public/cpp/window_property.h" #include "components/mus/public/cpp/window_tree_delegate.h" #include "mojo/converters/geometry/geometry_type_converters.h" +#include "mojo/converters/input_events/input_events_type_converters.h" #include "testing/gtest/include/gtest/gtest.h" +#include "ui/events/event.h" +#include "ui/events/event_utils.h" #include "ui/gfx/geometry/rect.h" namespace mus { @@ -96,6 +100,48 @@ class WindowTreeSetup { DISALLOW_COPY_AND_ASSIGN(WindowTreeSetup); }; +class TestInputEventHandler : public InputEventHandler { + public: + TestInputEventHandler() + : received_event_(false), should_manually_ack_(false) {} + ~TestInputEventHandler() override {} + + void set_should_manually_ack() { should_manually_ack_ = true; } + + void AckEvent() { + DCHECK(should_manually_ack_); + DCHECK(!ack_callback_.is_null()); + ack_callback_.Run(); + ack_callback_ = base::Closure(); + } + + void Reset() { + received_event_ = false; + ack_callback_ = base::Closure(); + } + bool received_event() const { return received_event_; } + + private: + // InputEventHandler: + void OnWindowInputEvent(Window* target, + mojom::EventPtr event, + scoped_ptr<base::Closure>* ack_callback) override { + EXPECT_FALSE(received_event_) + << "Observer was not reset after receiving event."; + received_event_ = true; + if (should_manually_ack_) { + ack_callback_ = *ack_callback->get(); + ack_callback->reset(); + } + } + + bool received_event_; + bool should_manually_ack_; + base::Closure ack_callback_; + + DISALLOW_COPY_AND_ASSIGN(TestInputEventHandler); +}; + using WindowTreeClientImplTest = testing::Test; // Verifies bounds are reverted if the server replied that the change failed. @@ -276,6 +322,35 @@ TEST_F(WindowTreeClientImplTest, SetVisibleFailedWithPendingChange) { EXPECT_EQ(original_visible, root->visible()); } +TEST_F(WindowTreeClientImplTest, InputEventBasic) { + WindowTreeSetup setup; + Window* root = setup.window_tree_connection()->GetRoot(); + ASSERT_TRUE(root); + + TestInputEventHandler event_handler; + root->set_input_event_handler(&event_handler); + + scoped_ptr<ui::Event> ui_event( + new ui::MouseEvent(ui::ET_MOUSE_MOVED, gfx::Point(), gfx::Point(), + ui::EventTimeForNow(), ui::EF_NONE, 0)); + mojom::EventPtr mus_event = mojom::Event::From(*ui_event); + setup.window_tree_client()->OnWindowInputEvent(1, root->id(), + std::move(mus_event)); + EXPECT_TRUE(event_handler.received_event()); + EXPECT_TRUE(setup.window_tree()->WasEventAcked(1)); + event_handler.Reset(); + + event_handler.set_should_manually_ack(); + mus_event = mojom::Event::From(*ui_event); + setup.window_tree_client()->OnWindowInputEvent(33, root->id(), + std::move(mus_event)); + EXPECT_TRUE(event_handler.received_event()); + EXPECT_FALSE(setup.window_tree()->WasEventAcked(33)); + + event_handler.AckEvent(); + EXPECT_TRUE(setup.window_tree()->WasEventAcked(33)); +} + // Verifies focus is reverted if the server replied that the change failed. TEST_F(WindowTreeClientImplTest, SetFocusFailed) { WindowTreeSetup setup; |