component_extension_ime_manager_unittest.cc revision a93a17c8d99d686bd4a1511e5504e5e6cc9fcadf
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)
16c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)class TestableComponentExtensionIMEManager
17c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    : public ComponentExtensionIMEManager {
18c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) public:
19c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  using ComponentExtensionIMEManager::GetComponentExtensionIMEId;
20c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)};
21c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
22c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)class ComponentExtensionIMEManagerTest :
23c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    public testing::Test,
24c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    public ComponentExtensionIMEManager::Observer {
25c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) public:
26c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  ComponentExtensionIMEManagerTest()
27c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      : mock_delegate_(NULL),
28c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        on_initialized_callcount_(0) {
29c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  }
30c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
31c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  virtual void SetUp() {
32c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    ime_list_.clear();
33c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
34c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    ComponentExtensionIME ext1;
35c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    ext1.id = "ext1_id";
36c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    ext1.description = "ext1_description";
37a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)    ext1.options_page_url =
38a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)        GURL("chrome-extension://" + ext1.id + "/options.html");
39c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    ext1.path = base::FilePath("ext1_file_path");
40c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
41c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    ComponentExtensionEngine ext1_engine1;
42c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    ext1_engine1.engine_id = "ext1_engine1_engine_id";
43c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    ext1_engine1.display_name = "ext1_engine_1_display_name";
44c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    ext1_engine1.language_code = "en";
45c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    ext1_engine1.layouts.push_back("us");
46c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    ext1.engines.push_back(ext1_engine1);
47c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
48c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    ComponentExtensionEngine ext1_engine2;
49c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    ext1_engine2.engine_id = "ext1_engine2_engine_id";
50c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    ext1_engine2.display_name = "ext1_engine2_display_name";
51c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    ext1_engine2.language_code = "en";
52c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    ext1_engine2.layouts.push_back("us");
53c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    ext1.engines.push_back(ext1_engine2);
54c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
55c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    ComponentExtensionEngine ext1_engine3;
56c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    ext1_engine3.engine_id = "ext1_engine3_engine_id";
57c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    ext1_engine3.display_name = "ext1_engine3_display_name";
58c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    ext1_engine3.language_code = "ja";
59c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    ext1_engine3.layouts.push_back("us");
60c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    ext1.engines.push_back(ext1_engine3);
61c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
62c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    ime_list_.push_back(ext1);
63c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
64c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    ComponentExtensionIME ext2;
65c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    ext2.id = "ext2_id";
66c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    ext2.description = "ext2_description";
67c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    ext2.path = base::FilePath("ext2_file_path");
68c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
69c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    ComponentExtensionEngine ext2_engine1;
70c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    ext2_engine1.engine_id = "ext2_engine1_engine_id";
71c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    ext2_engine1.display_name = "ext2_engine_1_display_name";
72c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    ext2_engine1.language_code = "en";
73c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    ext2_engine1.layouts.push_back("us");
74c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    ext2.engines.push_back(ext2_engine1);
75c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
76c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    ComponentExtensionEngine ext2_engine2;
77c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    ext2_engine2.engine_id = "ext2_engine2_engine_id";
78c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    ext2_engine2.display_name = "ext2_engine2_display_name";
79c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    ext2_engine2.language_code = "hi";
80c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    ext2_engine2.layouts.push_back("us");
81c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    ext2.engines.push_back(ext2_engine2);
82c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
83c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    ComponentExtensionEngine ext2_engine3;
84c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    ext2_engine3.engine_id = "ext2_engine3_engine_id";
85c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    ext2_engine3.display_name = "ext2_engine3_display_name";
86c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    ext2_engine3.language_code = "ja";
87c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    ext2_engine3.layouts.push_back("jp");
88c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    ext2.engines.push_back(ext2_engine3);
89c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
90c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    ime_list_.push_back(ext2);
91c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
92c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    ComponentExtensionIME ext3;
93c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    ext3.id = "ext3_id";
94c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    ext3.description = "ext3_description";
95a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)    ext1.options_page_url =
96a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)        GURL("chrome-extension://" + ext3.id + "/options.html");
97c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    ext3.path = base::FilePath("ext3_file_path");
98c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
99c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    ComponentExtensionEngine ext3_engine1;
100c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    ext3_engine1.engine_id = "ext3_engine1_engine_id";
101c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    ext3_engine1.display_name = "ext3_engine_1_display_name";
102c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    ext3_engine1.language_code = "hi";
103c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    ext3_engine1.layouts.push_back("us");
104c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    ext3.engines.push_back(ext3_engine1);
105c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
106c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    ComponentExtensionEngine ext3_engine2;
107c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    ext3_engine2.engine_id = "ext3_engine2_engine_id";
108c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    ext3_engine2.display_name = "ext3_engine2_display_name";
109c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    ext3_engine2.language_code = "en";
110c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    ext3_engine2.layouts.push_back("us");
111c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    ext3.engines.push_back(ext3_engine2);
112c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
113c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    ComponentExtensionEngine ext3_engine3;
114c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    ext3_engine3.engine_id = "ext3_engine3_engine_id";
115c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    ext3_engine3.display_name = "ext3_engine3_display_name";
116c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    ext3_engine3.language_code = "en";
117c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    ext3_engine3.layouts.push_back("us");
118c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    ext3.engines.push_back(ext3_engine3);
119c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
120c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    ime_list_.push_back(ext3);
121c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
122c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    mock_delegate_ = new MockComponentExtIMEManagerDelegate();
123c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    mock_delegate_->set_ime_list(ime_list_);
124c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    component_ext_mgr_.reset(new ComponentExtensionIMEManager());
125c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    component_ext_mgr_->AddObserver(this);
126c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    EXPECT_FALSE(component_ext_mgr_->IsInitialized());
127c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    component_ext_mgr_->Initialize(
128c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        scoped_ptr<ComponentExtensionIMEManagerDelegate>(
129c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)            mock_delegate_).Pass());
130c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    EXPECT_TRUE(component_ext_mgr_->IsInitialized());
131c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
132c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  }
133c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
134c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  virtual void TearDown() {
135c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    EXPECT_EQ(1, on_initialized_callcount_);
136c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    component_ext_mgr_->RemoveObserver(this);
137c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  }
138c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
139c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) protected:
140c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  MockComponentExtIMEManagerDelegate* mock_delegate_;
141c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  scoped_ptr<ComponentExtensionIMEManager> component_ext_mgr_;
142c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  std::vector<ComponentExtensionIME> ime_list_;
143c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
144c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) private:
145c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  virtual void OnInitialized() OVERRIDE {
146c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    ++on_initialized_callcount_;
147c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  }
148c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
149c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  int on_initialized_callcount_;
150c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
151c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(ComponentExtensionIMEManagerTest);
152c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)};
153c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
154c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)TEST_F(ComponentExtensionIMEManagerTest, LoadComponentExtensionIMETest) {
155c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  for (size_t i = 0; i < ime_list_.size(); ++i) {
156c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    for (size_t j = 0; j < ime_list_[i].engines.size(); ++j) {
157c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      const std::string input_method_id =
158c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)          TestableComponentExtensionIMEManager::GetComponentExtensionIMEId(
159c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)              ime_list_[i].id,
160c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)              ime_list_[i].engines[j].engine_id);
161c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      component_ext_mgr_->LoadComponentExtensionIME(input_method_id);
162c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      EXPECT_EQ(ime_list_[i].id, mock_delegate_->last_loaded_extension_id());
163c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    }
164c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  }
165c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  EXPECT_EQ(9, mock_delegate_->load_call_count());
166c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}
167c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
168c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)TEST_F(ComponentExtensionIMEManagerTest, UnloadComponentExtensionIMETest) {
169c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  for (size_t i = 0; i < ime_list_.size(); ++i) {
170c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    for (size_t j = 0; j < ime_list_[i].engines.size(); ++j) {
171c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      const std::string input_method_id =
172c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)          TestableComponentExtensionIMEManager::GetComponentExtensionIMEId(
173c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)              ime_list_[i].id,
174c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)              ime_list_[i].engines[j].engine_id);
175c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      component_ext_mgr_->UnloadComponentExtensionIME(input_method_id);
176c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      EXPECT_EQ(ime_list_[i].id, mock_delegate_->last_unloaded_extension_id());
177c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    }
178c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  }
179c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  EXPECT_EQ(9, mock_delegate_->unload_call_count());
180c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}
181c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
182c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)TEST_F(ComponentExtensionIMEManagerTest, IsWhitelistedTest) {
183c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  EXPECT_TRUE(component_ext_mgr_->IsWhitelisted(
184c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      TestableComponentExtensionIMEManager::GetComponentExtensionIMEId(
185c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)          ime_list_[0].id,
186c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)          ime_list_[0].engines[0].engine_id)));
187c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  EXPECT_FALSE(component_ext_mgr_->IsWhitelisted(
188c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      extension_ime_util::GetInputMethodID(
189c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)          ime_list_[0].id,
190c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)          ime_list_[0].engines[0].engine_id)));
191c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  EXPECT_FALSE(component_ext_mgr_->IsWhitelisted("mozc"));
192c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  EXPECT_FALSE(component_ext_mgr_->IsWhitelisted(
193c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      extension_ime_util::GetInputMethodID("AAAA", "012345")));
194c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  EXPECT_FALSE(component_ext_mgr_->IsWhitelisted(
195c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      TestableComponentExtensionIMEManager::GetComponentExtensionIMEId(
196c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)          "AAAA", "012345")));
197c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}
198c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
199c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)TEST_F(ComponentExtensionIMEManagerTest, IsWhitelistedExtensionTest) {
200c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  EXPECT_TRUE(component_ext_mgr_->IsWhitelistedExtension(ime_list_[0].id));
201c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  EXPECT_TRUE(component_ext_mgr_->IsWhitelistedExtension(ime_list_[1].id));
202c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  EXPECT_FALSE(component_ext_mgr_->IsWhitelistedExtension("dummy"));
203c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  EXPECT_FALSE(component_ext_mgr_->IsWhitelistedExtension(""));
204c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}
205c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
206c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)TEST_F(ComponentExtensionIMEManagerTest, GetNameDescriptionTest) {
207c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  for (size_t i = 0; i < ime_list_.size(); ++i) {
208c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    for (size_t j = 0; j < ime_list_[i].engines.size(); ++j) {
209c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      const ComponentExtensionEngine& engine
210c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)          = ime_list_[i].engines[j];
211c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
212c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      const std::string input_method_id =
213c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)          TestableComponentExtensionIMEManager::GetComponentExtensionIMEId(
214c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)              ime_list_[i].id,
215c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)              engine.engine_id);
216c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
217c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      EXPECT_EQ(input_method_id,
218c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                component_ext_mgr_->GetId(ime_list_[i].id, engine.engine_id));
219c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      EXPECT_EQ(engine.display_name,
220c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                component_ext_mgr_->GetName(input_method_id));
221c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      EXPECT_EQ(engine.description,
222c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                component_ext_mgr_->GetDescription(input_method_id));
223c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    }
224c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  }
225c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}
226c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
227c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)TEST_F(ComponentExtensionIMEManagerTest, ListIMEByLanguageTest) {
228c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  const std::string hindi_layout1 =
229c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      TestableComponentExtensionIMEManager::GetComponentExtensionIMEId(
230c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)          ime_list_[1].id, ime_list_[1].engines[1].engine_id);
231c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  const std::string hindi_layout2 =
232c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      TestableComponentExtensionIMEManager::GetComponentExtensionIMEId(
233c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)          ime_list_[2].id, ime_list_[2].engines[0].engine_id);
234c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
235c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  std::vector<std::string> hindi_list
236c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      = component_ext_mgr_->ListIMEByLanguage("hi");
237c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  ASSERT_EQ(2UL, hindi_list.size());
238c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  EXPECT_TRUE(hindi_list[0] == hindi_layout1 || hindi_list[0] == hindi_layout2);
239c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  EXPECT_TRUE(hindi_list[1] == hindi_layout1 || hindi_list[1] == hindi_layout2);
240c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
241c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  EXPECT_EQ(0UL, component_ext_mgr_->ListIMEByLanguage("ru").size());
242c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  EXPECT_EQ(0UL, component_ext_mgr_->ListIMEByLanguage("").size());
243c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  EXPECT_EQ(0UL, component_ext_mgr_->ListIMEByLanguage("invalid").size());
244c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  EXPECT_EQ(5UL, component_ext_mgr_->ListIMEByLanguage("en").size());
245c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  EXPECT_EQ(2UL, component_ext_mgr_->ListIMEByLanguage("ja").size());
246c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}
247c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
248c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)TEST_F(ComponentExtensionIMEManagerTest, GetAllIMEAsInputMethodDescriptor) {
249c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  input_method::InputMethodDescriptors descriptors =
250c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      component_ext_mgr_->GetAllIMEAsInputMethodDescriptor();
251c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  size_t total_ime_size = 0;
252c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  for (size_t i = 0; i < ime_list_.size(); ++i) {
253c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    total_ime_size += ime_list_[i].engines.size();
254c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  }
255c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  EXPECT_EQ(total_ime_size, descriptors.size());
256c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}
257c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
258c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}  // namespace
259c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
260c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}  // namespace input_method
261c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}  // namespace chromeos
262