// Copyright (c) 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 "ui/keyboard/keyboard_util.h" #include "testing/gtest/include/gtest/gtest.h" namespace keyboard { class KeyboardUtilTest : public testing::Test { public: KeyboardUtilTest() {} ~KeyboardUtilTest() override {} // Sets all flags controlling whether the keyboard should be shown to // their disabled state. void DisableAllFlags() { keyboard::SetAccessibilityKeyboardEnabled(false); keyboard::SetTouchKeyboardEnabled(false); keyboard::SetKeyboardShowOverride( keyboard::KEYBOARD_SHOW_OVERRIDE_DISABLED); keyboard::SetRequestedKeyboardState(keyboard::KEYBOARD_STATE_DISABLED); } // Sets all flags controlling whether the keyboard should be shown to // their enabled state. void EnableAllFlags() { keyboard::SetAccessibilityKeyboardEnabled(true); keyboard::SetTouchKeyboardEnabled(true); keyboard::SetKeyboardShowOverride(keyboard::KEYBOARD_SHOW_OVERRIDE_ENABLED); keyboard::SetRequestedKeyboardState(keyboard::KEYBOARD_STATE_ENABLED); } // Sets all flags controlling whether the keyboard should be shown to // their neutral state. void ResetAllFlags() { keyboard::SetAccessibilityKeyboardEnabled(false); keyboard::SetTouchKeyboardEnabled(false); keyboard::SetKeyboardShowOverride(keyboard::KEYBOARD_SHOW_OVERRIDE_NONE); keyboard::SetRequestedKeyboardState(keyboard::KEYBOARD_STATE_AUTO); } void SetUp() override { ResetAllFlags(); } private: DISALLOW_COPY_AND_ASSIGN(KeyboardUtilTest); }; // Tests that we respect the accessibility setting. TEST_F(KeyboardUtilTest, AlwaysShowIfA11yEnabled) { // Disabled by default. ASSERT_FALSE(keyboard::IsKeyboardEnabled()); // If enabled by accessibility, should ignore other flag values. DisableAllFlags(); keyboard::SetAccessibilityKeyboardEnabled(true); ASSERT_TRUE(keyboard::IsKeyboardEnabled()); } // Tests that we respect the policy setting. TEST_F(KeyboardUtilTest, AlwaysShowIfPolicyEnabled) { ASSERT_FALSE(keyboard::IsKeyboardEnabled()); // If policy is enabled, should ignore other flag values. DisableAllFlags(); keyboard::SetKeyboardShowOverride(keyboard::KEYBOARD_SHOW_OVERRIDE_ENABLED); ASSERT_TRUE(keyboard::IsKeyboardEnabled()); } // Tests that we respect the policy setting. TEST_F(KeyboardUtilTest, HidesIfPolicyDisabled) { ASSERT_FALSE(keyboard::IsKeyboardEnabled()); EnableAllFlags(); // Set accessibility to neutral since accessibility has higher precedence. keyboard::SetAccessibilityKeyboardEnabled(false); ASSERT_TRUE(keyboard::IsKeyboardEnabled()); // Disable policy. Keyboard should be disabled. keyboard::SetKeyboardShowOverride(keyboard::KEYBOARD_SHOW_OVERRIDE_DISABLED); ASSERT_FALSE(keyboard::IsKeyboardEnabled()); } // Tests that the keyboard shows when requested state provided higher priority // flags have not been set. TEST_F(KeyboardUtilTest, ShowKeyboardWhenRequested) { DisableAllFlags(); // Remove device policy, which has higher precedence than us. keyboard::SetKeyboardShowOverride(keyboard::KEYBOARD_SHOW_OVERRIDE_NONE); ASSERT_FALSE(keyboard::IsKeyboardEnabled()); // Requested should have higher precedence than all the remaining flags. keyboard::SetRequestedKeyboardState(keyboard::KEYBOARD_STATE_ENABLED); ASSERT_TRUE(keyboard::IsKeyboardEnabled()); } // Tests that the touch keyboard is hidden when requested state is disabled and // higher priority flags have not been set. TEST_F(KeyboardUtilTest, HideKeyboardWhenRequested) { EnableAllFlags(); // Remove higher precedence flags. keyboard::SetKeyboardShowOverride(keyboard::KEYBOARD_SHOW_OVERRIDE_NONE); keyboard::SetAccessibilityKeyboardEnabled(false); ASSERT_TRUE(keyboard::IsKeyboardEnabled()); // Set requested state to disable. Keyboard should disable. keyboard::SetRequestedKeyboardState(keyboard::KEYBOARD_STATE_DISABLED); ASSERT_FALSE(keyboard::IsKeyboardEnabled()); } // SetTouchKeyboardEnabled has the lowest priority, but should still work when // none of the other flags are enabled. TEST_F(KeyboardUtilTest, HideKeyboardWhenTouchEnabled) { ResetAllFlags(); ASSERT_FALSE(keyboard::IsKeyboardEnabled()); keyboard::SetTouchKeyboardEnabled(true); ASSERT_TRUE(keyboard::IsKeyboardEnabled()); } } // namespace keyboard