1// Copyright 2014 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/base64.h"
6#include "base/strings/utf_string_conversions.h"
7#include "components/bookmarks/browser/bookmark_model.h"
8#include "components/bookmarks/test/test_bookmark_client.h"
9#include "components/enhanced_bookmarks/enhanced_bookmark_utils.h"
10#include "testing/gtest/include/gtest/gtest.h"
11
12using bookmarks::TestBookmarkClient;
13
14namespace {
15
16const GURL bookmark_url("http://example.com/index.html");
17
18class EnhancedBookmarkUtilsTest : public testing::Test {
19 public:
20  EnhancedBookmarkUtilsTest() {}
21  virtual ~EnhancedBookmarkUtilsTest() {}
22
23 protected:
24  DISALLOW_COPY_AND_ASSIGN(EnhancedBookmarkUtilsTest);
25
26  // Adds a bookmark as the subnode at index 0 to other_node.
27  // |name| should be ASCII encoded.
28  // Returns the newly added bookmark.
29  const BookmarkNode* AddBookmark(BookmarkModel* model, std::string name) {
30    return model->AddURL(model->other_node(),
31                         0,  // index.
32                         base::ASCIIToUTF16(name),
33                         bookmark_url);
34  }
35};
36
37TEST_F(EnhancedBookmarkUtilsTest, TestBookmarkSearch) {
38  TestBookmarkClient bookmark_client;
39  scoped_ptr<BookmarkModel> bookmark_model(bookmark_client.CreateModel());
40  const BookmarkNode* node1 = AddBookmark(bookmark_model.get(), "john hopkins");
41  const BookmarkNode* node2 = AddBookmark(bookmark_model.get(), "JohN hopkins");
42  const BookmarkNode* node3 = AddBookmark(bookmark_model.get(), "katy perry");
43  const BookmarkNode* node4 = AddBookmark(bookmark_model.get(), "lil'john13");
44  const BookmarkNode* node5 = AddBookmark(bookmark_model.get(), "jo hn");
45
46  std::vector<const BookmarkNode*> result =
47      enhanced_bookmarks::FindBookmarksWithQuery(bookmark_model.get(), "john");
48  ASSERT_EQ(result.size(), 3u);
49
50  CHECK(std::find(result.begin(), result.end(), node1) != result.end());
51  CHECK(std::find(result.begin(), result.end(), node2) != result.end());
52  CHECK(std::find(result.begin(), result.end(), node4) != result.end());
53
54  CHECK(std::find(result.begin(), result.end(), node3) == result.end());
55  CHECK(std::find(result.begin(), result.end(), node5) == result.end());
56};
57
58}  // namespace
59