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 |
index 3e3b89f394de78318eaa12bced637324308a4136..3734a7e57327b4f7cce26f3b8e438faa66d544e8 100644 |
--- a/chrome/browser/chromeos/input_method/virtual_keyboard_selector_unittest.cc |
+++ b/chrome/browser/chromeos/input_method/virtual_keyboard_selector_unittest.cc |
@@ -7,14 +7,42 @@ |
#include "base/logging.h" |
#include "testing/gtest/include/gtest/gtest.h" |
+namespace ime = ::chromeos::input_method; |
+ |
// 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) { |
+static bool operator==( |
+ const ime::VirtualKeyboard& lhs, const ime::VirtualKeyboard& rhs) { |
return lhs.GetURLForLayout("") == rhs.GetURLForLayout(""); |
} |
namespace { |
+typedef std::multimap< |
+ std::string, const ime::VirtualKeyboard*> LayoutToKeyboard; |
+ |
+// Returns true if [start, end) and |urls| are equal sets. |
+template <size_t L> bool CheckUrls(LayoutToKeyboard::const_iterator start, |
+ LayoutToKeyboard::const_iterator end, |
+ const char* (&urls)[L]) { |
+ std::set<GURL> expected_url_set; |
+ for (size_t i = 0; i < L; ++i) { |
+ if (!expected_url_set.insert(GURL(urls[i])).second) { |
+ LOG(ERROR) << "Duplicated URL: " << urls[i]; |
+ return false; |
+ } |
+ } |
+ |
+ std::set<GURL> actual_url_set; |
+ for (LayoutToKeyboard::const_iterator iter = start; iter != end; ++iter) { |
+ if (!actual_url_set.insert(iter->second->url()).second) { |
+ LOG(ERROR) << "Duplicated URL: " << iter->second->url().spec(); |
+ return false; |
+ } |
+ } |
+ |
+ return expected_url_set == actual_url_set; |
+} |
+ |
template <size_t L> |
std::set<std::string> CreateLayoutSet(const char* (&layouts)[L]) { |
std::set<std::string> result; |
@@ -47,30 +75,34 @@ TEST(VirtualKeyboardSelectorTest, TestAddVirtualKeyboard) { |
// The first two keyboards have the same URL. |
VirtualKeyboard virtual_keyboard_1( |
- GURL("http://url1"), CreateLayoutSet(layouts), true /* is_system */); |
+ GURL("http://url1"), "", CreateLayoutSet(layouts), true /* is_system */); |
VirtualKeyboard virtual_keyboard_2( |
- GURL("http://url1"), CreateLayoutSet(layouts), false /* is_system */); |
+ GURL("http://url1"), "", CreateLayoutSet(layouts), false /* is_system */); |
VirtualKeyboard virtual_keyboard_3( |
- GURL("http://url2"), CreateLayoutSet(layouts), false /* is_system */); |
+ GURL("http://url2"), "", CreateLayoutSet(layouts), false /* is_system */); |
TestableVirtualKeyboardSelector selector; |
EXPECT_TRUE(selector.AddVirtualKeyboard( |
virtual_keyboard_1.url(), |
+ virtual_keyboard_1.name(), |
virtual_keyboard_1.supported_layouts(), |
virtual_keyboard_1.is_system())); |
// You can't add the same keyboard twice. |
EXPECT_FALSE(selector.AddVirtualKeyboard( |
virtual_keyboard_1.url(), |
+ virtual_keyboard_1.name(), |
virtual_keyboard_1.supported_layouts(), |
virtual_keyboard_1.is_system())); |
EXPECT_FALSE(selector.AddVirtualKeyboard( |
virtual_keyboard_2.url(), |
+ virtual_keyboard_2.name(), |
virtual_keyboard_2.supported_layouts(), |
virtual_keyboard_2.is_system())); |
EXPECT_TRUE(selector.AddVirtualKeyboard( |
virtual_keyboard_3.url(), |
+ virtual_keyboard_3.name(), |
virtual_keyboard_3.supported_layouts(), |
virtual_keyboard_3.is_system())); |
} |
@@ -78,11 +110,12 @@ TEST(VirtualKeyboardSelectorTest, TestAddVirtualKeyboard) { |
TEST(VirtualKeyboardSelectorTest, TestSystemKeyboard) { |
static const char* layouts[] = { "a", "b", "c" }; |
VirtualKeyboard system_virtual_keyboard( |
- GURL("http://system"), CreateLayoutSet(layouts), true /* is_system */); |
+ GURL("http://system"), "", CreateLayoutSet(layouts), true /* is_system */); |
TestableVirtualKeyboardSelector selector; |
EXPECT_TRUE(selector.AddVirtualKeyboard( |
system_virtual_keyboard.url(), |
+ system_virtual_keyboard.name(), |
system_virtual_keyboard.supported_layouts(), |
system_virtual_keyboard.is_system())); |
@@ -102,17 +135,21 @@ TEST(VirtualKeyboardSelectorTest, TestTwoSystemKeyboards) { |
static const char* layouts_2[] = { "a", "c", "d" }; |
VirtualKeyboard system_virtual_keyboard_1( |
- GURL("http://system1"), CreateLayoutSet(layouts_1), true /* is_system */); |
+ GURL("http://system1"), "", CreateLayoutSet(layouts_1), |
+ true /* is_system */); |
VirtualKeyboard system_virtual_keyboard_2( |
- GURL("http://system2"), CreateLayoutSet(layouts_2), true /* is_system */); |
+ GURL("http://system2"), "", CreateLayoutSet(layouts_2), |
+ true /* is_system */); |
TestableVirtualKeyboardSelector selector; |
EXPECT_TRUE(selector.AddVirtualKeyboard( |
system_virtual_keyboard_1.url(), |
+ system_virtual_keyboard_1.name(), |
system_virtual_keyboard_1.supported_layouts(), |
system_virtual_keyboard_1.is_system())); |
EXPECT_TRUE(selector.AddVirtualKeyboard( |
system_virtual_keyboard_2.url(), |
+ system_virtual_keyboard_2.name(), |
system_virtual_keyboard_2.supported_layouts(), |
system_virtual_keyboard_2.is_system())); |
@@ -158,11 +195,12 @@ TEST(VirtualKeyboardSelectorTest, TestTwoSystemKeyboards) { |
TEST(VirtualKeyboardSelectorTest, TestUserKeyboard) { |
static const char* layouts[] = { "a", "b", "c" }; |
VirtualKeyboard user_virtual_keyboard( |
- GURL("http://user"), CreateLayoutSet(layouts), false /* is_system */); |
+ GURL("http://user"), "", CreateLayoutSet(layouts), false /* is_system */); |
TestableVirtualKeyboardSelector selector; |
EXPECT_TRUE(selector.AddVirtualKeyboard( |
user_virtual_keyboard.url(), |
+ user_virtual_keyboard.name(), |
user_virtual_keyboard.supported_layouts(), |
user_virtual_keyboard.is_system())); |
ASSERT_TRUE(selector.SelectVirtualKeyboardWithoutPreferences("a")); |
@@ -181,17 +219,21 @@ TEST(VirtualKeyboardSelectorTest, TestTwoUserKeyboards) { |
static const char* layouts_2[] = { "a", "c", "d" }; |
VirtualKeyboard user_virtual_keyboard_1( |
- GURL("http://user1"), CreateLayoutSet(layouts_1), false /* is_system */); |
+ GURL("http://user1"), "", CreateLayoutSet(layouts_1), |
+ false /* is_system */); |
VirtualKeyboard user_virtual_keyboard_2( |
- GURL("http://user2"), CreateLayoutSet(layouts_2), false /* is_system */); |
+ GURL("http://user2"), "", CreateLayoutSet(layouts_2), |
+ false /* is_system */); |
TestableVirtualKeyboardSelector selector; |
EXPECT_TRUE(selector.AddVirtualKeyboard( |
user_virtual_keyboard_1.url(), |
+ user_virtual_keyboard_1.name(), |
user_virtual_keyboard_1.supported_layouts(), |
user_virtual_keyboard_1.is_system())); |
EXPECT_TRUE(selector.AddVirtualKeyboard( |
user_virtual_keyboard_2.url(), |
+ user_virtual_keyboard_2.name(), |
user_virtual_keyboard_2.supported_layouts(), |
user_virtual_keyboard_2.is_system())); |
@@ -241,29 +283,37 @@ TEST(VirtualKeyboardSelectorTest, TestUserSystemMixed) { |
static const char* layouts_2[] = { "a", "y", "z" }; |
VirtualKeyboard user_virtual_keyboard_1( |
- GURL("http://user1"), CreateLayoutSet(ulayouts_1), false /* is_system */); |
+ GURL("http://user1"), "", CreateLayoutSet(ulayouts_1), |
+ false /* is_system */); |
VirtualKeyboard user_virtual_keyboard_2( |
- GURL("http://user2"), CreateLayoutSet(ulayouts_2), false /* is_system */); |
+ GURL("http://user2"), "", CreateLayoutSet(ulayouts_2), |
+ false /* is_system */); |
VirtualKeyboard system_virtual_keyboard_1( |
- GURL("http://system1"), CreateLayoutSet(layouts_1), true /* is_system */); |
+ GURL("http://system1"), "", CreateLayoutSet(layouts_1), |
+ true /* is_system */); |
VirtualKeyboard system_virtual_keyboard_2( |
- GURL("http://system2"), CreateLayoutSet(layouts_2), true /* is_system */); |
+ GURL("http://system2"), "", CreateLayoutSet(layouts_2), |
+ true /* is_system */); |
TestableVirtualKeyboardSelector selector; |
EXPECT_TRUE(selector.AddVirtualKeyboard( |
user_virtual_keyboard_1.url(), |
+ user_virtual_keyboard_1.name(), |
user_virtual_keyboard_1.supported_layouts(), |
user_virtual_keyboard_1.is_system())); |
EXPECT_TRUE(selector.AddVirtualKeyboard( |
user_virtual_keyboard_2.url(), |
+ user_virtual_keyboard_2.name(), |
user_virtual_keyboard_2.supported_layouts(), |
user_virtual_keyboard_2.is_system())); |
EXPECT_TRUE(selector.AddVirtualKeyboard( |
system_virtual_keyboard_1.url(), |
+ system_virtual_keyboard_1.name(), |
system_virtual_keyboard_1.supported_layouts(), |
system_virtual_keyboard_1.is_system())); |
EXPECT_TRUE(selector.AddVirtualKeyboard( |
system_virtual_keyboard_2.url(), |
+ system_virtual_keyboard_2.name(), |
system_virtual_keyboard_2.supported_layouts(), |
system_virtual_keyboard_2.is_system())); |
@@ -334,7 +384,7 @@ TEST(VirtualKeyboardSelectorTest, TestUserSystemMixed) { |
TEST(VirtualKeyboardTest, TestUrl) { |
static const char* layouts[] = { "a", "b", "c" }; |
VirtualKeyboard system_virtual_keyboard( |
- GURL("http://system"), CreateLayoutSet(layouts), true); |
+ GURL("http://system"), "", CreateLayoutSet(layouts), true); |
EXPECT_EQ("http://system/index.html#a", |
system_virtual_keyboard.GetURLForLayout("a").spec()); |
@@ -354,11 +404,12 @@ TEST(VirtualKeyboardSelectorTest, TestSetUserPreference1) { |
static const char* layouts[] = { "a", "b", "c" }; |
VirtualKeyboard user_virtual_keyboard( |
- GURL("http://user"), CreateLayoutSet(layouts), false /* is_system */); |
+ GURL("http://user"), "", CreateLayoutSet(layouts), false /* is_system */); |
TestableVirtualKeyboardSelector selector; |
EXPECT_TRUE(selector.AddVirtualKeyboard( |
user_virtual_keyboard.url(), |
+ user_virtual_keyboard.name(), |
user_virtual_keyboard.supported_layouts(), |
user_virtual_keyboard.is_system())); |
@@ -379,11 +430,13 @@ TEST(VirtualKeyboardSelectorTest, TestSetUserPreference2) { |
static const char* layouts[] = { "a", "b", "c" }; |
VirtualKeyboard system_virtual_keyboard( |
- GURL("http://system"), CreateLayoutSet(layouts), true /* is_system */); |
+ GURL("http://system"), "", CreateLayoutSet(layouts), |
+ true /* is_system */); |
TestableVirtualKeyboardSelector selector; |
EXPECT_TRUE(selector.AddVirtualKeyboard( |
system_virtual_keyboard.url(), |
+ system_virtual_keyboard.name(), |
system_virtual_keyboard.supported_layouts(), |
system_virtual_keyboard.is_system())); |
@@ -404,17 +457,21 @@ TEST(VirtualKeyboardSelectorTest, TestRemoveUserPreference) { |
static const char* layouts[] = { "a", "b", "c" }; |
VirtualKeyboard user_virtual_keyboard_1( |
- GURL("http://user1"), CreateLayoutSet(layouts), false /* is_system */); |
+ GURL("http://user1"), "", CreateLayoutSet(layouts), |
+ false /* is_system */); |
VirtualKeyboard user_virtual_keyboard_2( |
- GURL("http://user2"), CreateLayoutSet(layouts), false /* is_system */); |
+ GURL("http://user2"), "", CreateLayoutSet(layouts), |
+ false /* is_system */); |
TestableVirtualKeyboardSelector selector; |
EXPECT_TRUE(selector.AddVirtualKeyboard( |
user_virtual_keyboard_1.url(), |
+ user_virtual_keyboard_1.name(), |
user_virtual_keyboard_1.supported_layouts(), |
user_virtual_keyboard_1.is_system())); |
EXPECT_TRUE(selector.AddVirtualKeyboard( |
user_virtual_keyboard_2.url(), |
+ user_virtual_keyboard_2.name(), |
user_virtual_keyboard_2.supported_layouts(), |
user_virtual_keyboard_2.is_system())); |
@@ -441,29 +498,37 @@ TEST(VirtualKeyboardSelectorTest, TestSetUserPreferenceUserSystemMixed) { |
static const char* layouts_2[] = { "a", "y", "z" }; |
VirtualKeyboard user_virtual_keyboard_1( |
- GURL("http://user1"), CreateLayoutSet(ulayouts_1), false /* is_system */); |
+ GURL("http://user1"), "", CreateLayoutSet(ulayouts_1), |
+ false /* is_system */); |
VirtualKeyboard user_virtual_keyboard_2( |
- GURL("http://user2"), CreateLayoutSet(ulayouts_2), false /* is_system */); |
+ GURL("http://user2"), "", CreateLayoutSet(ulayouts_2), |
+ false /* is_system */); |
VirtualKeyboard system_virtual_keyboard_1( |
- GURL("http://system1"), CreateLayoutSet(layouts_1), true /* is_system */); |
+ GURL("http://system1"), "", CreateLayoutSet(layouts_1), |
+ true /* is_system */); |
VirtualKeyboard system_virtual_keyboard_2( |
- GURL("http://system2"), CreateLayoutSet(layouts_2), true /* is_system */); |
+ GURL("http://system2"), "", CreateLayoutSet(layouts_2), |
+ true /* is_system */); |
TestableVirtualKeyboardSelector selector; |
EXPECT_TRUE(selector.AddVirtualKeyboard( |
user_virtual_keyboard_1.url(), |
+ user_virtual_keyboard_1.name(), |
user_virtual_keyboard_1.supported_layouts(), |
user_virtual_keyboard_1.is_system())); |
EXPECT_TRUE(selector.AddVirtualKeyboard( |
user_virtual_keyboard_2.url(), |
+ user_virtual_keyboard_2.name(), |
user_virtual_keyboard_2.supported_layouts(), |
user_virtual_keyboard_2.is_system())); |
EXPECT_TRUE(selector.AddVirtualKeyboard( |
system_virtual_keyboard_1.url(), |
+ system_virtual_keyboard_1.name(), |
system_virtual_keyboard_1.supported_layouts(), |
system_virtual_keyboard_1.is_system())); |
EXPECT_TRUE(selector.AddVirtualKeyboard( |
system_virtual_keyboard_2.url(), |
+ system_virtual_keyboard_2.name(), |
system_virtual_keyboard_2.supported_layouts(), |
system_virtual_keyboard_2.is_system())); |
@@ -542,5 +607,133 @@ TEST(VirtualKeyboardSelectorTest, TestSetUserPreferenceUserSystemMixed) { |
*selector.SelectVirtualKeyboard("c")); |
} |
+TEST(VirtualKeyboardSelectorTest, TestUrlToExtensionMapping) { |
+ static const char* ulayouts_1[] = { "a", "b", "c" }; |
+ static const char* ulayouts_2[] = { "a", "c", "d" }; |
+ static const char* slayouts_1[] = { "a", "x", "y" }; |
+ |
+ 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(slayouts_1), |
+ true /* is_system */); |
+ |
+ TestableVirtualKeyboardSelector selector; |
+ |
+ const std::map<GURL, const VirtualKeyboard*>& result1 = |
+ selector.url_to_keyboard(); |
+ EXPECT_TRUE(result1.empty()); |
+ |
+ EXPECT_TRUE(selector.AddVirtualKeyboard( |
+ user_virtual_keyboard_1.url(), |
+ user_virtual_keyboard_1.name(), |
+ user_virtual_keyboard_1.supported_layouts(), |
+ user_virtual_keyboard_1.is_system())); |
+ EXPECT_TRUE(selector.AddVirtualKeyboard( |
+ user_virtual_keyboard_2.url(), |
+ user_virtual_keyboard_2.name(), |
+ user_virtual_keyboard_2.supported_layouts(), |
+ user_virtual_keyboard_2.is_system())); |
+ EXPECT_TRUE(selector.AddVirtualKeyboard( |
+ system_virtual_keyboard_1.url(), |
+ system_virtual_keyboard_1.name(), |
+ system_virtual_keyboard_1.supported_layouts(), |
+ system_virtual_keyboard_1.is_system())); |
+ |
+ const std::map<GURL, const VirtualKeyboard*>& result2 = |
+ selector.url_to_keyboard(); |
+ EXPECT_EQ(3U, result2.size()); |
+ ASSERT_EQ(1U, result2.count(GURL("http://user1"))); |
+ EXPECT_TRUE(user_virtual_keyboard_1 == |
+ *result2.find(GURL("http://user1"))->second); |
+ ASSERT_EQ(1U, result2.count(GURL("http://user2"))); |
+ EXPECT_TRUE(user_virtual_keyboard_2 == |
+ *result2.find(GURL("http://user2"))->second); |
+ ASSERT_EQ(1U, result2.count(GURL("http://system1"))); |
+ EXPECT_TRUE(system_virtual_keyboard_1 == |
+ *result2.find(GURL("http://system1"))->second); |
+ EXPECT_EQ(0U, result2.count(GURL("http://system2"))); |
+} |
+ |
+TEST(VirtualKeyboardSelectorTest, TestLayoutToExtensionMapping) { |
+ static const char* ulayouts_1[] = { "a", "b", "c" }; |
+ static const char* ulayouts_2[] = { "a", "c", "d" }; |
+ static const char* slayouts_1[] = { "a", "x", "y" }; |
+ static const char* slayouts_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(slayouts_1), |
+ true /* is_system */); |
+ VirtualKeyboard system_virtual_keyboard_2( |
+ GURL("http://system2"), "", CreateLayoutSet(slayouts_2), |
+ true /* is_system */); |
+ |
+ TestableVirtualKeyboardSelector selector; |
+ |
+ const LayoutToKeyboard& result1 = selector.layout_to_keyboard(); |
+ EXPECT_TRUE(result1.empty()); |
+ |
+ EXPECT_TRUE(selector.AddVirtualKeyboard( |
+ user_virtual_keyboard_1.url(), |
+ user_virtual_keyboard_1.name(), |
+ user_virtual_keyboard_1.supported_layouts(), |
+ user_virtual_keyboard_1.is_system())); |
+ EXPECT_TRUE(selector.AddVirtualKeyboard( |
+ user_virtual_keyboard_2.url(), |
+ user_virtual_keyboard_2.name(), |
+ user_virtual_keyboard_2.supported_layouts(), |
+ user_virtual_keyboard_2.is_system())); |
+ EXPECT_TRUE(selector.AddVirtualKeyboard( |
+ system_virtual_keyboard_1.url(), |
+ system_virtual_keyboard_1.name(), |
+ system_virtual_keyboard_1.supported_layouts(), |
+ system_virtual_keyboard_1.is_system())); |
+ EXPECT_TRUE(selector.AddVirtualKeyboard( |
+ system_virtual_keyboard_2.url(), |
+ system_virtual_keyboard_2.name(), |
+ system_virtual_keyboard_2.supported_layouts(), |
+ system_virtual_keyboard_2.is_system())); |
+ |
+ const LayoutToKeyboard& result2 = selector.layout_to_keyboard(); |
+ EXPECT_EQ(arraysize(ulayouts_1) + |
+ arraysize(ulayouts_2) + |
+ arraysize(slayouts_1) + |
+ arraysize(slayouts_2), |
+ result2.size()); |
+ |
+ std::pair<LayoutToKeyboard::const_iterator, |
+ LayoutToKeyboard::const_iterator> range; |
+ EXPECT_EQ(4U, result2.count("a")); |
+ { |
+ static const char* urls[] = { "http://user1", "http://user2", |
+ "http://system1", "http://system2" }; |
+ range = result2.equal_range("a"); |
+ EXPECT_TRUE(CheckUrls(range.first, range.second, urls)); |
+ } |
+ EXPECT_EQ(2U, result2.count("c")); |
+ { |
+ static const char* urls[] = { "http://user1", "http://user2" }; |
+ range = result2.equal_range("c"); |
+ EXPECT_TRUE(CheckUrls(range.first, range.second, urls)); |
+ } |
+ EXPECT_EQ(1U, result2.count("z")); |
+ { |
+ static const char* urls[] = { "http://system2" }; |
+ range = result2.equal_range("z"); |
+ EXPECT_TRUE(CheckUrls(range.first, range.second, urls)); |
+ } |
+ EXPECT_EQ(0U, result2.count("Z")); |
+} |
+ |
} // namespace input_method |
} // namespace chromeos |