1c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved.
2c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
3c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// found in the LICENSE file.
4c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
5c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "base/logging.h"
6c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chromeos/ime/component_extension_ime_manager.h"
7c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chromeos/ime/extension_ime_util.h"
8c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chromeos/ime/mock_component_extension_ime_manager_delegate.h"
9c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h"
10c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
11c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)namespace chromeos {
12c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)namespace input_method {
13c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
14c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)namespace {
15c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
165f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)class ComponentExtensionIMEManagerTest : public testing::Test {
17c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) public:
185f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  ComponentExtensionIMEManagerTest() : mock_delegate_(NULL) {}
19c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
20c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  virtual void SetUp() {
21c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    ime_list_.clear();
22c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
23c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    ComponentExtensionIME ext1;
246e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    ext1.id = "ext1_id_xxxxxxxxxxxxxxxxxxxxxxxx";
25c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    ext1.description = "ext1_description";
26a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)    ext1.options_page_url =
27a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)        GURL("chrome-extension://" + ext1.id + "/options.html");
28c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    ext1.path = base::FilePath("ext1_file_path");
29c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
30c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    ComponentExtensionEngine ext1_engine1;
31e4256316f8b5e8d1ec0df1f7762771622a53fa63Ben Murdoch    ext1_engine1.engine_id = "zh-t-i0-pinyin";
32c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    ext1_engine1.display_name = "ext1_engine_1_display_name";
33e4256316f8b5e8d1ec0df1f7762771622a53fa63Ben Murdoch    ext1_engine1.language_codes.push_back("zh-CN");
34c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    ext1_engine1.layouts.push_back("us");
35c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    ext1.engines.push_back(ext1_engine1);
36c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
37c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    ComponentExtensionEngine ext1_engine2;
38e4256316f8b5e8d1ec0df1f7762771622a53fa63Ben Murdoch    ext1_engine2.engine_id = "mozc_us";
39c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    ext1_engine2.display_name = "ext1_engine2_display_name";
40e4256316f8b5e8d1ec0df1f7762771622a53fa63Ben Murdoch    ext1_engine2.language_codes.push_back("jp");
41c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    ext1_engine2.layouts.push_back("us");
42c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    ext1.engines.push_back(ext1_engine2);
43c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
44c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    ComponentExtensionEngine ext1_engine3;
45e4256316f8b5e8d1ec0df1f7762771622a53fa63Ben Murdoch    ext1_engine3.engine_id = "xkb:ru::rus";
46c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    ext1_engine3.display_name = "ext1_engine3_display_name";
47e4256316f8b5e8d1ec0df1f7762771622a53fa63Ben Murdoch    ext1_engine3.language_codes.push_back("ru");
48e4256316f8b5e8d1ec0df1f7762771622a53fa63Ben Murdoch    ext1_engine3.layouts.push_back("ru");
49c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    ext1.engines.push_back(ext1_engine3);
50c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
51c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    ime_list_.push_back(ext1);
52c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
53c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    ComponentExtensionIME ext2;
546e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    ext2.id = "ext2_id_xxxxxxxxxxxxxxxxxxxxxxxx";
55c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    ext2.description = "ext2_description";
56c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    ext2.path = base::FilePath("ext2_file_path");
57c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
58c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    ComponentExtensionEngine ext2_engine1;
59e4256316f8b5e8d1ec0df1f7762771622a53fa63Ben Murdoch    ext2_engine1.engine_id = "vkd_ru_phone_aatseel";
60c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    ext2_engine1.display_name = "ext2_engine_1_display_name";
61e4256316f8b5e8d1ec0df1f7762771622a53fa63Ben Murdoch    ext2_engine1.language_codes.push_back("ru");
62c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    ext2_engine1.layouts.push_back("us");
63c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    ext2.engines.push_back(ext2_engine1);
64c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
65c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    ComponentExtensionEngine ext2_engine2;
66e4256316f8b5e8d1ec0df1f7762771622a53fa63Ben Murdoch    ext2_engine2.engine_id = "vkd_vi_telex";
67c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    ext2_engine2.display_name = "ext2_engine2_display_name";
68a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch    ext2_engine2.language_codes.push_back("hi");
69c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    ext2_engine2.layouts.push_back("us");
70c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    ext2.engines.push_back(ext2_engine2);
71c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
72c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    ComponentExtensionEngine ext2_engine3;
73e4256316f8b5e8d1ec0df1f7762771622a53fa63Ben Murdoch    ext2_engine3.engine_id = "xkb:us::eng";
74c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    ext2_engine3.display_name = "ext2_engine3_display_name";
75e4256316f8b5e8d1ec0df1f7762771622a53fa63Ben Murdoch    ext2_engine3.language_codes.push_back("us");
76e4256316f8b5e8d1ec0df1f7762771622a53fa63Ben Murdoch    ext2_engine3.layouts.push_back("us");
77c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    ext2.engines.push_back(ext2_engine3);
78c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
79c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    ime_list_.push_back(ext2);
80c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
81c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    ComponentExtensionIME ext3;
826e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    ext3.id = "ext3_id_xxxxxxxxxxxxxxxxxxxxxxxx";
83c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    ext3.description = "ext3_description";
84a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch    ext3.options_page_url =
85a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch    GURL("chrome-extension://" + ext3.id + "/options.html");
86c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    ext3.path = base::FilePath("ext3_file_path");
87c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
88c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    ComponentExtensionEngine ext3_engine1;
89c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    ext3_engine1.engine_id = "ext3_engine1_engine_id";
90c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    ext3_engine1.display_name = "ext3_engine_1_display_name";
91a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch    ext3_engine1.language_codes.push_back("hi");
92c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    ext3_engine1.layouts.push_back("us");
93c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    ext3.engines.push_back(ext3_engine1);
94c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
95c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    ComponentExtensionEngine ext3_engine2;
96c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    ext3_engine2.engine_id = "ext3_engine2_engine_id";
97c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    ext3_engine2.display_name = "ext3_engine2_display_name";
98a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch    ext3_engine2.language_codes.push_back("en");
99c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    ext3_engine2.layouts.push_back("us");
100c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    ext3.engines.push_back(ext3_engine2);
101c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
102c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    ComponentExtensionEngine ext3_engine3;
103c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    ext3_engine3.engine_id = "ext3_engine3_engine_id";
104c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    ext3_engine3.display_name = "ext3_engine3_display_name";
105a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch    ext3_engine3.language_codes.push_back("en");
106c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    ext3_engine3.layouts.push_back("us");
107c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    ext3.engines.push_back(ext3_engine3);
108c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
109c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    ime_list_.push_back(ext3);
110c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
111c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    mock_delegate_ = new MockComponentExtIMEManagerDelegate();
112c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    mock_delegate_->set_ime_list(ime_list_);
113c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    component_ext_mgr_.reset(new ComponentExtensionIMEManager());
114c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    component_ext_mgr_->Initialize(
115c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        scoped_ptr<ComponentExtensionIMEManagerDelegate>(
116c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)            mock_delegate_).Pass());
117c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  }
118c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
119c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  virtual void TearDown() {
120c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  }
121c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
122c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) protected:
123c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  MockComponentExtIMEManagerDelegate* mock_delegate_;
124c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  scoped_ptr<ComponentExtensionIMEManager> component_ext_mgr_;
125c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  std::vector<ComponentExtensionIME> ime_list_;
126c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
127c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) private:
128c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
129c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(ComponentExtensionIMEManagerTest);
130c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)};
131c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
132c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)TEST_F(ComponentExtensionIMEManagerTest, LoadComponentExtensionIMETest) {
133c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  for (size_t i = 0; i < ime_list_.size(); ++i) {
134c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    for (size_t j = 0; j < ime_list_[i].engines.size(); ++j) {
135c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      const std::string input_method_id =
136f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)          extension_ime_util::GetComponentInputMethodID(
137c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)              ime_list_[i].id,
138c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)              ime_list_[i].engines[j].engine_id);
13903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)      component_ext_mgr_->LoadComponentExtensionIME(NULL /* profile */,
14003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)                                                    input_method_id);
141c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      EXPECT_EQ(ime_list_[i].id, mock_delegate_->last_loaded_extension_id());
142c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    }
143c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  }
144c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  EXPECT_EQ(9, mock_delegate_->load_call_count());
145c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}
146c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
147c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)TEST_F(ComponentExtensionIMEManagerTest, UnloadComponentExtensionIMETest) {
148c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  for (size_t i = 0; i < ime_list_.size(); ++i) {
149c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    for (size_t j = 0; j < ime_list_[i].engines.size(); ++j) {
150c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      const std::string input_method_id =
151f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)          extension_ime_util::GetComponentInputMethodID(
152c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)              ime_list_[i].id,
153c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)              ime_list_[i].engines[j].engine_id);
15403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)      component_ext_mgr_->UnloadComponentExtensionIME(NULL /* profile */,
15503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)                                                      input_method_id);
156c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      EXPECT_EQ(ime_list_[i].id, mock_delegate_->last_unloaded_extension_id());
157c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    }
158c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  }
159c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  EXPECT_EQ(9, mock_delegate_->unload_call_count());
160c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}
161c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
162c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)TEST_F(ComponentExtensionIMEManagerTest, IsWhitelistedTest) {
163c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  EXPECT_TRUE(component_ext_mgr_->IsWhitelisted(
164f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      extension_ime_util::GetComponentInputMethodID(
165c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)          ime_list_[0].id,
166c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)          ime_list_[0].engines[0].engine_id)));
167c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  EXPECT_FALSE(component_ext_mgr_->IsWhitelisted(
168c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      extension_ime_util::GetInputMethodID(
169c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)          ime_list_[0].id,
170c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)          ime_list_[0].engines[0].engine_id)));
171c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  EXPECT_FALSE(component_ext_mgr_->IsWhitelisted("mozc"));
172c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  EXPECT_FALSE(component_ext_mgr_->IsWhitelisted(
173c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      extension_ime_util::GetInputMethodID("AAAA", "012345")));
174c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  EXPECT_FALSE(component_ext_mgr_->IsWhitelisted(
175f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      extension_ime_util::GetComponentInputMethodID(
176c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)          "AAAA", "012345")));
177c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}
178c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
179c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)TEST_F(ComponentExtensionIMEManagerTest, IsWhitelistedExtensionTest) {
180c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  EXPECT_TRUE(component_ext_mgr_->IsWhitelistedExtension(ime_list_[0].id));
181c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  EXPECT_TRUE(component_ext_mgr_->IsWhitelistedExtension(ime_list_[1].id));
182c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  EXPECT_FALSE(component_ext_mgr_->IsWhitelistedExtension("dummy"));
183c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  EXPECT_FALSE(component_ext_mgr_->IsWhitelistedExtension(""));
184c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}
185c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
186c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)TEST_F(ComponentExtensionIMEManagerTest, GetAllIMEAsInputMethodDescriptor) {
187c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  input_method::InputMethodDescriptors descriptors =
188c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      component_ext_mgr_->GetAllIMEAsInputMethodDescriptor();
189c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  size_t total_ime_size = 0;
190c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  for (size_t i = 0; i < ime_list_.size(); ++i) {
191c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    total_ime_size += ime_list_[i].engines.size();
192c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  }
193c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  EXPECT_EQ(total_ime_size, descriptors.size());
194e4256316f8b5e8d1ec0df1f7762771622a53fa63Ben Murdoch
195e4256316f8b5e8d1ec0df1f7762771622a53fa63Ben Murdoch  // Verify order
196e4256316f8b5e8d1ec0df1f7762771622a53fa63Ben Murdoch  for (size_t i = 0; i < descriptors.size(); ++i) {
197e4256316f8b5e8d1ec0df1f7762771622a53fa63Ben Murdoch    const input_method::InputMethodDescriptor& d = descriptors[i];
198e4256316f8b5e8d1ec0df1f7762771622a53fa63Ben Murdoch    if (i < 2) {
199e4256316f8b5e8d1ec0df1f7762771622a53fa63Ben Murdoch      EXPECT_TRUE(d.id().find("xkb:") != std::string::npos);
200e4256316f8b5e8d1ec0df1f7762771622a53fa63Ben Murdoch    } else if (i >= 2 && i < 4) {
201e4256316f8b5e8d1ec0df1f7762771622a53fa63Ben Murdoch      EXPECT_TRUE(d.id().find("vkd_") != std::string::npos);
202e4256316f8b5e8d1ec0df1f7762771622a53fa63Ben Murdoch    }
203e4256316f8b5e8d1ec0df1f7762771622a53fa63Ben Murdoch  }
204c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}
205c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
206c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}  // namespace
207c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
208c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}  // namespace input_method
209c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}  // namespace chromeos
210