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

Unified Diff: ui/aura/mus/input_method_mus_unittest.cc

Issue 2685183005: Makes ~InputMethodMus ack any in flight events (Closed)
Patch Set: null Created 3 years, 10 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
« no previous file with comments | « ui/aura/mus/input_method_mus.cc ('k') | ui/aura/mus/os_exchange_data_provider_mus_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ui/aura/mus/input_method_mus_unittest.cc
diff --git a/ui/aura/mus/input_method_mus_unittest.cc b/ui/aura/mus/input_method_mus_unittest.cc
new file mode 100644
index 0000000000000000000000000000000000000000..19bcb38b8cf4f17a03b6c397feefdb83ef9d7ce4
--- /dev/null
+++ b/ui/aura/mus/input_method_mus_unittest.cc
@@ -0,0 +1,121 @@
+// Copyright 2017 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 "ui/aura/mus/input_method_mus.h"
+
+#include "services/ui/public/interfaces/ime/ime.mojom.h"
+#include "ui/aura/test/aura_test_base.h"
+#include "ui/aura/window.h"
+#include "ui/base/ime/input_method_delegate.h"
+
+namespace aura {
+namespace {
+
+// Empty implementation of InputMethodDelegate.
+class TestInputMethodDelegate : public ui::internal::InputMethodDelegate {
+ public:
+ TestInputMethodDelegate() {}
+ ~TestInputMethodDelegate() override {}
+
+ // ui::internal::InputMethodDelegate:
+ ui::EventDispatchDetails DispatchKeyEventPostIME(ui::KeyEvent* key) override {
+ return ui::EventDispatchDetails();
+ }
+
+ private:
+ DISALLOW_COPY_AND_ASSIGN(TestInputMethodDelegate);
+};
+
+using ProcessKeyEventCallback = base::Callback<void(bool)>;
+using ProcessKeyEventCallbacks = std::vector<ProcessKeyEventCallback>;
+using EventResultCallback = base::Callback<void(ui::mojom::EventResult)>;
+
+// InputMethod implementation that queues up the callbacks supplied to
+// ProcessKeyEvent().
+class TestInputMethod : public ui::mojom::InputMethod {
+ public:
+ TestInputMethod() {}
+ ~TestInputMethod() override {}
+
+ ProcessKeyEventCallbacks* process_key_event_callbacks() {
+ return &process_key_event_callbacks_;
+ }
+
+ // ui::ime::InputMethod:
+ void OnTextInputTypeChanged(ui::TextInputType text_input_type) override {}
+ void OnCaretBoundsChanged(const gfx::Rect& caret_bounds) override {}
+ void ProcessKeyEvent(std::unique_ptr<ui::Event> key_event,
+ const ProcessKeyEventCallback& callback) override {
+ process_key_event_callbacks_.push_back(callback);
+ }
+ void CancelComposition() override {}
+
+ private:
+ ProcessKeyEventCallbacks process_key_event_callbacks_;
+
+ DISALLOW_COPY_AND_ASSIGN(TestInputMethod);
+};
+
+} // namespace
+
+using InputMethodMusTest = test::AuraTestBaseMus;
+
+class InputMethodMusTestApi {
+ public:
+ static void SetInputMethod(InputMethodMus* input_method_mus,
+ ui::mojom::InputMethod* input_method) {
+ input_method_mus->input_method_ = input_method;
+ }
+ static void CallSendKeyEventToInputMethod(
+ InputMethodMus* input_method_mus,
+ const ui::KeyEvent& event,
+ std::unique_ptr<EventResultCallback> ack_callback) {
+ input_method_mus->SendKeyEventToInputMethod(event, std::move(ack_callback));
+ }
+
+ private:
+ DISALLOW_IMPLICIT_CONSTRUCTORS(InputMethodMusTestApi);
+};
+
+namespace {
+
+// Used in closure supplied to processing the event.
+void RunFunctionWithEventResult(bool* was_run, ui::mojom::EventResult result) {
+ *was_run = true;
+}
+
+} // namespace
+
+TEST_F(InputMethodMusTest, PendingCallbackRunFromDestruction) {
+ aura::Window window(nullptr);
+ window.Init(ui::LAYER_NOT_DRAWN);
+ bool was_event_result_callback_run = false;
+ // Create an InputMethodMus and foward an event to it.
+ {
+ TestInputMethodDelegate input_method_delegate;
+ InputMethodMus input_method_mus(&input_method_delegate, &window);
+ TestInputMethod test_input_method;
+ InputMethodMusTestApi::SetInputMethod(&input_method_mus,
+ &test_input_method);
+ std::unique_ptr<EventResultCallback> callback =
+ base::MakeUnique<EventResultCallback>(base::Bind(
+ &RunFunctionWithEventResult, &was_event_result_callback_run));
+ InputMethodMusTestApi::CallSendKeyEventToInputMethod(
+ &input_method_mus, ui::KeyEvent(ui::ET_KEY_PRESSED, ui::VKEY_RETURN, 0),
+ std::move(callback));
+ // Add a null callback as well, to make sure null is deal with.
+ InputMethodMusTestApi::CallSendKeyEventToInputMethod(
+ &input_method_mus, ui::KeyEvent(ui::ET_KEY_PRESSED, ui::VKEY_RETURN, 0),
+ nullptr);
+ // The event should have been queued.
+ EXPECT_EQ(2u, test_input_method.process_key_event_callbacks()->size());
+ // Callback should not have been run yet.
+ EXPECT_FALSE(was_event_result_callback_run);
+ }
+
+ // When the destructor is run the callback should be run.
+ EXPECT_TRUE(was_event_result_callback_run);
+}
+
+} // namespace aura
« no previous file with comments | « ui/aura/mus/input_method_mus.cc ('k') | ui/aura/mus/os_exchange_data_provider_mus_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698