Merge Chromium + Blink git repositories
[chromium-blink-merge.git] / chrome / browser / extensions / api / omnibox / omnibox_unittest.cc
blobdb224035f83737599fa5f668ddd855df726014a7
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.
5 #include "base/values.h"
6 #include "chrome/browser/extensions/api/omnibox/omnibox_api.h"
7 #include "chrome/common/extensions/api/omnibox.h"
8 #include "extensions/common/value_builder.h"
9 #include "testing/gtest/include/gtest/gtest.h"
10 #include "testing/platform_test.h"
12 namespace extensions {
14 namespace omnibox = api::omnibox;
15 namespace SendSuggestions = omnibox::SendSuggestions;
16 namespace SetDefaultSuggestion = omnibox::SetDefaultSuggestion;
18 namespace {
20 const int kNone = ACMatchClassification::NONE;
21 const int kUrl = ACMatchClassification::URL;
22 const int kMatch = ACMatchClassification::MATCH;
23 const int kDim = ACMatchClassification::DIM;
25 void CompareClassification(const ACMatchClassifications& expected,
26 const ACMatchClassifications& actual) {
27 EXPECT_EQ(expected.size(), actual.size());
28 for (size_t i = 0; i < expected.size() && i < actual.size(); ++i) {
29 EXPECT_EQ(expected[i].offset, actual[i].offset) << "Index:" << i;
30 EXPECT_EQ(expected[i].style, actual[i].style) << "Index:" << i;
34 } // namespace
36 // Test output key: n = character with no styling, d = dim, m = match, u = url
37 // u = 1, m = 2, d = 4. u+d = 5, etc.
39 // 0123456789
40 // mmmm
41 // + ddd
42 // = nmmmmndddn
43 TEST(ExtensionOmniboxTest, DescriptionStylesSimple) {
44 scoped_ptr<base::ListValue> list = ListBuilder()
45 .Append(42)
46 .Append(ListBuilder()
47 .Append(DictionaryBuilder()
48 .Set("content", "content")
49 .Set("description", "description")
50 .Set("descriptionStyles", ListBuilder()
51 .Append(DictionaryBuilder()
52 .Set("type", "match")
53 .Set("offset", 1)
54 .Set("length", 4))
55 .Append(DictionaryBuilder()
56 .Set("type", "dim")
57 .Set("offset", 6)
58 .Set("length", 3))))).Build();
60 ACMatchClassifications styles_expected;
61 styles_expected.push_back(ACMatchClassification(0, kNone));
62 styles_expected.push_back(ACMatchClassification(1, kMatch));
63 styles_expected.push_back(ACMatchClassification(5, kNone));
64 styles_expected.push_back(ACMatchClassification(6, kDim));
65 styles_expected.push_back(ACMatchClassification(9, kNone));
67 scoped_ptr<SendSuggestions::Params> params(
68 SendSuggestions::Params::Create(*list));
69 EXPECT_TRUE(params);
70 EXPECT_TRUE(params->suggest_results[0].get());
71 CompareClassification(styles_expected, StyleTypesToACMatchClassifications(
72 *params->suggest_results[0]));
74 // Same input, but swap the order. Ensure it still works.
75 scoped_ptr<base::ListValue> swap_list = ListBuilder()
76 .Append(42)
77 .Append(ListBuilder()
78 .Append(DictionaryBuilder()
79 .Set("content", "content")
80 .Set("description", "description")
81 .Set("descriptionStyles", ListBuilder()
82 .Append(DictionaryBuilder()
83 .Set("type", "dim")
84 .Set("offset", 6)
85 .Set("length", 3))
86 .Append(DictionaryBuilder()
87 .Set("type", "match")
88 .Set("offset", 1)
89 .Set("length", 4))))).Build();
91 scoped_ptr<SendSuggestions::Params> swapped_params(
92 SendSuggestions::Params::Create(*swap_list));
93 EXPECT_TRUE(swapped_params);
94 EXPECT_TRUE(swapped_params->suggest_results[0].get());
95 CompareClassification(styles_expected, StyleTypesToACMatchClassifications(
96 *swapped_params->suggest_results[0]));
99 // 0123456789
100 // uuuuu
101 // + dd
102 // + mm
103 // + mmmm
104 // + dd
105 // = 3773unnnn66
106 TEST(ExtensionOmniboxTest, DescriptionStylesCombine) {
107 scoped_ptr<base::ListValue> list = ListBuilder()
108 .Append(42)
109 .Append(ListBuilder()
110 .Append(DictionaryBuilder()
111 .Set("content", "content")
112 .Set("description", "description")
113 .Set("descriptionStyles", ListBuilder()
114 .Append(DictionaryBuilder()
115 .Set("type", "url")
116 .Set("offset", 0)
117 .Set("length", 5))
118 .Append(DictionaryBuilder()
119 .Set("type", "dim")
120 .Set("offset", 9)
121 .Set("length", 2))
122 .Append(DictionaryBuilder()
123 .Set("type", "match")
124 .Set("offset", 9)
125 .Set("length", 2))
126 .Append(DictionaryBuilder()
127 .Set("type", "match")
128 .Set("offset", 0)
129 .Set("length", 4))
130 .Append(DictionaryBuilder()
131 .Set("type", "dim")
132 .Set("offset", 1)
133 .Set("length", 2))))).Build();
135 ACMatchClassifications styles_expected;
136 styles_expected.push_back(ACMatchClassification(0, kUrl | kMatch));
137 styles_expected.push_back(ACMatchClassification(1, kUrl | kMatch | kDim));
138 styles_expected.push_back(ACMatchClassification(3, kUrl | kMatch));
139 styles_expected.push_back(ACMatchClassification(4, kUrl));
140 styles_expected.push_back(ACMatchClassification(5, kNone));
141 styles_expected.push_back(ACMatchClassification(9, kMatch | kDim));
143 scoped_ptr<SendSuggestions::Params> params(
144 SendSuggestions::Params::Create(*list));
145 EXPECT_TRUE(params);
146 EXPECT_TRUE(params->suggest_results[0].get());
147 CompareClassification(styles_expected, StyleTypesToACMatchClassifications(
148 *params->suggest_results[0]));
150 // Try moving the "dim/match" style pair at offset 9. Output should be the
151 // same.
152 scoped_ptr<base::ListValue> moved_list = ListBuilder()
153 .Append(42)
154 .Append(ListBuilder()
155 .Append(DictionaryBuilder()
156 .Set("content", "content")
157 .Set("description", "description")
158 .Set("descriptionStyles", ListBuilder()
159 .Append(DictionaryBuilder()
160 .Set("type", "url")
161 .Set("offset", 0)
162 .Set("length", 5))
163 .Append(DictionaryBuilder()
164 .Set("type", "match")
165 .Set("offset", 0)
166 .Set("length", 4))
167 .Append(DictionaryBuilder()
168 .Set("type", "dim")
169 .Set("offset", 9)
170 .Set("length", 2))
171 .Append(DictionaryBuilder()
172 .Set("type", "match")
173 .Set("offset", 9)
174 .Set("length", 2))
175 .Append(DictionaryBuilder()
176 .Set("type", "dim")
177 .Set("offset", 1)
178 .Set("length", 2))))).Build();
180 scoped_ptr<SendSuggestions::Params> moved_params(
181 SendSuggestions::Params::Create(*moved_list));
182 EXPECT_TRUE(moved_params);
183 EXPECT_TRUE(moved_params->suggest_results[0].get());
184 CompareClassification(styles_expected, StyleTypesToACMatchClassifications(
185 *moved_params->suggest_results[0]));
188 // 0123456789
189 // uuuuu
190 // + mmmmm
191 // + mmm
192 // + ddd
193 // + ddd
194 // = 77777nnnnn
195 TEST(ExtensionOmniboxTest, DescriptionStylesCombine2) {
196 scoped_ptr<base::ListValue> list = ListBuilder()
197 .Append(42)
198 .Append(ListBuilder()
199 .Append(DictionaryBuilder()
200 .Set("content", "content")
201 .Set("description", "description")
202 .Set("descriptionStyles", ListBuilder()
203 .Append(DictionaryBuilder()
204 .Set("type", "url")
205 .Set("offset", 0)
206 .Set("length", 5))
207 .Append(DictionaryBuilder()
208 .Set("type", "match")
209 .Set("offset", 0)
210 .Set("length", 5))
211 .Append(DictionaryBuilder()
212 .Set("type", "match")
213 .Set("offset", 0)
214 .Set("length", 3))
215 .Append(DictionaryBuilder()
216 .Set("type", "dim")
217 .Set("offset", 2)
218 .Set("length", 3))
219 .Append(DictionaryBuilder()
220 .Set("type", "dim")
221 .Set("offset", 0)
222 .Set("length", 3))))).Build();
224 ACMatchClassifications styles_expected;
225 styles_expected.push_back(ACMatchClassification(0, kUrl | kMatch | kDim));
226 styles_expected.push_back(ACMatchClassification(5, kNone));
228 scoped_ptr<SendSuggestions::Params> params(
229 SendSuggestions::Params::Create(*list));
230 EXPECT_TRUE(params);
231 EXPECT_TRUE(params->suggest_results[0].get());
232 CompareClassification(styles_expected, StyleTypesToACMatchClassifications(
233 *params->suggest_results[0]));
236 // 0123456789
237 // uuuuu
238 // + mmmmm
239 // + mmm
240 // + ddd
241 // + ddd
242 // = 77777nnnnn
243 TEST(ExtensionOmniboxTest, DefaultSuggestResult) {
244 // Default suggestions should not have a content parameter.
245 scoped_ptr<base::ListValue> list = ListBuilder()
246 .Append(DictionaryBuilder()
247 .Set("description", "description")
248 .Set("descriptionStyles", ListBuilder()
249 .Append(DictionaryBuilder()
250 .Set("type", "url")
251 .Set("offset", 0)
252 .Set("length", 5))
253 .Append(DictionaryBuilder()
254 .Set("type", "match")
255 .Set("offset", 0)
256 .Set("length", 5))
257 .Append(DictionaryBuilder()
258 .Set("type", "match")
259 .Set("offset", 0)
260 .Set("length", 3))
261 .Append(DictionaryBuilder()
262 .Set("type", "dim")
263 .Set("offset", 2)
264 .Set("length", 3))
265 .Append(DictionaryBuilder()
266 .Set("type", "dim")
267 .Set("offset", 0)
268 .Set("length", 3)))).Build();
270 scoped_ptr<SetDefaultSuggestion::Params> params(
271 SetDefaultSuggestion::Params::Create(*list));
272 EXPECT_TRUE(params);
275 } // namespace extensions