Index: mash/wm/accelerator_registrar_apptest.cc |
diff --git a/mash/wm/accelerator_registrar_apptest.cc b/mash/wm/accelerator_registrar_apptest.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..8109a80dc3032985729947e24612d71234f29e4f |
--- /dev/null |
+++ b/mash/wm/accelerator_registrar_apptest.cc |
@@ -0,0 +1,115 @@ |
+// Copyright 2015 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/run_loop.h" |
+#include "components/mus/public/cpp/event_matcher.h" |
+#include "components/mus/public/cpp/window.h" |
+#include "components/mus/public/interfaces/accelerator_registrar.mojom.h" |
+#include "components/mus/public/interfaces/window_manager.mojom.h" |
+#include "mojo/application/public/cpp/application_impl.h" |
+#include "mojo/application/public/cpp/application_test_base.h" |
+#include "mojo/public/cpp/bindings/binding.h" |
+ |
+using mus::mojom::AcceleratorHandler; |
+using mus::mojom::AcceleratorHandlerPtr; |
+using mus::mojom::AcceleratorRegistrar; |
+using mus::mojom::AcceleratorRegistrarPtr; |
+ |
+namespace mash { |
+namespace wm { |
+ |
+class TestAcceleratorHandler : public AcceleratorHandler { |
+ public: |
+ explicit TestAcceleratorHandler(AcceleratorRegistrarPtr registrar) |
+ : binding_(this), |
+ registrar_(std::move(registrar)), |
+ add_accelerator_result_(false) { |
+ AcceleratorHandlerPtr handler; |
+ binding_.Bind(GetProxy(&handler)); |
+ registrar_->SetHandler(std::move(handler)); |
+ } |
+ ~TestAcceleratorHandler() override {} |
+ |
+ // Attempts to install an accelerator with the specified id and event matcher. |
+ // Returns whether the accelerator could be successfully added or not. |
+ bool AttemptToInstallAccelerator(uint32_t accelerator_id, |
+ mus::mojom::EventMatcherPtr matcher) { |
+ DCHECK(!run_loop_); |
+ registrar_->AddAccelerator( |
+ accelerator_id, std::move(matcher), |
+ base::Bind(&TestAcceleratorHandler::AddAcceleratorCallback, |
+ base::Unretained(this))); |
+ run_loop_.reset(new base::RunLoop); |
+ run_loop_->Run(); |
+ run_loop_.reset(); |
+ return add_accelerator_result_; |
+ } |
+ |
+ private: |
+ void AddAcceleratorCallback(bool success) { |
+ DCHECK(run_loop_ && run_loop_->running()); |
+ add_accelerator_result_ = success; |
+ run_loop_->Quit(); |
+ } |
+ |
+ // AcceleratorHandler: |
+ void OnAccelerator(uint32_t id, mus::mojom::EventPtr event) override {} |
+ |
+ std::set<uint32_t> installed_accelerators_; |
+ scoped_ptr<base::RunLoop> run_loop_; |
+ mojo::Binding<AcceleratorHandler> binding_; |
+ AcceleratorRegistrarPtr registrar_; |
+ bool add_accelerator_result_; |
+ |
+ DISALLOW_COPY_AND_ASSIGN(TestAcceleratorHandler); |
+}; |
+ |
+class AcceleratorRegistrarTest : public mojo::test::ApplicationTestBase { |
+ public: |
+ AcceleratorRegistrarTest() {} |
+ ~AcceleratorRegistrarTest() override {} |
+ |
+ protected: |
+ void ConnectToRegistrar(AcceleratorRegistrarPtr* registrar) { |
+ application_impl()->ConnectToService("mojo:desktop_wm", registrar); |
+ } |
+ |
+ private: |
+ DISALLOW_COPY_AND_ASSIGN(AcceleratorRegistrarTest); |
+}; |
+ |
+TEST_F(AcceleratorRegistrarTest, AcceleratorRegistrarBasic) { |
+ AcceleratorRegistrarPtr registrar_first; |
+ ConnectToRegistrar(®istrar_first); |
+ TestAcceleratorHandler handler_first(std::move(registrar_first)); |
+ EXPECT_TRUE(handler_first.AttemptToInstallAccelerator( |
+ 1, mus::CreateKeyMatcher(mus::mojom::KEYBOARD_CODE_T, |
+ mus::mojom::EVENT_FLAGS_SHIFT_DOWN))); |
+ // Attempting to add an accelerator with the same accelerator id from the same |
+ // registrar should fail. |
+ EXPECT_FALSE(handler_first.AttemptToInstallAccelerator( |
+ 1, mus::CreateKeyMatcher(mus::mojom::KEYBOARD_CODE_N, |
+ mus::mojom::EVENT_FLAGS_SHIFT_DOWN))); |
+ |
+ // Attempting to add an accelerator with the same id from a different |
+ // registrar should be OK. |
+ AcceleratorRegistrarPtr registrar_second; |
+ ConnectToRegistrar(®istrar_second); |
+ TestAcceleratorHandler handler_second(std::move(registrar_second)); |
+ EXPECT_TRUE(handler_second.AttemptToInstallAccelerator( |
+ 1, mus::CreateKeyMatcher(mus::mojom::KEYBOARD_CODE_N, |
+ mus::mojom::EVENT_FLAGS_SHIFT_DOWN))); |
+ |
+ // But attempting to add an accelerator with the same matcher should fail. |
+ EXPECT_FALSE(handler_first.AttemptToInstallAccelerator( |
+ 3, mus::CreateKeyMatcher(mus::mojom::KEYBOARD_CODE_N, |
+ mus::mojom::EVENT_FLAGS_SHIFT_DOWN))); |
+ EXPECT_FALSE(handler_second.AttemptToInstallAccelerator( |
+ 3, mus::CreateKeyMatcher(mus::mojom::KEYBOARD_CODE_N, |
+ mus::mojom::EVENT_FLAGS_SHIFT_DOWN))); |
+} |
+ |
+} // namespace wm |
+} // namespace mash |