1// Copyright (c) 2012 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#import "chrome/browser/ui/cocoa/one_click_signin_bubble_controller.h" 6 7#import <Cocoa/Cocoa.h> 8 9#include "base/bind.h" 10#include "base/compiler_specific.h" 11#import "base/mac/scoped_nsobject.h" 12#include "base/memory/weak_ptr.h" 13#import "chrome/browser/ui/cocoa/browser_window_cocoa.h" 14#include "chrome/browser/ui/cocoa/cocoa_profile_test.h" 15#import "chrome/browser/ui/cocoa/one_click_signin_view_controller.h" 16#include "chrome/browser/ui/sync/one_click_signin_sync_starter.h" 17#include "testing/gmock/include/gmock/gmock.h" 18#include "testing/gtest/include/gtest/gtest.h" 19#import "testing/gtest_mac.h" 20 21namespace { 22 23using ::testing::_; 24 25class OneClickSigninBubbleControllerTest : public CocoaProfileTest { 26 public: 27 OneClickSigninBubbleControllerTest() 28 : weak_ptr_factory_(this), 29 start_sync_callback_( 30 base::Bind(&OneClickSigninBubbleControllerTest::OnStartSync, 31 weak_ptr_factory_.GetWeakPtr())) {} 32 33 virtual void SetUp() OVERRIDE { 34 CocoaProfileTest::SetUp(); 35 BrowserWindowCocoa* browser_window = 36 static_cast<BrowserWindowCocoa*>(browser()->window()); 37 controller_.reset([[OneClickSigninBubbleController alloc] 38 initWithBrowserWindowController:browser_window->cocoa_controller() 39 webContents:nil 40 errorMessage:nil 41 callback:start_sync_callback_]); 42 [controller_ showWindow:nil]; 43 EXPECT_NSEQ(@"OneClickSigninBubble", 44 [[controller_ viewController] nibName]); 45 } 46 47 virtual void TearDown() OVERRIDE { 48 controller_.reset(); 49 CocoaProfileTest::TearDown(); 50 } 51 52 MOCK_METHOD1(OnStartSync, void(OneClickSigninSyncStarter::StartSyncMode)); 53 54 protected: 55 base::WeakPtrFactory<OneClickSigninBubbleControllerTest> weak_ptr_factory_; 56 BrowserWindow::StartSyncCallback start_sync_callback_; 57 base::scoped_nsobject<OneClickSigninBubbleController> controller_; 58 59 private: 60 DISALLOW_COPY_AND_ASSIGN(OneClickSigninBubbleControllerTest); 61}; 62 63// Test that the bubble does not sync if the OK button is clicked. 64TEST_F(OneClickSigninBubbleControllerTest, OK) { 65 EXPECT_CALL(*this, OnStartSync( 66 OneClickSigninSyncStarter::SYNC_WITH_DEFAULT_SETTINGS)).Times(0); 67 [[controller_ viewController] ok:nil]; 68} 69 70// Test that the bubble does not sync if the Undo button 71// is clicked. Callback should be called to abort the sync. 72TEST_F(OneClickSigninBubbleControllerTest, Undo) { 73 EXPECT_CALL(*this, OnStartSync( 74 OneClickSigninSyncStarter::UNDO_SYNC)).Times(0); 75 [[controller_ viewController] onClickUndo:nil]; 76} 77 78// Test that the bubble does not sync if the bubble is closed. 79TEST_F(OneClickSigninBubbleControllerTest, Close) { 80 EXPECT_CALL(*this, OnStartSync( 81 OneClickSigninSyncStarter::SYNC_WITH_DEFAULT_SETTINGS)).Times(0); 82 [controller_ close]; 83} 84 85} // namespace 86