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

Unified Diff: chrome/browser/chromeos/input_method/virtual_keyboard_selector_unittest.cc

Issue 7074008: initial version of auto VK switching. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: demo update Created 9 years, 6 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
Index: chrome/browser/chromeos/input_method/virtual_keyboard_selector_unittest.cc
diff --git a/chrome/browser/chromeos/input_method/virtual_keyboard_selector_unittest.cc b/chrome/browser/chromeos/input_method/virtual_keyboard_selector_unittest.cc
new file mode 100644
index 0000000000000000000000000000000000000000..95b8656006cc5e5e6cf18cf7bc3970711345ed39
--- /dev/null
+++ b/chrome/browser/chromeos/input_method/virtual_keyboard_selector_unittest.cc
@@ -0,0 +1,310 @@
+// Copyright (c) 2011 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 "chrome/browser/chromeos/input_method/virtual_keyboard_selector.h"
+
+#include "base/logging.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+// For EXPECT_TRUE calls below. The operator has to be in the global namespace.
+static bool operator==(const chromeos::input_method::VirtualKeyboard& lhs,
+ const chromeos::input_method::VirtualKeyboard& rhs) {
+ return lhs.GetURLForLayout("") == rhs.GetURLForLayout("");
+}
+
+namespace {
+
+template <size_t L>
+std::set<std::string> CreateLayoutSet(const char* (&layouts)[L]) {
+ std::set<std::string> result;
+ for (size_t i = 0; i < L; ++i) {
+ result.insert(layouts[i]);
+ }
+ return result;
+}
+
+} // namespace
+
+namespace chromeos {
+namespace input_method {
+
+class TestableVirtualKeyboardSelector : public VirtualKeyboardSelector {
+ public:
+ // Change access rights.
+ using VirtualKeyboardSelector::SelectVirtualKeyboardInternal;
+};
+
+TEST(VirtualKeyboardSelectorTest, TestNoKeyboard) {
+ TestableVirtualKeyboardSelector selector;
+ EXPECT_EQ(NULL, selector.SelectVirtualKeyboard("us"));
+ EXPECT_EQ(NULL, selector.SelectVirtualKeyboard(""));
+}
+
+TEST(VirtualKeyboardSelectorTest, TestSystemKeyboard) {
+ static const char* layouts[] = { "a", "b", "c" };
+ VirtualKeyboard system_virtual_keyboard(
+ GURL("http://system"), CreateLayoutSet(layouts), true /* is_system */);
+
+ TestableVirtualKeyboardSelector selector;
+ selector.AddVirtualKeyboard(system_virtual_keyboard.url(),
+ system_virtual_keyboard.supported_layouts(),
+ system_virtual_keyboard.is_system());
+
+ ASSERT_TRUE(selector.SelectVirtualKeyboardInternal("a"));
+ EXPECT_TRUE(system_virtual_keyboard == *selector.SelectVirtualKeyboard("a"));
+ ASSERT_TRUE(selector.SelectVirtualKeyboardInternal("b"));
+ EXPECT_TRUE(system_virtual_keyboard == *selector.SelectVirtualKeyboard("b"));
+ ASSERT_TRUE(selector.SelectVirtualKeyboardInternal("c"));
+ EXPECT_TRUE(system_virtual_keyboard == *selector.SelectVirtualKeyboard("c"));
+ EXPECT_EQ(NULL, selector.SelectVirtualKeyboard("d"));
+ EXPECT_EQ(NULL, selector.SelectVirtualKeyboard("aa"));
+ EXPECT_EQ(NULL, selector.SelectVirtualKeyboard(""));
+}
+
+TEST(VirtualKeyboardSelectorTest, TestTwoSystemKeyboards) {
+ static const char* layouts_1[] = { "a", "b", "c" };
+ static const char* layouts_2[] = { "a", "c", "d" };
+
+ VirtualKeyboard system_virtual_keyboard_1(
+ GURL("http://system1"), CreateLayoutSet(layouts_1), true /* is_system */);
+ VirtualKeyboard system_virtual_keyboard_2(
+ GURL("http://system2"), CreateLayoutSet(layouts_2), true /* is_system */);
+
+ TestableVirtualKeyboardSelector selector;
+ selector.AddVirtualKeyboard(system_virtual_keyboard_1.url(),
+ system_virtual_keyboard_1.supported_layouts(),
+ system_virtual_keyboard_1.is_system());
+ selector.AddVirtualKeyboard(system_virtual_keyboard_2.url(),
+ system_virtual_keyboard_2.supported_layouts(),
+ system_virtual_keyboard_2.is_system());
+
+ // At this point, system_virtual_keyboard_2 has higher priority since it's
+ // added later than system_virtual_keyboard_1.
+ ASSERT_TRUE(selector.SelectVirtualKeyboardInternal("a"));
+ EXPECT_TRUE(system_virtual_keyboard_2 ==
+ *selector.SelectVirtualKeyboard("a"));
+ ASSERT_TRUE(selector.SelectVirtualKeyboardInternal("c"));
+ EXPECT_TRUE(system_virtual_keyboard_2 ==
+ *selector.SelectVirtualKeyboard("c"));
+ ASSERT_TRUE(selector.SelectVirtualKeyboardInternal("d"));
+ EXPECT_TRUE(system_virtual_keyboard_2 ==
+ *selector.SelectVirtualKeyboard("d"));
+
+ // Request "b". system_virtual_keyboard_1 should be returned.
+ ASSERT_TRUE(selector.SelectVirtualKeyboardInternal("b"));
+ EXPECT_TRUE(system_virtual_keyboard_1 ==
+ *selector.SelectVirtualKeyboard("b"));
+
+ // Now system_virtual_keyboard_1 should be selected for 'a' and 'c' since
+ // it's the current virtual keyboard.
+ ASSERT_TRUE(selector.SelectVirtualKeyboardInternal("a"));
+ EXPECT_TRUE(system_virtual_keyboard_1 ==
+ *selector.SelectVirtualKeyboard("a"));
+ ASSERT_TRUE(selector.SelectVirtualKeyboardInternal("c"));
+ EXPECT_TRUE(system_virtual_keyboard_1 ==
+ *selector.SelectVirtualKeyboard("c"));
+
+ // Request "d" again. system_virtual_keyboard_2 should be returned.
+ ASSERT_TRUE(selector.SelectVirtualKeyboardInternal("d"));
+ EXPECT_TRUE(system_virtual_keyboard_2 ==
+ *selector.SelectVirtualKeyboard("d"));
+ // This time, system_virtual_keyboard_2 should be selected for 'a' and 'c'.
+ ASSERT_TRUE(selector.SelectVirtualKeyboardInternal("a"));
+ EXPECT_TRUE(system_virtual_keyboard_2 ==
+ *selector.SelectVirtualKeyboard("a"));
+ ASSERT_TRUE(selector.SelectVirtualKeyboardInternal("c"));
+ EXPECT_TRUE(system_virtual_keyboard_2 ==
+ *selector.SelectVirtualKeyboard("c"));
+}
+
+TEST(VirtualKeyboardSelectorTest, TestUserKeyboard) {
+ static const char* layouts[] = { "a", "b", "c" };
+ VirtualKeyboard user_virtual_keyboard(
+ GURL("http://user"), CreateLayoutSet(layouts), false /* is_system */);
+
+ TestableVirtualKeyboardSelector selector;
+ selector.AddVirtualKeyboard(user_virtual_keyboard.url(),
+ user_virtual_keyboard.supported_layouts(),
+ user_virtual_keyboard.is_system());
+ ASSERT_TRUE(selector.SelectVirtualKeyboardInternal("a"));
+ EXPECT_TRUE(user_virtual_keyboard == *selector.SelectVirtualKeyboard("a"));
+ ASSERT_TRUE(selector.SelectVirtualKeyboardInternal("b"));
+ EXPECT_TRUE(user_virtual_keyboard == *selector.SelectVirtualKeyboard("b"));
+ ASSERT_TRUE(selector.SelectVirtualKeyboardInternal("c"));
+ EXPECT_TRUE(user_virtual_keyboard == *selector.SelectVirtualKeyboard("c"));
+ EXPECT_EQ(NULL, selector.SelectVirtualKeyboard("d"));
+ EXPECT_EQ(NULL, selector.SelectVirtualKeyboard("aa"));
+ EXPECT_EQ(NULL, selector.SelectVirtualKeyboard(""));
+}
+
+TEST(VirtualKeyboardSelectorTest, TestTwoUserKeyboards) {
+ static const char* layouts_1[] = { "a", "b", "c" };
+ static const char* layouts_2[] = { "a", "c", "d" };
+
+ VirtualKeyboard user_virtual_keyboard_1(
+ GURL("http://user1"), CreateLayoutSet(layouts_1), false /* is_system */);
+ VirtualKeyboard user_virtual_keyboard_2(
+ GURL("http://user2"), CreateLayoutSet(layouts_2), false /* is_system */);
+
+ TestableVirtualKeyboardSelector selector;
+ selector.AddVirtualKeyboard(user_virtual_keyboard_1.url(),
+ user_virtual_keyboard_1.supported_layouts(),
+ user_virtual_keyboard_1.is_system());
+ selector.AddVirtualKeyboard(user_virtual_keyboard_2.url(),
+ user_virtual_keyboard_2.supported_layouts(),
+ user_virtual_keyboard_2.is_system());
+
+ // At this point, user_virtual_keyboard_2 has higher priority since it's
+ // added later than user_virtual_keyboard_1.
+ ASSERT_TRUE(selector.SelectVirtualKeyboardInternal("a"));
+ EXPECT_TRUE(user_virtual_keyboard_2 ==
+ *selector.SelectVirtualKeyboard("a"));
+ ASSERT_TRUE(selector.SelectVirtualKeyboardInternal("c"));
+ EXPECT_TRUE(user_virtual_keyboard_2 ==
+ *selector.SelectVirtualKeyboard("c"));
+ ASSERT_TRUE(selector.SelectVirtualKeyboardInternal("d"));
+ EXPECT_TRUE(user_virtual_keyboard_2 ==
+ *selector.SelectVirtualKeyboard("d"));
+
+ // Request "b". user_virtual_keyboard_1 should be returned.
+ ASSERT_TRUE(selector.SelectVirtualKeyboardInternal("b"));
+ EXPECT_TRUE(user_virtual_keyboard_1 ==
+ *selector.SelectVirtualKeyboard("b"));
+
+ // Now user_virtual_keyboard_1 should be selected for 'a' and 'c' since
+ // it's the current virtual keyboard.
+ ASSERT_TRUE(selector.SelectVirtualKeyboardInternal("a"));
+ EXPECT_TRUE(user_virtual_keyboard_1 ==
+ *selector.SelectVirtualKeyboard("a"));
+ ASSERT_TRUE(selector.SelectVirtualKeyboardInternal("c"));
+ EXPECT_TRUE(user_virtual_keyboard_1 ==
+ *selector.SelectVirtualKeyboard("c"));
+
+ // Request "d" again. user_virtual_keyboard_2 should be returned.
+ ASSERT_TRUE(selector.SelectVirtualKeyboardInternal("d"));
+ EXPECT_TRUE(user_virtual_keyboard_2 ==
+ *selector.SelectVirtualKeyboard("d"));
+ // This time, user_virtual_keyboard_2 should be selected for 'a' and 'c'.
+ ASSERT_TRUE(selector.SelectVirtualKeyboardInternal("a"));
+ EXPECT_TRUE(user_virtual_keyboard_2 ==
+ *selector.SelectVirtualKeyboard("a"));
+ ASSERT_TRUE(selector.SelectVirtualKeyboardInternal("c"));
+ EXPECT_TRUE(user_virtual_keyboard_2 ==
+ *selector.SelectVirtualKeyboard("c"));
+}
+
+TEST(VirtualKeyboardSelectorTest, TestUserSystemMixed) {
+ static const char* ulayouts_1[] = { "a", "b", "c" };
+ static const char* ulayouts_2[] = { "a", "c", "d" };
+ static const char* layouts_1[] = { "a", "x", "y" };
+ static const char* layouts_2[] = { "a", "y", "z" };
+
+ VirtualKeyboard user_virtual_keyboard_1(
+ GURL("http://user1"), CreateLayoutSet(ulayouts_1), false /* is_system */);
+ VirtualKeyboard user_virtual_keyboard_2(
+ GURL("http://user2"), CreateLayoutSet(ulayouts_2), false /* is_system */);
+ VirtualKeyboard system_virtual_keyboard_1(
+ GURL("http://system1"), CreateLayoutSet(layouts_1), true /* is_system */);
+ VirtualKeyboard system_virtual_keyboard_2(
+ GURL("http://system2"), CreateLayoutSet(layouts_2), true /* is_system */);
+
+ TestableVirtualKeyboardSelector selector;
+ selector.AddVirtualKeyboard(user_virtual_keyboard_1.url(),
+ user_virtual_keyboard_1.supported_layouts(),
+ user_virtual_keyboard_1.is_system());
+ selector.AddVirtualKeyboard(user_virtual_keyboard_2.url(),
+ user_virtual_keyboard_2.supported_layouts(),
+ user_virtual_keyboard_2.is_system());
+ selector.AddVirtualKeyboard(system_virtual_keyboard_1.url(),
+ system_virtual_keyboard_1.supported_layouts(),
+ system_virtual_keyboard_1.is_system());
+ selector.AddVirtualKeyboard(system_virtual_keyboard_2.url(),
+ system_virtual_keyboard_2.supported_layouts(),
+ system_virtual_keyboard_2.is_system());
+
+ // At this point, user_virtual_keyboard_2 has the highest priority.
+ ASSERT_TRUE(selector.SelectVirtualKeyboardInternal("a"));
+ EXPECT_TRUE(user_virtual_keyboard_2 ==
+ *selector.SelectVirtualKeyboard("a"));
+ ASSERT_TRUE(selector.SelectVirtualKeyboardInternal("c"));
+ EXPECT_TRUE(user_virtual_keyboard_2 ==
+ *selector.SelectVirtualKeyboard("c"));
+ ASSERT_TRUE(selector.SelectVirtualKeyboardInternal("d"));
+ EXPECT_TRUE(user_virtual_keyboard_2 ==
+ *selector.SelectVirtualKeyboard("d"));
+
+ // Request "b". user_virtual_keyboard_1 should be returned.
+ ASSERT_TRUE(selector.SelectVirtualKeyboardInternal("b"));
+ EXPECT_TRUE(user_virtual_keyboard_1 ==
+ *selector.SelectVirtualKeyboard("b"));
+ // Now user_virtual_keyboard_1 should be selected for 'a' and 'c' since
+ // it's the current virtual keyboard.
+ ASSERT_TRUE(selector.SelectVirtualKeyboardInternal("a"));
+ EXPECT_TRUE(user_virtual_keyboard_1 ==
+ *selector.SelectVirtualKeyboard("a"));
+ ASSERT_TRUE(selector.SelectVirtualKeyboardInternal("c"));
+ EXPECT_TRUE(user_virtual_keyboard_1 ==
+ *selector.SelectVirtualKeyboard("c"));
+
+ // Request "x". system_virtual_keyboard_2 should be returned (since it's
+ // added later than system_virtual_keyboard_1).
+ ASSERT_TRUE(selector.SelectVirtualKeyboardInternal("x"));
+ EXPECT_TRUE(system_virtual_keyboard_1 ==
+ *selector.SelectVirtualKeyboard("x"));
+ ASSERT_TRUE(selector.SelectVirtualKeyboardInternal("y"));
+ EXPECT_TRUE(system_virtual_keyboard_1 ==
+ *selector.SelectVirtualKeyboard("y"));
+ ASSERT_TRUE(selector.SelectVirtualKeyboardInternal("a"));
+ EXPECT_TRUE(system_virtual_keyboard_1 ==
+ *selector.SelectVirtualKeyboard("a"));
+
+ // Switch to system_virtual_keyboard_2.
+ ASSERT_TRUE(selector.SelectVirtualKeyboardInternal("z"));
+ EXPECT_TRUE(system_virtual_keyboard_2 ==
+ *selector.SelectVirtualKeyboard("z"));
+ ASSERT_TRUE(selector.SelectVirtualKeyboardInternal("y"));
+ EXPECT_TRUE(system_virtual_keyboard_2 ==
+ *selector.SelectVirtualKeyboard("y"));
+ ASSERT_TRUE(selector.SelectVirtualKeyboardInternal("a"));
+ EXPECT_TRUE(system_virtual_keyboard_2 ==
+ *selector.SelectVirtualKeyboard("a"));
+
+ // Switch back to system_virtual_keyboard_2.
+ ASSERT_TRUE(selector.SelectVirtualKeyboardInternal("x"));
+ EXPECT_TRUE(system_virtual_keyboard_1 ==
+ *selector.SelectVirtualKeyboard("x"));
+ ASSERT_TRUE(selector.SelectVirtualKeyboardInternal("y"));
+ EXPECT_TRUE(system_virtual_keyboard_1 ==
+ *selector.SelectVirtualKeyboard("y"));
+ ASSERT_TRUE(selector.SelectVirtualKeyboardInternal("a"));
+ EXPECT_TRUE(system_virtual_keyboard_1 ==
+ *selector.SelectVirtualKeyboard("a"));
+
+ // Switch back to user_virtual_keyboard_1.
+ ASSERT_TRUE(selector.SelectVirtualKeyboardInternal("c"));
+ EXPECT_TRUE(user_virtual_keyboard_2 ==
+ *selector.SelectVirtualKeyboard("c"));
+}
+
+TEST(VirtualKeyboardTest, TestUrl) {
+ static const char* layouts[] = { "a", "b", "c" };
+ VirtualKeyboard system_virtual_keyboard(
+ GURL("http://system"), CreateLayoutSet(layouts), true);
+
+ EXPECT_EQ("http://system/index.html#a",
+ system_virtual_keyboard.GetURLForLayout("a").spec());
+ EXPECT_EQ("http://system/index.html#b",
+ system_virtual_keyboard.GetURLForLayout("b").spec());
+ EXPECT_EQ("http://system/index.html#c",
+ system_virtual_keyboard.GetURLForLayout("c").spec());
+ EXPECT_EQ("http://system/index.html#not-supported",
+ system_virtual_keyboard.GetURLForLayout("not-supported").spec());
+ EXPECT_EQ("http://system/index.html#not(supported)",
+ system_virtual_keyboard.GetURLForLayout("not(supported)").spec());
+ EXPECT_EQ("http://system/",
+ system_virtual_keyboard.GetURLForLayout("").spec());
+}
+
+} // namespace input_method
+} // namespace chromeos
« no previous file with comments | « chrome/browser/chromeos/input_method/virtual_keyboard_selector.cc ('k') | chrome/browser/extensions/extension_service.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698