bookmark_bubble_view_unittest.cc revision 58537e28ecd584eab876aee8be7156509866d23a
1// Copyright 2013 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 "chrome/browser/ui/views/bookmarks/bookmark_bubble_view.h"
6
7#include <string>
8
9#include "base/memory/scoped_ptr.h"
10#include "chrome/browser/bookmarks/bookmark_model_factory.h"
11#include "chrome/browser/bookmarks/bookmark_test_helpers.h"
12#include "chrome/browser/bookmarks/bookmark_utils.h"
13#include "chrome/browser/signin/fake_signin_manager.h"
14#include "chrome/browser/signin/signin_manager.h"
15#include "chrome/browser/signin/signin_manager_factory.h"
16#include "chrome/browser/ui/bookmarks/bookmark_bubble_delegate.h"
17#include "chrome/test/base/browser_with_test_window_test.h"
18
19namespace {
20const char kTestBookmarkURL[] = "http://www.google.com";
21} // namespace
22
23class BookmarkBubbleViewTest : public BrowserWithTestWindowTest {
24 public:
25  BookmarkBubbleViewTest() {}
26
27  // testing::Test:
28  virtual void SetUp() OVERRIDE {
29    BrowserWithTestWindowTest::SetUp();
30
31    profile()->CreateBookmarkModel(true);
32    test::WaitForBookmarkModelToLoad(profile());
33
34    bookmark_utils::AddIfNotBookmarked(
35        BookmarkModelFactory::GetForProfile(profile()),
36        GURL(kTestBookmarkURL),
37        string16());
38  }
39
40  virtual void TearDown() OVERRIDE {
41    // Make sure the bubble is destroyed before the profile to avoid a crash.
42    bubble_.reset();
43
44    BrowserWithTestWindowTest::TearDown();
45  }
46
47 protected:
48  // Creates a bookmark bubble view.
49  void CreateBubbleView() {
50    scoped_ptr<BookmarkBubbleDelegate> delegate;
51    bubble_.reset(new BookmarkBubbleView(NULL,
52                                         NULL,
53                                         delegate.Pass(),
54                                         profile(),
55                                         GURL(kTestBookmarkURL),
56                                         true));
57  }
58
59  void CreateSigninManager(const std::string& username) {
60    SigninManagerBase* signin_manager =
61        static_cast<SigninManagerBase*>(
62            SigninManagerFactory::GetInstance()->SetTestingFactoryAndUse(
63                profile(),
64                &BookmarkBubbleViewTest::BuildFakeSignInManager));
65    signin_manager->Initialize(profile(), NULL);
66
67    if (!username.empty()) {
68      ASSERT_TRUE(signin_manager);
69      signin_manager->SetAuthenticatedUsername(username);
70    }
71  }
72
73  scoped_ptr<BookmarkBubbleView> bubble_;
74
75 private:
76  static BrowserContextKeyedService* BuildFakeSignInManager(
77      content::BrowserContext* profile) {
78#if defined(OS_CHROMEOS)
79    return new FakeSigninManagerBase();
80#else  // !defined(OS_CHROMEOS)
81    return new FakeSigninManager(static_cast<Profile*>(profile));
82#endif
83  }
84
85  DISALLOW_COPY_AND_ASSIGN(BookmarkBubbleViewTest);
86};
87
88// Verifies that the sync promo is not displayed for a signed in user.
89TEST_F(BookmarkBubbleViewTest, SyncPromoSignedIn) {
90  CreateSigninManager("fake_username");
91  CreateBubbleView();
92  bubble_->Init();
93  EXPECT_FALSE(bubble_->sync_promo_view_);
94}
95
96// Verifies that the sync promo is displayed for a user that is not signed in.
97TEST_F(BookmarkBubbleViewTest, SyncPromoNotSignedIn) {
98  CreateBubbleView();
99  bubble_->Init();
100#if defined(OS_CHROMEOS)
101  EXPECT_FALSE(bubble_->sync_promo_view_);
102#else  // !defined(OS_CHROMEOS)
103  EXPECT_TRUE(bubble_->sync_promo_view_);
104#endif
105}
106