15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/values.h"
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/extensions/api/omnibox/omnibox_api.h"
7c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/common/extensions/api/omnibox.h"
8f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "extensions/common/value_builder.h"
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h"
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "testing/platform_test.h"
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace extensions {
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
14c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)namespace omnibox = api::omnibox;
15c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)namespace SendSuggestions = omnibox::SendSuggestions;
16b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)namespace SetDefaultSuggestion = omnibox::SetDefaultSuggestion;
17c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace {
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const int kNone = ACMatchClassification::NONE;
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const int kUrl = ACMatchClassification::URL;
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const int kMatch = ACMatchClassification::MATCH;
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const int kDim = ACMatchClassification::DIM;
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void CompareClassification(const ACMatchClassifications& expected,
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                           const ACMatchClassifications& actual) {
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(expected.size(), actual.size());
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  for (size_t i = 0; i < expected.size() && i < actual.size(); ++i) {
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    EXPECT_EQ(expected[i].offset, actual[i].offset) << "Index:" << i;
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    EXPECT_EQ(expected[i].style, actual[i].style) << "Index:" << i;
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test output key: n = character with no styling, d = dim, m = match, u = url
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// u = 1, m = 2, d = 4. u+d = 5, etc.
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//   0123456789
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//    mmmm
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// +       ddd
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// = nmmmmndddn
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(ExtensionOmniboxTest, DescriptionStylesSimple) {
44eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  scoped_ptr<base::ListValue> list = ListBuilder()
45c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      .Append(42)
46c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      .Append(ListBuilder()
47c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        .Append(DictionaryBuilder()
48c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)          .Set("content", "content")
49c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)          .Set("description", "description")
50c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)          .Set("descriptionStyles", ListBuilder()
51c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)            .Append(DictionaryBuilder()
52c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)              .Set("type", "match")
53c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)              .Set("offset", 1)
54c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)              .Set("length", 4))
55c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)            .Append(DictionaryBuilder()
56c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)              .Set("type", "dim")
57c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)              .Set("offset", 6)
58c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)              .Set("length", 3))))).Build();
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ACMatchClassifications styles_expected;
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  styles_expected.push_back(ACMatchClassification(0, kNone));
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  styles_expected.push_back(ACMatchClassification(1, kMatch));
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  styles_expected.push_back(ACMatchClassification(5, kNone));
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  styles_expected.push_back(ACMatchClassification(6, kDim));
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  styles_expected.push_back(ACMatchClassification(9, kNone));
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
67c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  scoped_ptr<SendSuggestions::Params> params(
68c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      SendSuggestions::Params::Create(*list));
69c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  EXPECT_TRUE(params);
70c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  EXPECT_TRUE(params->suggest_results[0].get());
71c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  CompareClassification(styles_expected, StyleTypesToACMatchClassifications(
72c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      *params->suggest_results[0]));
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Same input, but swap the order. Ensure it still works.
75eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  scoped_ptr<base::ListValue> swap_list = ListBuilder()
76c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      .Append(42)
77c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      .Append(ListBuilder()
78c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        .Append(DictionaryBuilder()
79c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)          .Set("content", "content")
80c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)          .Set("description", "description")
81c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)          .Set("descriptionStyles", ListBuilder()
82c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)            .Append(DictionaryBuilder()
83c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)              .Set("type", "dim")
84c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)              .Set("offset", 6)
85c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)              .Set("length", 3))
86c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)            .Append(DictionaryBuilder()
87c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)              .Set("type", "match")
88c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)              .Set("offset", 1)
89c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)              .Set("length", 4))))).Build();
90c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
91c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  scoped_ptr<SendSuggestions::Params> swapped_params(
92c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      SendSuggestions::Params::Create(*swap_list));
93c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  EXPECT_TRUE(swapped_params);
94c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  EXPECT_TRUE(swapped_params->suggest_results[0].get());
95c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  CompareClassification(styles_expected, StyleTypesToACMatchClassifications(
96c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      *swapped_params->suggest_results[0]));
975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//   0123456789
1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//   uuuuu
1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// +          dd
1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// +          mm
1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// + mmmm
1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// +  dd
1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// = 3773unnnn66
1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(ExtensionOmniboxTest, DescriptionStylesCombine) {
107eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  scoped_ptr<base::ListValue> list = ListBuilder()
108c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      .Append(42)
109c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      .Append(ListBuilder()
110c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        .Append(DictionaryBuilder()
111c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)          .Set("content", "content")
112c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)          .Set("description", "description")
113c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)          .Set("descriptionStyles", ListBuilder()
114c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)            .Append(DictionaryBuilder()
115c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)              .Set("type", "url")
116c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)              .Set("offset", 0)
117c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)              .Set("length", 5))
118c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)            .Append(DictionaryBuilder()
119c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)              .Set("type", "dim")
120c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)              .Set("offset", 9)
121c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)              .Set("length", 2))
122c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)            .Append(DictionaryBuilder()
123c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)              .Set("type", "match")
124c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)              .Set("offset", 9)
125c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)              .Set("length", 2))
126c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)            .Append(DictionaryBuilder()
127c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)              .Set("type", "match")
128c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)              .Set("offset", 0)
129c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)              .Set("length", 4))
130c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)            .Append(DictionaryBuilder()
131c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)              .Set("type", "dim")
132c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)              .Set("offset", 1)
133c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)              .Set("length", 2))))).Build();
1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ACMatchClassifications styles_expected;
1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  styles_expected.push_back(ACMatchClassification(0, kUrl | kMatch));
1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  styles_expected.push_back(ACMatchClassification(1, kUrl | kMatch | kDim));
1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  styles_expected.push_back(ACMatchClassification(3, kUrl | kMatch));
1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  styles_expected.push_back(ACMatchClassification(4, kUrl));
1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  styles_expected.push_back(ACMatchClassification(5, kNone));
1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  styles_expected.push_back(ACMatchClassification(9, kMatch | kDim));
1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
143c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  scoped_ptr<SendSuggestions::Params> params(
144c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      SendSuggestions::Params::Create(*list));
145c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  EXPECT_TRUE(params);
146c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  EXPECT_TRUE(params->suggest_results[0].get());
147c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  CompareClassification(styles_expected, StyleTypesToACMatchClassifications(
148c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      *params->suggest_results[0]));
1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Try moving the "dim/match" style pair at offset 9. Output should be the
1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // same.
152eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  scoped_ptr<base::ListValue> moved_list = ListBuilder()
153c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      .Append(42)
154c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      .Append(ListBuilder()
155c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        .Append(DictionaryBuilder()
156c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)          .Set("content", "content")
157c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)          .Set("description", "description")
158c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)          .Set("descriptionStyles", ListBuilder()
159c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)            .Append(DictionaryBuilder()
160c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)              .Set("type", "url")
161c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)              .Set("offset", 0)
162c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)              .Set("length", 5))
163c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)            .Append(DictionaryBuilder()
164c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)              .Set("type", "match")
165c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)              .Set("offset", 0)
166c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)              .Set("length", 4))
167c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)            .Append(DictionaryBuilder()
168c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)              .Set("type", "dim")
169c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)              .Set("offset", 9)
170c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)              .Set("length", 2))
171c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)            .Append(DictionaryBuilder()
172c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)              .Set("type", "match")
173c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)              .Set("offset", 9)
174c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)              .Set("length", 2))
175c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)            .Append(DictionaryBuilder()
176c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)              .Set("type", "dim")
177c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)              .Set("offset", 1)
178c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)              .Set("length", 2))))).Build();
179c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
180c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  scoped_ptr<SendSuggestions::Params> moved_params(
181c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      SendSuggestions::Params::Create(*moved_list));
182c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  EXPECT_TRUE(moved_params);
183c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  EXPECT_TRUE(moved_params->suggest_results[0].get());
184c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  CompareClassification(styles_expected, StyleTypesToACMatchClassifications(
185c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      *moved_params->suggest_results[0]));
1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//   0123456789
1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//   uuuuu
1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// + mmmmm
1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// + mmm
1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// +   ddd
1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// + ddd
1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// = 77777nnnnn
1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(ExtensionOmniboxTest, DescriptionStylesCombine2) {
196eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  scoped_ptr<base::ListValue> list = ListBuilder()
197c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      .Append(42)
198c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      .Append(ListBuilder()
199c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        .Append(DictionaryBuilder()
200c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)          .Set("content", "content")
201c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)          .Set("description", "description")
202c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)          .Set("descriptionStyles", ListBuilder()
203c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)            .Append(DictionaryBuilder()
204c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)              .Set("type", "url")
205c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)              .Set("offset", 0)
206c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)              .Set("length", 5))
207c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)            .Append(DictionaryBuilder()
208c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)              .Set("type", "match")
209c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)              .Set("offset", 0)
210c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)              .Set("length", 5))
211c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)            .Append(DictionaryBuilder()
212c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)              .Set("type", "match")
213c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)              .Set("offset", 0)
214c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)              .Set("length", 3))
215c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)            .Append(DictionaryBuilder()
216c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)              .Set("type", "dim")
217c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)              .Set("offset", 2)
218c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)              .Set("length", 3))
219c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)            .Append(DictionaryBuilder()
220c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)              .Set("type", "dim")
221c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)              .Set("offset", 0)
222c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)              .Set("length", 3))))).Build();
2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ACMatchClassifications styles_expected;
2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  styles_expected.push_back(ACMatchClassification(0, kUrl | kMatch | kDim));
2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  styles_expected.push_back(ACMatchClassification(5, kNone));
2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
228c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  scoped_ptr<SendSuggestions::Params> params(
229c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      SendSuggestions::Params::Create(*list));
230c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  EXPECT_TRUE(params);
231c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  EXPECT_TRUE(params->suggest_results[0].get());
232c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  CompareClassification(styles_expected, StyleTypesToACMatchClassifications(
233c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      *params->suggest_results[0]));
2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
236b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)//   0123456789
237b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)//   uuuuu
238b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)// + mmmmm
239b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)// + mmm
240b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)// +   ddd
241b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)// + ddd
242b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)// = 77777nnnnn
243b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)TEST(ExtensionOmniboxTest, DefaultSuggestResult) {
244b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)  // Default suggestions should not have a content parameter.
245eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  scoped_ptr<base::ListValue> list = ListBuilder()
246b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)      .Append(DictionaryBuilder()
247b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)        .Set("description", "description")
248b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)        .Set("descriptionStyles", ListBuilder()
249b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)          .Append(DictionaryBuilder()
250b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)            .Set("type", "url")
251b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)            .Set("offset", 0)
252b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)            .Set("length", 5))
253b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)          .Append(DictionaryBuilder()
254b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)            .Set("type", "match")
255b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)            .Set("offset", 0)
256b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)            .Set("length", 5))
257b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)          .Append(DictionaryBuilder()
258b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)            .Set("type", "match")
259b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)            .Set("offset", 0)
260b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)            .Set("length", 3))
261b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)          .Append(DictionaryBuilder()
262b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)            .Set("type", "dim")
263b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)            .Set("offset", 2)
264b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)            .Set("length", 3))
265b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)          .Append(DictionaryBuilder()
266b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)            .Set("type", "dim")
267b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)            .Set("offset", 0)
268b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)            .Set("length", 3)))).Build();
269b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)
270b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)  scoped_ptr<SetDefaultSuggestion::Params> params(
271b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)      SetDefaultSuggestion::Params::Create(*list));
272b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)  EXPECT_TRUE(params);
273b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)}
274b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)
2755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace extensions
276