| OLD | NEW | 
|---|
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be | 
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. | 
| 4 | 4 | 
| 5 #include <string> | 5 #include <string> | 
| 6 #include <vector> | 6 #include <vector> | 
| 7 | 7 | 
| 8 #include "base/message_loop.h" | 8 #include "base/message_loop.h" | 
| 9 #include "base/string_number_conversions.h" | 9 #include "base/string_number_conversions.h" | 
| 10 #include "base/string_split.h" | 10 #include "base/string_split.h" | 
| (...skipping 117 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 128     // Exact and prefix match. | 128     // Exact and prefix match. | 
| 129     { "ab cdef ghij;ab;cde;cdef;ghi;cdef ab;ghij ab", | 129     { "ab cdef ghij;ab;cde;cdef;ghi;cdef ab;ghij ab", | 
| 130       "ab cde ghi", | 130       "ab cde ghi", | 
| 131       "ab cdef ghij"}, | 131       "ab cdef ghij"}, | 
| 132 | 132 | 
| 133     // Title with term multiple times. | 133     // Title with term multiple times. | 
| 134     { "ab ab",                      "ab",       "ab ab"}, | 134     { "ab ab",                      "ab",       "ab ab"}, | 
| 135 | 135 | 
| 136     // Make sure quotes don't do a prefix match. | 136     // Make sure quotes don't do a prefix match. | 
| 137     { "think",                      "\"thi\"",  ""}, | 137     { "think",                      "\"thi\"",  ""}, | 
|  | 138 | 
|  | 139     // Prefix matches against multiple candidates. | 
|  | 140     { "abc1 abc2 abc3 abc4", "abc", "abc1 abc2 abc3 abc4"}, | 
| 138   }; | 141   }; | 
| 139   for (size_t i = 0; i < ARRAYSIZE_UNSAFE(data); ++i) { | 142   for (size_t i = 0; i < ARRAYSIZE_UNSAFE(data); ++i) { | 
| 140     std::vector<std::string> titles; | 143     std::vector<std::string> titles; | 
| 141     base::SplitString(data[i].input, ';', &titles); | 144     base::SplitString(data[i].input, ';', &titles); | 
| 142     AddBookmarksWithTitles(titles); | 145     AddBookmarksWithTitles(titles); | 
| 143 | 146 | 
| 144     std::vector<std::string> expected; | 147     std::vector<std::string> expected; | 
| 145     if (!data[i].expected.empty()) | 148     if (!data[i].expected.empty()) | 
| 146       base::SplitString(data[i].expected, ';', &expected); | 149       base::SplitString(data[i].expected, ';', &expected); | 
| 147 | 150 | 
| 148     ExpectMatches(data[i].query, expected); | 151     ExpectMatches(data[i].query, expected); | 
| 149 | 152 | 
| 150     model_.reset(new BookmarkModel(NULL)); | 153     model_.reset(new BookmarkModel(NULL)); | 
| 151   } | 154   } | 
| 152 } | 155 } | 
| 153 | 156 | 
| 154 // Makes sure match positions are updated appropriately. | 157 // Makes sure match positions are updated appropriately. | 
| 155 TEST_F(BookmarkIndexTest, MatchPositions) { | 158 TEST_F(BookmarkIndexTest, MatchPositions) { | 
| 156   struct TestData { | 159   struct TestData { | 
| 157     const std::string title; | 160     const std::string title; | 
| 158     const std::string query; | 161     const std::string query; | 
| 159     const std::string expected; | 162     const std::string expected; | 
| 160   } data[] = { | 163   } data[] = { | 
| 161     // Trivial test case of only one term, exact match. | 164     // Trivial test case of only one term, exact match. | 
| 162     { "a",                        "A",        "0,1" }, | 165     { "a",                        "A",        "0,1" }, | 
| 163     { "foo bar",                  "bar",      "4,7" }, | 166     { "foo bar",                  "bar",      "4,7" }, | 
| 164     { "fooey bark",               "bar foo",  "0,3:6,9"}, | 167     { "fooey bark",               "bar foo",  "0,3:6,9"}, | 
|  | 168     // Non-trivial tests. | 
|  | 169     { "foobar foo",               "foobar foo",   "0,6:7,10" }, | 
|  | 170     { "foobar foo",               "foo foobar",   "0,6:7,10" }, | 
|  | 171     { "foobar foobar",            "foobar foo",   "0,6:7,13" }, | 
|  | 172     { "foobar foobar",            "foo foobar",   "0,6:7,13" }, | 
| 165   }; | 173   }; | 
| 166   for (size_t i = 0; i < ARRAYSIZE_UNSAFE(data); ++i) { | 174   for (size_t i = 0; i < ARRAYSIZE_UNSAFE(data); ++i) { | 
| 167     std::vector<std::string> titles; | 175     std::vector<std::string> titles; | 
| 168     titles.push_back(data[i].title); | 176     titles.push_back(data[i].title); | 
| 169     AddBookmarksWithTitles(titles); | 177     AddBookmarksWithTitles(titles); | 
| 170 | 178 | 
| 171     Snippet::MatchPositions expected_matches; | 179     Snippet::MatchPositions expected_matches; | 
| 172     ExtractMatchPositions(data[i].expected, &expected_matches); | 180     ExtractMatchPositions(data[i].expected, &expected_matches); | 
| 173     ExpectMatchPositions(data[i].query, expected_matches); | 181     ExpectMatchPositions(data[i].query, expected_matches); | 
| 174 | 182 | 
| (...skipping 121 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 296   EXPECT_EQ(data[1].url, matches[3].node->url()); | 304   EXPECT_EQ(data[1].url, matches[3].node->url()); | 
| 297 | 305 | 
| 298   matches.clear(); | 306   matches.clear(); | 
| 299   // Select top two matches. | 307   // Select top two matches. | 
| 300   model->GetBookmarksWithTitlesMatching(ASCIIToUTF16("google"), 2, &matches); | 308   model->GetBookmarksWithTitlesMatching(ASCIIToUTF16("google"), 2, &matches); | 
| 301 | 309 | 
| 302   EXPECT_EQ(2, static_cast<int>(matches.size())); | 310   EXPECT_EQ(2, static_cast<int>(matches.size())); | 
| 303   EXPECT_EQ(data[0].url, matches[0].node->url()); | 311   EXPECT_EQ(data[0].url, matches[0].node->url()); | 
| 304   EXPECT_EQ(data[3].url, matches[1].node->url()); | 312   EXPECT_EQ(data[3].url, matches[1].node->url()); | 
| 305 } | 313 } | 
| OLD | NEW | 
|---|