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