| // Copyright (c) 2010 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "base/values.h" |
| #include "chrome/browser/extensions/extension_omnibox_api.h" |
| #include "testing/gtest/include/gtest/gtest.h" |
| #include "testing/platform_test.h" |
| |
| namespace { |
| |
| const int kNone = ACMatchClassification::NONE; |
| const int kUrl = ACMatchClassification::URL; |
| const int kMatch = ACMatchClassification::MATCH; |
| const int kDim = ACMatchClassification::DIM; |
| |
| void AppendStyle(const std::string& type, |
| int offset, int length, |
| ListValue* styles) { |
| DictionaryValue* style = new DictionaryValue; |
| style->SetString("type", type); |
| style->SetInteger("offset", offset); |
| style->SetInteger("length", length); |
| styles->Append(style); |
| } |
| |
| void CompareClassification(const ACMatchClassifications& expected, |
| const ACMatchClassifications& actual) { |
| EXPECT_EQ(expected.size(), actual.size()); |
| for (size_t i = 0; i < expected.size() && i < actual.size(); ++i) { |
| EXPECT_EQ(expected[i].offset, actual[i].offset) << "Index:" << i; |
| EXPECT_EQ(expected[i].style, actual[i].style) << "Index:" << i; |
| } |
| } |
| |
| } // namespace |
| |
| // Test output key: n = character with no styling, d = dim, m = match, u = url |
| // u = 1, m = 2, d = 4. u+d = 5, etc. |
| |
| // 0123456789 |
| // mmmm |
| // + ddd |
| // = nmmmmndddn |
| TEST(ExtensionOmniboxTest, DescriptionStylesSimple) { |
| ListValue styles_value; |
| AppendStyle("match", 1, 4, &styles_value); |
| AppendStyle("dim", 6, 3, &styles_value); |
| |
| ACMatchClassifications styles_expected; |
| styles_expected.push_back(ACMatchClassification(0, kNone)); |
| styles_expected.push_back(ACMatchClassification(1, kMatch)); |
| styles_expected.push_back(ACMatchClassification(5, kNone)); |
| styles_expected.push_back(ACMatchClassification(6, kDim)); |
| styles_expected.push_back(ACMatchClassification(9, kNone)); |
| |
| ExtensionOmniboxSuggestion suggestions; |
| suggestions.description.resize(10); |
| EXPECT_TRUE(suggestions.ReadStylesFromValue(styles_value)); |
| CompareClassification(styles_expected, suggestions.description_styles); |
| |
| // Same input, but swap the order. Ensure it still works. |
| styles_value.Clear(); |
| AppendStyle("dim", 6, 3, &styles_value); |
| AppendStyle("match", 1, 4, &styles_value); |
| EXPECT_TRUE(suggestions.ReadStylesFromValue(styles_value)); |
| CompareClassification(styles_expected, suggestions.description_styles); |
| } |
| |
| // 0123456789 |
| // uuuuu |
| // + dd |
| // + mm |
| // + mmmm |
| // + dd |
| // = 3773unnnn66 |
| TEST(ExtensionOmniboxTest, DescriptionStylesCombine) { |
| ListValue styles_value; |
| AppendStyle("url", 0, 5, &styles_value); |
| AppendStyle("dim", 9, 2, &styles_value); |
| AppendStyle("match", 9, 2, &styles_value); |
| AppendStyle("match", 0, 4, &styles_value); |
| AppendStyle("dim", 1, 2, &styles_value); |
| |
| ACMatchClassifications styles_expected; |
| styles_expected.push_back(ACMatchClassification(0, kUrl | kMatch)); |
| styles_expected.push_back(ACMatchClassification(1, kUrl | kMatch | kDim)); |
| styles_expected.push_back(ACMatchClassification(3, kUrl | kMatch)); |
| styles_expected.push_back(ACMatchClassification(4, kUrl)); |
| styles_expected.push_back(ACMatchClassification(5, kNone)); |
| styles_expected.push_back(ACMatchClassification(9, kMatch | kDim)); |
| |
| ExtensionOmniboxSuggestion suggestions; |
| suggestions.description.resize(10); |
| EXPECT_TRUE(suggestions.ReadStylesFromValue(styles_value)); |
| CompareClassification(styles_expected, suggestions.description_styles); |
| |
| // Try moving the "dim/match" style pair at offset 9. Output should be the |
| // same. |
| styles_value.Clear(); |
| AppendStyle("url", 0, 5, &styles_value); |
| AppendStyle("match", 0, 4, &styles_value); |
| AppendStyle("dim", 9, 2, &styles_value); |
| AppendStyle("match", 9, 2, &styles_value); |
| AppendStyle("dim", 1, 2, &styles_value); |
| EXPECT_TRUE(suggestions.ReadStylesFromValue(styles_value)); |
| CompareClassification(styles_expected, suggestions.description_styles); |
| } |
| |
| // 0123456789 |
| // uuuuu |
| // + mmmmm |
| // + mmm |
| // + ddd |
| // + ddd |
| // = 77777nnnnn |
| TEST(ExtensionOmniboxTest, DescriptionStylesCombine2) { |
| ListValue styles_value; |
| AppendStyle("url", 0, 5, &styles_value); |
| AppendStyle("match", 0, 5, &styles_value); |
| AppendStyle("match", 0, 3, &styles_value); |
| AppendStyle("dim", 2, 3, &styles_value); |
| AppendStyle("dim", 0, 3, &styles_value); |
| |
| ACMatchClassifications styles_expected; |
| styles_expected.push_back(ACMatchClassification(0, kUrl | kMatch | kDim)); |
| styles_expected.push_back(ACMatchClassification(5, kNone)); |
| |
| ExtensionOmniboxSuggestion suggestions; |
| suggestions.description.resize(10); |
| EXPECT_TRUE(suggestions.ReadStylesFromValue(styles_value)); |
| CompareClassification(styles_expected, suggestions.description_styles); |
| } |