172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen// Copyright (c) 2011 The Chromium Authors. All rights reserved.
2c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Use of this source code is governed by a BSD-style license that can be
3c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// found in the LICENSE file.
4c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
5dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "chrome/browser/ui/gtk/bookmarks/bookmark_bar_gtk.h"
6c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
74a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch#include "base/task.h"
83345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#include "base/utf_string_conversions.h"
93345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#include "chrome/browser/bookmarks/bookmark_model.h"
10ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "chrome/browser/ui/browser.h"
1172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "chrome/browser/ui/gtk/tabstrip_origin_provider.h"
12c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/test/testing_profile.h"
13dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "content/browser/browser_thread.h"
144a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch#include "testing/gtest/include/gtest/gtest.h"
15c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
16c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Dummy implementation that's good enough for the tests; we don't test
17c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// rendering here so all we need is a non-NULL object.
18c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass EmptyTabstripOriginProvider : public TabstripOriginProvider {
19c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public:
20c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual gfx::Point GetTabStripOriginForWidget(GtkWidget* widget) {
21c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    return gfx::Point(0, 0);
22c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  }
23c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch};
24c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
25c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass BookmarkBarGtkUnittest : public ::testing::Test {
26c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch protected:
27c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  BookmarkBarGtkUnittest()
28731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick      : ui_thread_(BrowserThread::UI, &message_loop_),
29731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick        file_thread_(BrowserThread::FILE, &message_loop_) {
303345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  }
313345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick
323345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  virtual void SetUp() {
33c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    profile_.reset(new TestingProfile());
34c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    profile_->CreateBookmarkModel(true);
35c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    profile_->BlockUntilBookmarkModelLoaded();
36c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    browser_.reset(new Browser(Browser::TYPE_NORMAL, profile_.get()));
37c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
38c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    origin_provider_.reset(new EmptyTabstripOriginProvider);
39c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    bookmark_bar_.reset(new BookmarkBarGtk(NULL, profile_.get(), browser_.get(),
40c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                                           origin_provider_.get()));
41c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  }
42c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
433345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  virtual void TearDown() {
44513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch    message_loop_.RunAllPending();
45513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
463345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick    bookmark_bar_.reset();
473345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick    origin_provider_.reset();
483345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick    browser_.reset();
493345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick    profile_.reset();
503345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  }
513345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick
523345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  MessageLoopForUI message_loop_;
53731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  BrowserThread ui_thread_;
54731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  BrowserThread file_thread_;
553345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick
56c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  scoped_ptr<TestingProfile> profile_;
57c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  scoped_ptr<Browser> browser_;
58c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  scoped_ptr<TabstripOriginProvider> origin_provider_;
59c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  scoped_ptr<BookmarkBarGtk> bookmark_bar_;
60c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch};
61c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
62c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST_F(BookmarkBarGtkUnittest, DisplaysHelpMessageOnEmpty) {
63c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  BookmarkModel* model = profile_->GetBookmarkModel();
64c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  bookmark_bar_->Loaded(model);
65c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
66c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // There are no bookmarks in the model by default. Expect that the
67c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // |instructions_label| is shown.
68c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_TRUE(bookmark_bar_->show_instructions_);
69c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
70c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
71c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST_F(BookmarkBarGtkUnittest, HidesHelpMessageWithBookmark) {
72c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  BookmarkModel* model = profile_->GetBookmarkModel();
73c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
74c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  const BookmarkNode* parent = model->GetBookmarkBarNode();
75ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  model->AddURL(parent, parent->child_count(),
763345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick                ASCIIToUTF16("title"), GURL("http://one.com"));
77c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
78c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  bookmark_bar_->Loaded(model);
79c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_FALSE(bookmark_bar_->show_instructions_);
80c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
81c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
82c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST_F(BookmarkBarGtkUnittest, BuildsButtons) {
83c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  BookmarkModel* model = profile_->GetBookmarkModel();
84c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
85c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  const BookmarkNode* parent = model->GetBookmarkBarNode();
86ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  model->AddURL(parent, parent->child_count(),
873345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick                ASCIIToUTF16("title"), GURL("http://one.com"));
88ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  model->AddURL(parent, parent->child_count(),
893345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick                ASCIIToUTF16("other"), GURL("http://two.com"));
90c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
91c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  bookmark_bar_->Loaded(model);
92c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
93c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // We should expect two children to the bookmark bar's toolbar.
94c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  GList* children = gtk_container_get_children(
95c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      GTK_CONTAINER(bookmark_bar_->bookmark_toolbar_.get()));
96c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_EQ(2U, g_list_length(children));
97c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  g_list_free(children);
98c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
99