1// Copyright (c) 2010 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/values.h" 6#include "chrome/browser/extensions/extension_omnibox_api.h" 7#include "testing/gtest/include/gtest/gtest.h" 8#include "testing/platform_test.h" 9 10namespace { 11 12const int kNone = ACMatchClassification::NONE; 13const int kUrl = ACMatchClassification::URL; 14const int kMatch = ACMatchClassification::MATCH; 15const int kDim = ACMatchClassification::DIM; 16 17void AppendStyle(const std::string& type, 18 int offset, int length, 19 ListValue* styles) { 20 DictionaryValue* style = new DictionaryValue; 21 style->SetString("type", type); 22 style->SetInteger("offset", offset); 23 style->SetInteger("length", length); 24 styles->Append(style); 25} 26 27void CompareClassification(const ACMatchClassifications& expected, 28 const ACMatchClassifications& actual) { 29 EXPECT_EQ(expected.size(), actual.size()); 30 for (size_t i = 0; i < expected.size() && i < actual.size(); ++i) { 31 EXPECT_EQ(expected[i].offset, actual[i].offset) << "Index:" << i; 32 EXPECT_EQ(expected[i].style, actual[i].style) << "Index:" << i; 33 } 34} 35 36} // namespace 37 38// Test output key: n = character with no styling, d = dim, m = match, u = url 39// u = 1, m = 2, d = 4. u+d = 5, etc. 40 41// 0123456789 42// mmmm 43// + ddd 44// = nmmmmndddn 45TEST(ExtensionOmniboxTest, DescriptionStylesSimple) { 46 ListValue styles_value; 47 AppendStyle("match", 1, 4, &styles_value); 48 AppendStyle("dim", 6, 3, &styles_value); 49 50 ACMatchClassifications styles_expected; 51 styles_expected.push_back(ACMatchClassification(0, kNone)); 52 styles_expected.push_back(ACMatchClassification(1, kMatch)); 53 styles_expected.push_back(ACMatchClassification(5, kNone)); 54 styles_expected.push_back(ACMatchClassification(6, kDim)); 55 styles_expected.push_back(ACMatchClassification(9, kNone)); 56 57 ExtensionOmniboxSuggestion suggestions; 58 suggestions.description.resize(10); 59 EXPECT_TRUE(suggestions.ReadStylesFromValue(styles_value)); 60 CompareClassification(styles_expected, suggestions.description_styles); 61 62 // Same input, but swap the order. Ensure it still works. 63 styles_value.Clear(); 64 AppendStyle("dim", 6, 3, &styles_value); 65 AppendStyle("match", 1, 4, &styles_value); 66 EXPECT_TRUE(suggestions.ReadStylesFromValue(styles_value)); 67 CompareClassification(styles_expected, suggestions.description_styles); 68} 69 70// 0123456789 71// uuuuu 72// + dd 73// + mm 74// + mmmm 75// + dd 76// = 3773unnnn66 77TEST(ExtensionOmniboxTest, DescriptionStylesCombine) { 78 ListValue styles_value; 79 AppendStyle("url", 0, 5, &styles_value); 80 AppendStyle("dim", 9, 2, &styles_value); 81 AppendStyle("match", 9, 2, &styles_value); 82 AppendStyle("match", 0, 4, &styles_value); 83 AppendStyle("dim", 1, 2, &styles_value); 84 85 ACMatchClassifications styles_expected; 86 styles_expected.push_back(ACMatchClassification(0, kUrl | kMatch)); 87 styles_expected.push_back(ACMatchClassification(1, kUrl | kMatch | kDim)); 88 styles_expected.push_back(ACMatchClassification(3, kUrl | kMatch)); 89 styles_expected.push_back(ACMatchClassification(4, kUrl)); 90 styles_expected.push_back(ACMatchClassification(5, kNone)); 91 styles_expected.push_back(ACMatchClassification(9, kMatch | kDim)); 92 93 ExtensionOmniboxSuggestion suggestions; 94 suggestions.description.resize(10); 95 EXPECT_TRUE(suggestions.ReadStylesFromValue(styles_value)); 96 CompareClassification(styles_expected, suggestions.description_styles); 97 98 // Try moving the "dim/match" style pair at offset 9. Output should be the 99 // same. 100 styles_value.Clear(); 101 AppendStyle("url", 0, 5, &styles_value); 102 AppendStyle("match", 0, 4, &styles_value); 103 AppendStyle("dim", 9, 2, &styles_value); 104 AppendStyle("match", 9, 2, &styles_value); 105 AppendStyle("dim", 1, 2, &styles_value); 106 EXPECT_TRUE(suggestions.ReadStylesFromValue(styles_value)); 107 CompareClassification(styles_expected, suggestions.description_styles); 108} 109 110// 0123456789 111// uuuuu 112// + mmmmm 113// + mmm 114// + ddd 115// + ddd 116// = 77777nnnnn 117TEST(ExtensionOmniboxTest, DescriptionStylesCombine2) { 118 ListValue styles_value; 119 AppendStyle("url", 0, 5, &styles_value); 120 AppendStyle("match", 0, 5, &styles_value); 121 AppendStyle("match", 0, 3, &styles_value); 122 AppendStyle("dim", 2, 3, &styles_value); 123 AppendStyle("dim", 0, 3, &styles_value); 124 125 ACMatchClassifications styles_expected; 126 styles_expected.push_back(ACMatchClassification(0, kUrl | kMatch | kDim)); 127 styles_expected.push_back(ACMatchClassification(5, kNone)); 128 129 ExtensionOmniboxSuggestion suggestions; 130 suggestions.description.resize(10); 131 EXPECT_TRUE(suggestions.ReadStylesFromValue(styles_value)); 132 CompareClassification(styles_expected, suggestions.description_styles); 133} 134