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

Side by Side Diff: ui/keyboard/keyboard_controller_unittest.cc

Issue 2122873002: Add virtualKeyboardPrivate.onKeyboardClosed API. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix test error. Created 4 years, 3 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 unified diff | Download patch
« no previous file with comments | « ui/keyboard/keyboard_controller_observer.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "ui/keyboard/keyboard_controller.h" 5 #include "ui/keyboard/keyboard_controller.h"
6 6
7 #include <memory> 7 #include <memory>
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/command_line.h" 10 #include "base/command_line.h"
(...skipping 153 matching lines...) Expand 10 before | Expand all | Expand 10 after
164 base::RunLoop* const run_loop_; 164 base::RunLoop* const run_loop_;
165 165
166 DISALLOW_COPY_AND_ASSIGN(KeyboardContainerObserver); 166 DISALLOW_COPY_AND_ASSIGN(KeyboardContainerObserver);
167 }; 167 };
168 168
169 } // namespace 169 } // namespace
170 170
171 class KeyboardControllerTest : public testing::Test, 171 class KeyboardControllerTest : public testing::Test,
172 public KeyboardControllerObserver { 172 public KeyboardControllerObserver {
173 public: 173 public:
174 KeyboardControllerTest() : number_of_calls_(0), ui_(nullptr) {} 174 KeyboardControllerTest()
175 : number_of_calls_(0), ui_(nullptr), keyboard_closed_(false) {}
175 ~KeyboardControllerTest() override {} 176 ~KeyboardControllerTest() override {}
176 177
177 void SetUp() override { 178 void SetUp() override {
178 // The ContextFactory must exist before any Compositors are created. 179 // The ContextFactory must exist before any Compositors are created.
179 bool enable_pixel_output = false; 180 bool enable_pixel_output = false;
180 ui::ContextFactory* context_factory = 181 ui::ContextFactory* context_factory =
181 ui::InitializeContextFactoryForTests(enable_pixel_output); 182 ui::InitializeContextFactoryForTests(enable_pixel_output);
182 183
183 ui::SetUpInputMethodFactoryForTesting(); 184 ui::SetUpInputMethodFactoryForTesting();
184 aura_test_helper_.reset(new aura::test::AuraTestHelper(&message_loop_)); 185 aura_test_helper_.reset(new aura::test::AuraTestHelper(&message_loop_));
185 aura_test_helper_->SetUp(context_factory); 186 aura_test_helper_->SetUp(context_factory);
186 new wm::DefaultActivationClient(aura_test_helper_->root_window()); 187 new wm::DefaultActivationClient(aura_test_helper_->root_window());
187 focus_controller_.reset(new TestFocusController(root_window())); 188 focus_controller_.reset(new TestFocusController(root_window()));
188 ui_ = new TestKeyboardUI(aura_test_helper_->host()->GetInputMethod()); 189 ui_ = new TestKeyboardUI(aura_test_helper_->host()->GetInputMethod());
189 controller_.reset(new KeyboardController(ui_)); 190 controller_.reset(new KeyboardController(ui_));
190 controller()->AddObserver(this); 191 controller()->AddObserver(this);
191 } 192 }
192 193
193 void TearDown() override { 194 void TearDown() override {
194 controller()->RemoveObserver(this); 195 if (controller())
196 controller()->RemoveObserver(this);
195 controller_.reset(); 197 controller_.reset();
196 focus_controller_.reset(); 198 focus_controller_.reset();
197 aura_test_helper_->TearDown(); 199 aura_test_helper_->TearDown();
198 ui::TerminateContextFactoryForTests(); 200 ui::TerminateContextFactoryForTests();
199 } 201 }
200 202
201 aura::Window* root_window() { return aura_test_helper_->root_window(); } 203 aura::Window* root_window() { return aura_test_helper_->root_window(); }
202 KeyboardUI* ui() { return ui_; } 204 KeyboardUI* ui() { return ui_; }
203 KeyboardController* controller() { return controller_.get(); } 205 KeyboardController* controller() { return controller_.get(); }
204 206
205 void ShowKeyboard() { 207 void ShowKeyboard() {
206 test_text_input_client_.reset( 208 test_text_input_client_.reset(
207 new ui::DummyTextInputClient(ui::TEXT_INPUT_TYPE_TEXT)); 209 new ui::DummyTextInputClient(ui::TEXT_INPUT_TYPE_TEXT));
208 SetFocus(test_text_input_client_.get()); 210 SetFocus(test_text_input_client_.get());
209 } 211 }
210 212
211 void MockRotateScreen() { 213 void MockRotateScreen() {
212 const gfx::Rect root_bounds = root_window()->bounds(); 214 const gfx::Rect root_bounds = root_window()->bounds();
213 root_window()->SetBounds( 215 root_window()->SetBounds(
214 gfx::Rect(0, 0, root_bounds.height(), root_bounds.width())); 216 gfx::Rect(0, 0, root_bounds.height(), root_bounds.width()));
215 } 217 }
216 218
217 protected: 219 protected:
218 // KeyboardControllerObserver overrides 220 // KeyboardControllerObserver overrides
219 void OnKeyboardBoundsChanging(const gfx::Rect& new_bounds) override { 221 void OnKeyboardBoundsChanging(const gfx::Rect& new_bounds) override {
220 notified_bounds_ = new_bounds; 222 notified_bounds_ = new_bounds;
221 number_of_calls_++; 223 number_of_calls_++;
222 } 224 }
225 void OnKeyboardClosed() override { keyboard_closed_ = true; }
223 226
224 int number_of_calls() const { return number_of_calls_; } 227 int number_of_calls() const { return number_of_calls_; }
225 228
226 const gfx::Rect& notified_bounds() { return notified_bounds_; } 229 const gfx::Rect& notified_bounds() { return notified_bounds_; }
227 230
231 bool IsKeyboardClosed() { return keyboard_closed_; }
232
228 void SetFocus(ui::TextInputClient* client) { 233 void SetFocus(ui::TextInputClient* client) {
229 ui::InputMethod* input_method = ui()->GetInputMethod(); 234 ui::InputMethod* input_method = ui()->GetInputMethod();
230 input_method->SetFocusedTextInputClient(client); 235 input_method->SetFocusedTextInputClient(client);
231 if (client && client->GetTextInputType() != ui::TEXT_INPUT_TYPE_NONE) { 236 if (client && client->GetTextInputType() != ui::TEXT_INPUT_TYPE_NONE) {
232 input_method->ShowImeIfNeeded(); 237 input_method->ShowImeIfNeeded();
233 if (ui_->GetKeyboardWindow()->bounds().height() == 0) { 238 if (ui_->GetKeyboardWindow()->bounds().height() == 0) {
234 // Set initial bounds for test keyboard window. 239 // Set initial bounds for test keyboard window.
235 ui_->GetKeyboardWindow()->SetBounds( 240 ui_->GetKeyboardWindow()->SetBounds(
236 FullWidthKeyboardBoundsFromRootBounds( 241 FullWidthKeyboardBoundsFromRootBounds(
237 root_window()->bounds(), kDefaultVirtualKeyboardHeight)); 242 root_window()->bounds(), kDefaultVirtualKeyboardHeight));
238 } 243 }
239 } 244 }
240 } 245 }
241 246
242 bool WillHideKeyboard() { 247 bool WillHideKeyboard() {
243 return controller_->WillHideKeyboard(); 248 return controller_->WillHideKeyboard();
244 } 249 }
245 250
246 bool ShouldEnableInsets(aura::Window* window) { 251 bool ShouldEnableInsets(aura::Window* window) {
247 aura::Window* keyboard_window = ui_->GetKeyboardWindow(); 252 aura::Window* keyboard_window = ui_->GetKeyboardWindow();
248 return (keyboard_window->GetRootWindow() == window->GetRootWindow() && 253 return (keyboard_window->GetRootWindow() == window->GetRootWindow() &&
249 keyboard::IsKeyboardOverscrollEnabled() && 254 keyboard::IsKeyboardOverscrollEnabled() &&
250 keyboard_window->IsVisible() && 255 keyboard_window->IsVisible() &&
251 controller_->keyboard_visible()); 256 controller_->keyboard_visible());
252 } 257 }
253 258
259 void ResetController() { controller_.reset(); }
260
254 base::MessageLoopForUI message_loop_; 261 base::MessageLoopForUI message_loop_;
255 std::unique_ptr<aura::test::AuraTestHelper> aura_test_helper_; 262 std::unique_ptr<aura::test::AuraTestHelper> aura_test_helper_;
256 std::unique_ptr<TestFocusController> focus_controller_; 263 std::unique_ptr<TestFocusController> focus_controller_;
257 264
258 private: 265 private:
259 int number_of_calls_; 266 int number_of_calls_;
260 gfx::Rect notified_bounds_; 267 gfx::Rect notified_bounds_;
261 KeyboardUI* ui_; 268 KeyboardUI* ui_;
262 std::unique_ptr<KeyboardController> controller_; 269 std::unique_ptr<KeyboardController> controller_;
263 std::unique_ptr<ui::TextInputClient> test_text_input_client_; 270 std::unique_ptr<ui::TextInputClient> test_text_input_client_;
271 bool keyboard_closed_;
264 DISALLOW_COPY_AND_ASSIGN(KeyboardControllerTest); 272 DISALLOW_COPY_AND_ASSIGN(KeyboardControllerTest);
265 }; 273 };
266 274
267 TEST_F(KeyboardControllerTest, KeyboardSize) { 275 TEST_F(KeyboardControllerTest, KeyboardSize) {
268 aura::Window* container(controller()->GetContainerWindow()); 276 aura::Window* container(controller()->GetContainerWindow());
269 aura::Window* keyboard(ui()->GetKeyboardWindow()); 277 aura::Window* keyboard(ui()->GetKeyboardWindow());
270 gfx::Rect screen_bounds = root_window()->bounds(); 278 gfx::Rect screen_bounds = root_window()->bounds();
271 root_window()->AddChild(container); 279 root_window()->AddChild(container);
272 container->AddChild(keyboard); 280 container->AddChild(keyboard);
273 const gfx::Rect& initial_bounds = container->bounds(); 281 const gfx::Rect& initial_bounds = container->bounds();
(...skipping 246 matching lines...) Expand 10 before | Expand all | Expand 10 after
520 // Keyboard should hide when focus on no input client. 528 // Keyboard should hide when focus on no input client.
521 SetFocus(&no_input_client_1); 529 SetFocus(&no_input_client_1);
522 EXPECT_TRUE(WillHideKeyboard()); 530 EXPECT_TRUE(WillHideKeyboard());
523 531
524 // Wait for hide keyboard to finish. 532 // Wait for hide keyboard to finish.
525 run_loop.Run(); 533 run_loop.Run();
526 EXPECT_FALSE(keyboard_container->IsVisible()); 534 EXPECT_FALSE(keyboard_container->IsVisible());
527 keyboard::SetAccessibilityKeyboardEnabled(false); 535 keyboard::SetAccessibilityKeyboardEnabled(false);
528 } 536 }
529 537
538 // Tests that deactivates keyboard will get closed event.
539 TEST_F(KeyboardControllerTest, CloseKeyboard) {
540 keyboard::SetAccessibilityKeyboardEnabled(true);
541 aura::Window* keyboard_container(controller()->GetContainerWindow());
542 root_window()->AddChild(keyboard_container);
543 keyboard_container->Show();
544
545 ShowKeyboard();
546 EXPECT_TRUE(keyboard_container->IsVisible());
547 EXPECT_FALSE(IsKeyboardClosed());
548
549 root_window()->RemoveChild(keyboard_container);
550 ResetController();
551 EXPECT_TRUE(IsKeyboardClosed());
552 }
553
530 class KeyboardControllerAnimationTest : public KeyboardControllerTest { 554 class KeyboardControllerAnimationTest : public KeyboardControllerTest {
531 public: 555 public:
532 KeyboardControllerAnimationTest() {} 556 KeyboardControllerAnimationTest() {}
533 ~KeyboardControllerAnimationTest() override {} 557 ~KeyboardControllerAnimationTest() override {}
534 558
535 void SetUp() override { 559 void SetUp() override {
536 // We cannot short-circuit animations for this test. 560 // We cannot short-circuit animations for this test.
537 ui::ScopedAnimationDurationScaleMode test_duration_mode( 561 ui::ScopedAnimationDurationScaleMode test_duration_mode(
538 ui::ScopedAnimationDurationScaleMode::NON_ZERO_DURATION); 562 ui::ScopedAnimationDurationScaleMode::NON_ZERO_DURATION);
539 563
(...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after
658 gfx::Rect new_bounds(0, 0, 1280, 800); 682 gfx::Rect new_bounds(0, 0, 1280, 800);
659 ASSERT_NE(new_bounds, root_window()->bounds()); 683 ASSERT_NE(new_bounds, root_window()->bounds());
660 EXPECT_EQ(1, number_of_calls()); 684 EXPECT_EQ(1, number_of_calls());
661 root_window()->SetBounds(new_bounds); 685 root_window()->SetBounds(new_bounds);
662 EXPECT_EQ(2, number_of_calls()); 686 EXPECT_EQ(2, number_of_calls());
663 MockRotateScreen(); 687 MockRotateScreen();
664 EXPECT_EQ(3, number_of_calls()); 688 EXPECT_EQ(3, number_of_calls());
665 } 689 }
666 690
667 } // namespace keyboard 691 } // namespace keyboard
OLDNEW
« no previous file with comments | « ui/keyboard/keyboard_controller_observer.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698