OLD | NEW |
| (Empty) |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | |
2 // Use of this source code is governed by a BSD-style license that can be | |
3 // found in the LICENSE file. | |
4 | |
5 #include "base/utf_string_conversions.h" | |
6 #include "chrome/browser/ui/intents/web_intent_picker_model.h" | |
7 #include "chrome/browser/ui/intents/web_intent_picker_model_observer.h" | |
8 #include "testing/gmock/include/gmock/gmock.h" | |
9 #include "testing/gtest/include/gtest/gtest.h" | |
10 #include "ui/gfx/image/image.h" | |
11 #include "ui/gfx/image/image_unittest_util.h" | |
12 | |
13 namespace { | |
14 | |
15 const string16 kTitle1(ASCIIToUTF16("Foo")); | |
16 const string16 kTitle2(ASCIIToUTF16("Bar")); | |
17 const string16 kTitle3(ASCIIToUTF16("Baz")); | |
18 const string16 kTitle4(ASCIIToUTF16("Biff")); | |
19 const string16 kTitle5(ASCIIToUTF16("Max")); | |
20 const string16 kTitle6(ASCIIToUTF16("Lulz")); | |
21 const GURL kUrl1("http://www.example.com/foo"); | |
22 const GURL kUrl2("http://www.example.com/bar"); | |
23 const GURL kUrl3("http://www.example.com/baz"); | |
24 const std::string kId1("nhkckhebbbncbkefhcpcgepcgfaclehe"); | |
25 const std::string kId2("hcpcgepcgfaclehenhkckhebbbncbkef"); | |
26 const std::string kId3("aclehenhkckhebbbncbkefhcpcgepcgf"); | |
27 const std::string kId4("bclehenhkckhebbbncbkefhcpcgepcgf"); | |
28 const std::string kId5("cclehenhkckhebbbncbkefhcpcgepcgf"); | |
29 const std::string kId6("dclehenhkckhebbbncbkefhcpcgepcgf"); | |
30 const webkit_glue::WebIntentServiceData::Disposition kWindowDisposition( | |
31 webkit_glue::WebIntentServiceData::DISPOSITION_WINDOW); | |
32 const webkit_glue::WebIntentServiceData::Disposition kInlineDisposition( | |
33 webkit_glue::WebIntentServiceData::DISPOSITION_INLINE); | |
34 | |
35 } | |
36 | |
37 class WebIntentPickerModelObserverMock : public WebIntentPickerModelObserver { | |
38 public: | |
39 MOCK_METHOD1(OnModelChanged, void(WebIntentPickerModel* model)); | |
40 MOCK_METHOD2(OnFaviconChanged, | |
41 void(WebIntentPickerModel* model, size_t index)); | |
42 MOCK_METHOD2(OnExtensionIconChanged, | |
43 void(WebIntentPickerModel* model, | |
44 const std::string& extension_id)); | |
45 MOCK_METHOD2(OnInlineDisposition, | |
46 void(const string16& title, const GURL& url)); | |
47 }; | |
48 | |
49 class WebIntentPickerModelTest : public testing::Test { | |
50 public: | |
51 typedef WebIntentPickerModel::SuggestedExtension SuggestedExtension; | |
52 WebIntentPickerModelTest() {} | |
53 | |
54 virtual void SetUp() { | |
55 testing::Test::SetUp(); | |
56 model_.set_observer(&observer_); | |
57 } | |
58 | |
59 WebIntentPickerModel model_; | |
60 WebIntentPickerModelObserverMock observer_; | |
61 }; | |
62 | |
63 TEST_F(WebIntentPickerModelTest, AddInstalledService) { | |
64 EXPECT_CALL(observer_, OnModelChanged(&model_)).Times(2); | |
65 | |
66 EXPECT_EQ(0U, model_.GetInstalledServiceCount()); | |
67 | |
68 model_.AddInstalledService(kTitle1, kUrl1, kWindowDisposition); | |
69 model_.AddInstalledService(kTitle2, kUrl2, kWindowDisposition); | |
70 | |
71 EXPECT_EQ(2U, model_.GetInstalledServiceCount()); | |
72 EXPECT_EQ(kUrl1, model_.GetInstalledServiceAt(0).url); | |
73 EXPECT_EQ(kUrl2, model_.GetInstalledServiceAt(1).url); | |
74 } | |
75 | |
76 // Test that AddInstalledServices() is idempotent. | |
77 TEST_F(WebIntentPickerModelTest, AddInstalledServiceIsIdempotent) { | |
78 EXPECT_CALL(observer_, OnModelChanged(&model_)).Times(2); | |
79 | |
80 EXPECT_EQ(0U, model_.GetInstalledServiceCount()); | |
81 | |
82 model_.AddInstalledService(kTitle1, kUrl1, kWindowDisposition); | |
83 model_.AddInstalledService(kTitle2, kUrl2, kWindowDisposition); | |
84 | |
85 EXPECT_EQ(2U, model_.GetInstalledServiceCount()); | |
86 EXPECT_EQ(kUrl1, model_.GetInstalledServiceAt(0).url); | |
87 EXPECT_EQ(kUrl2, model_.GetInstalledServiceAt(1).url); | |
88 | |
89 model_.AddInstalledService(kTitle2, kUrl2, kWindowDisposition); | |
90 model_.AddInstalledService(kTitle1, kUrl1, kWindowDisposition); | |
91 | |
92 EXPECT_EQ(2U, model_.GetInstalledServiceCount()); | |
93 EXPECT_EQ(kUrl1, model_.GetInstalledServiceAt(0).url); | |
94 EXPECT_EQ(kUrl2, model_.GetInstalledServiceAt(1).url); | |
95 } | |
96 | |
97 | |
98 TEST_F(WebIntentPickerModelTest, RemoveInstalledServiceAt) { | |
99 EXPECT_CALL(observer_, OnModelChanged(&model_)).Times(4); | |
100 | |
101 model_.AddInstalledService(kTitle1, kUrl1, kWindowDisposition); | |
102 model_.AddInstalledService(kTitle2, kUrl2, kWindowDisposition); | |
103 model_.AddInstalledService(kTitle3, kUrl3, kWindowDisposition); | |
104 | |
105 EXPECT_EQ(3U, model_.GetInstalledServiceCount()); | |
106 | |
107 model_.RemoveInstalledServiceAt(1); | |
108 | |
109 EXPECT_EQ(2U, model_.GetInstalledServiceCount()); | |
110 EXPECT_EQ(kUrl1, model_.GetInstalledServiceAt(0).url); | |
111 EXPECT_EQ(kUrl3, model_.GetInstalledServiceAt(1).url); | |
112 } | |
113 | |
114 TEST_F(WebIntentPickerModelTest, Clear) { | |
115 EXPECT_CALL(observer_, OnModelChanged(&model_)).Times(testing::AtLeast(3)); | |
116 | |
117 model_.AddInstalledService(kTitle1, kUrl1, kWindowDisposition); | |
118 model_.AddInstalledService(kTitle2, kUrl2, kWindowDisposition); | |
119 | |
120 EXPECT_EQ(2U, model_.GetInstalledServiceCount()); | |
121 | |
122 model_.Clear(); | |
123 | |
124 EXPECT_EQ(0U, model_.GetInstalledServiceCount()); | |
125 } | |
126 | |
127 TEST_F(WebIntentPickerModelTest, GetInstalledServiceWithURL) { | |
128 EXPECT_CALL(observer_, OnModelChanged(&model_)).Times(2); | |
129 | |
130 model_.AddInstalledService(kTitle1, kUrl1, kWindowDisposition); | |
131 model_.AddInstalledService(kTitle2, kUrl2, kWindowDisposition); | |
132 | |
133 EXPECT_EQ(kTitle2, model_.GetInstalledServiceWithURL(kUrl2)->title); | |
134 EXPECT_EQ(NULL, model_.GetInstalledServiceWithURL(kUrl3)); | |
135 } | |
136 | |
137 TEST_F(WebIntentPickerModelTest, UpdateFaviconForServiceWithURL) { | |
138 EXPECT_CALL(observer_, OnModelChanged(&model_)).Times(2); | |
139 EXPECT_CALL(observer_, OnFaviconChanged(&model_, 1U)).Times(1); | |
140 | |
141 model_.AddInstalledService(kTitle1, kUrl1, kWindowDisposition); | |
142 model_.AddInstalledService(kTitle2, kUrl2, kWindowDisposition); | |
143 gfx::Image image(gfx::test::CreateImage()); | |
144 model_.UpdateFaviconForServiceWithURL(kUrl2, image); | |
145 | |
146 EXPECT_FALSE(gfx::test::IsEqual( | |
147 image, model_.GetInstalledServiceAt(0).favicon)); | |
148 EXPECT_TRUE(gfx::test::IsEqual( | |
149 image, model_.GetInstalledServiceAt(1).favicon)); | |
150 } | |
151 | |
152 TEST_F(WebIntentPickerModelTest, AddSuggestedExtensions) { | |
153 EXPECT_CALL(observer_, OnModelChanged(&model_)).Times(1); | |
154 | |
155 EXPECT_EQ(0U, model_.GetSuggestedExtensionCount()); | |
156 | |
157 std::vector<WebIntentPickerModel::SuggestedExtension> suggestions; | |
158 suggestions.push_back( | |
159 WebIntentPickerModel::SuggestedExtension(kTitle1, kId1, 3.0)); | |
160 suggestions.push_back( | |
161 WebIntentPickerModel::SuggestedExtension(kTitle2, kId2, 4.0)); | |
162 model_.AddSuggestedExtensions(suggestions); | |
163 | |
164 EXPECT_EQ(2U, model_.GetSuggestedExtensionCount()); | |
165 EXPECT_EQ(kId1, model_.GetSuggestedExtensionAt(0).id); | |
166 EXPECT_EQ(kId2, model_.GetSuggestedExtensionAt(1).id); | |
167 | |
168 EXPECT_EQ(string16(), model_.GetSuggestionsLinkText()); | |
169 } | |
170 | |
171 TEST_F(WebIntentPickerModelTest, MaxSuggestedExtensions) { | |
172 EXPECT_CALL(observer_, OnModelChanged(&model_)).Times(1); | |
173 | |
174 std::vector<SuggestedExtension> suggestions; | |
175 suggestions.push_back(SuggestedExtension(kTitle1, kId1, 3.0)); | |
176 suggestions.push_back(SuggestedExtension(kTitle2, kId2, 4.3)); | |
177 suggestions.push_back(SuggestedExtension(kTitle3, kId3, 4.4)); | |
178 suggestions.push_back(SuggestedExtension(kTitle4, kId4, 4.5)); | |
179 suggestions.push_back(SuggestedExtension(kTitle5, kId5, 4.6)); | |
180 suggestions.push_back(SuggestedExtension(kTitle6, kId6, 4.7)); | |
181 model_.AddSuggestedExtensions(suggestions); | |
182 | |
183 // Max to show currently set to 5. | |
184 EXPECT_EQ(5U, model_.GetSuggestedExtensionCount()); | |
185 EXPECT_NE(string16(), model_.GetSuggestionsLinkText()); | |
186 } | |
187 | |
188 TEST_F(WebIntentPickerModelTest, SetSuggestedExtensionIconWithId) { | |
189 EXPECT_CALL(observer_, OnModelChanged(&model_)).Times(1); | |
190 EXPECT_CALL(observer_, OnExtensionIconChanged(&model_, kId2)).Times(1); | |
191 | |
192 std::vector<SuggestedExtension> suggestions; | |
193 suggestions.push_back(SuggestedExtension(kTitle1, kId1, 3.0)); | |
194 suggestions.push_back(SuggestedExtension(kTitle2, kId2, 4.3)); | |
195 model_.AddSuggestedExtensions(suggestions); | |
196 | |
197 gfx::Image image(gfx::test::CreateImage()); | |
198 model_.SetSuggestedExtensionIconWithId(kId2, image); | |
199 | |
200 EXPECT_FALSE(gfx::test::IsEqual( | |
201 image, model_.GetSuggestedExtensionAt(0).icon)); | |
202 EXPECT_TRUE(gfx::test::IsEqual( | |
203 image, model_.GetSuggestedExtensionAt(1).icon)); | |
204 } | |
205 | |
206 TEST_F(WebIntentPickerModelTest, SetInlineDisposition) { | |
207 EXPECT_CALL(observer_, OnModelChanged(&model_)).Times(testing::AtLeast(3)); | |
208 EXPECT_CALL(observer_, OnInlineDisposition(kTitle2, testing::_)).Times(1); | |
209 | |
210 EXPECT_FALSE(model_.IsInlineDisposition()); | |
211 EXPECT_EQ(GURL::EmptyGURL(), model_.inline_disposition_url()); | |
212 | |
213 model_.AddInstalledService(kTitle1, kUrl1, kWindowDisposition); | |
214 model_.AddInstalledService(kTitle2, kUrl2, kInlineDisposition); | |
215 model_.SetInlineDisposition(kUrl2); | |
216 | |
217 EXPECT_TRUE(model_.IsInlineDisposition()); | |
218 EXPECT_EQ(kUrl2, model_.inline_disposition_url()); | |
219 | |
220 model_.Clear(); | |
221 EXPECT_FALSE(model_.IsInlineDisposition()); | |
222 EXPECT_EQ(GURL::EmptyGURL(), model_.inline_disposition_url()); | |
223 } | |
224 | |
225 | |
226 TEST_F(WebIntentPickerModelTest, WaitingForSuggestions) { | |
227 // Default status is that "waiting for suggestions". | |
228 EXPECT_TRUE(model_.IsWaitingForSuggestions()); | |
229 | |
230 // "waiting" status can be toggled manually. | |
231 EXPECT_CALL(observer_, OnModelChanged(&model_)).Times(2); | |
232 model_.SetWaitingForSuggestions(false); | |
233 EXPECT_FALSE(model_.IsWaitingForSuggestions()); | |
234 model_.SetWaitingForSuggestions(true); | |
235 EXPECT_TRUE(model_.IsWaitingForSuggestions()); | |
236 } | |
OLD | NEW |