summaryrefslogtreecommitdiffstats
path: root/chrome/browser/bookmark_bar_context_menu_controller_test.cc
blob: 4c2cfa4083a17e3fe64184ea0d9e1b966594221a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
// Copyright (c) 2006-2008 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 "chrome/browser/bookmark_bar_context_menu_controller.h"
#include "chrome/browser/bookmark_bar_model.h"
#include "chrome/browser/profile.h"
#include "chrome/browser/views/bookmark_bar_view.h"
#include "chrome/common/pref_names.h"
#include "chrome/common/pref_service.h"
#include "chrome/browser/page_navigator.h"
#include "chrome/test/testing_profile.h"
#include "testing/gtest/include/gtest/gtest.h"

namespace {

// PageNavigator implementation that records the URL.
class TestingPageNavigator : public PageNavigator {
 public:
  virtual void OpenURL(const GURL& url,
                       WindowOpenDisposition disposition,
                       PageTransition::Type transition) {
    urls_.push_back(url);
  }

  std::vector<GURL> urls_;
};

}  // namespace

class BookmarkBarContextMenuControllerTest : public testing::Test {
 public:
  BookmarkBarContextMenuControllerTest()
      : bb_view_(NULL), model_(NULL) {
  }

  virtual void SetUp() {
    BookmarkBarView::testing_ = true;

    profile_.reset(new TestingProfile());
    profile_->set_has_history_service(true);
    profile_->CreateBookmarkBarModel();

    model_ = profile_->GetBookmarkBarModel();

    bb_view_.reset(new BookmarkBarView(profile_.get(), NULL));
    bb_view_->SetPageNavigator(&navigator_);

    AddTestData();
  }

  virtual void TearDown() {
    BookmarkBarView::testing_ = false;
  }

 protected:
  MessageLoopForUI message_loop_;
  scoped_ptr<TestingProfile> profile_;
  BookmarkBarModel* model_;
  scoped_ptr<BookmarkBarView> bb_view_;
  TestingPageNavigator navigator_;

 private:
  // Creates the following structure:
  // a
  // F1
  //  f1a
  //  F11
  //   f11a
  // F2
  void AddTestData() {
    std::string test_base = "file:///c:/tmp/";

    model_->AddURL(model_->GetBookmarkBarNode(), 0, L"a",
                   GURL(test_base + "a"));
    BookmarkBarNode* f1 =
        model_->AddGroup(model_->GetBookmarkBarNode(), 1, L"F1");
    model_->AddURL(f1, 0, L"f1a", GURL(test_base + "f1a"));
    BookmarkBarNode* f11 = model_->AddGroup(f1, 1, L"F11");
    model_->AddURL(f11, 0, L"f11a", GURL(test_base + "f11a"));
    model_->AddGroup(model_->GetBookmarkBarNode(), 2, L"F2");
  }
};

// Tests Deleting from the menu.
TEST_F(BookmarkBarContextMenuControllerTest, DeleteURL) {
  BookmarkBarContextMenuController controller(
      bb_view_.get(), model_->GetBookmarkBarNode()->GetChild(0));
  GURL url = model_->GetBookmarkBarNode()->GetChild(0)->GetURL();
  ASSERT_TRUE(controller.IsCommandEnabled(
                  BookmarkBarContextMenuController::delete_bookmark_id));
  // Delete the URL.
  controller.ExecuteCommand(
      BookmarkBarContextMenuController::delete_bookmark_id);
  // Model shouldn't have URL anymore.
  ASSERT_TRUE(model_->GetNodeByURL(url) == NULL);
}

// Tests openning from the menu.
TEST_F(BookmarkBarContextMenuControllerTest, OpenURL) {
  BookmarkBarContextMenuController controller(
      bb_view_.get(), model_->GetBookmarkBarNode()->GetChild(0));
  GURL url = model_->GetBookmarkBarNode()->GetChild(0)->GetURL();
  ASSERT_TRUE(controller.IsCommandEnabled(
                  BookmarkBarContextMenuController::open_bookmark_id));
  // Open it.
  controller.ExecuteCommand(
      BookmarkBarContextMenuController::open_bookmark_id);
  // Should have navigated to it.
  ASSERT_EQ(1, navigator_.urls_.size());
  ASSERT_TRUE(url == navigator_.urls_[0]);
}

// Tests open all on a folder with a couple of bookmarks.
TEST_F(BookmarkBarContextMenuControllerTest, OpenAll) {
  BookmarkBarNode* folder = model_->GetBookmarkBarNode()->GetChild(1);
  BookmarkBarContextMenuController controller(bb_view_.get(), folder);
  ASSERT_TRUE(controller.IsCommandEnabled(
      BookmarkBarContextMenuController::open_all_bookmarks_id));
  ASSERT_TRUE(controller.IsCommandEnabled(
      BookmarkBarContextMenuController::open_all_bookmarks_in_new_window_id));
  // Open it.
  controller.ExecuteCommand(
      BookmarkBarContextMenuController::open_all_bookmarks_id);
  // Should have navigated to F1's children.
  ASSERT_EQ(2, navigator_.urls_.size());
  ASSERT_TRUE(folder->GetChild(0)->GetURL() == navigator_.urls_[0]);
  ASSERT_TRUE(folder->GetChild(1)->GetChild(0)->GetURL() ==
              navigator_.urls_[1]);
}

// Tests that menus are appropriately disabled for empty folders.
TEST_F(BookmarkBarContextMenuControllerTest, DisableForEmptyFolder) {
  BookmarkBarNode* folder = model_->GetBookmarkBarNode()->GetChild(2);
  BookmarkBarContextMenuController controller(bb_view_.get(), folder);
  EXPECT_FALSE(controller.IsCommandEnabled(
      BookmarkBarContextMenuController::open_all_bookmarks_id));
  EXPECT_FALSE(controller.IsCommandEnabled(
      BookmarkBarContextMenuController::open_all_bookmarks_in_new_window_id));
}