// Copyright (c) 2009 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. #import #include "base/scoped_nsobject.h" #include "base/string_util.h" #include "base/sys_string_conversions.h" #import "chrome/browser/cocoa/cocoa_test_helper.h" #import "chrome/browser/cocoa/infobar_controller.h" #include "chrome/browser/cocoa/infobar_test_helper.h" #include "chrome/browser/tab_contents/infobar_delegate.h" #include "testing/gtest/include/gtest/gtest.h" #include "testing/platform_test.h" @interface InfoBarController (ExposedForTesting) - (NSTextField*)label; @end @implementation InfoBarController (ExposedForTesting) - (NSTextField*)label { return label_; } @end namespace { /////////////////////////////////////////////////////////////////////////// // Test fixtures class AlertInfoBarControllerTest : public PlatformTest { public: virtual void SetUp() { PlatformTest::SetUp(); controller_.reset( [[AlertInfoBarController alloc] initWithDelegate:&delegate_]); [helper_.contentView() addSubview:[controller_ view]]; } protected: CocoaTestHelper helper_; MockAlertInfoBarDelegate delegate_; scoped_nsobject controller_; }; class LinkInfoBarControllerTest : public PlatformTest { public: virtual void SetUp() { PlatformTest::SetUp(); controller_.reset( [[LinkInfoBarController alloc] initWithDelegate:&delegate_]); [helper_.contentView() addSubview:[controller_ view]]; } protected: CocoaTestHelper helper_; MockLinkInfoBarDelegate delegate_; scoped_nsobject controller_; }; class ConfirmInfoBarControllerTest : public PlatformTest { public: virtual void SetUp() { PlatformTest::SetUp(); controller_.reset( [[ConfirmInfoBarController alloc] initWithDelegate:&delegate_]); [helper_.contentView() addSubview:[controller_ view]]; } protected: CocoaTestHelper helper_; MockConfirmInfoBarDelegate delegate_; scoped_nsobject controller_; }; //////////////////////////////////////////////////////////////////////////// // Tests TEST_F(AlertInfoBarControllerTest, ShowAndDismiss) { // Make sure someone looked at the message and icon. EXPECT_TRUE(delegate_.message_text_accessed); EXPECT_TRUE(delegate_.icon_accessed); // Check to make sure the infobar message was set properly. EXPECT_EQ(std::wstring(kMockAlertInfoBarMessage), base::SysNSStringToWide([[controller_.get() label] stringValue])); // Check that dismissing the infobar calls InfoBarClosed() on the delegate. [controller_ dismiss:nil]; EXPECT_TRUE(delegate_.closed); } TEST_F(AlertInfoBarControllerTest, DeallocController) { // Test that dealloc'ing the controller does not send an // InfoBarClosed() message to the delegate. controller_.reset(nil); EXPECT_FALSE(delegate_.closed); } TEST_F(LinkInfoBarControllerTest, ShowAndDismiss) { // Make sure someone looked at the message, link, and icon. EXPECT_TRUE(delegate_.message_text_accessed); EXPECT_TRUE(delegate_.link_text_accessed); EXPECT_TRUE(delegate_.icon_accessed); // Check that dismissing the infobar calls InfoBarClosed() on the delegate. [controller_ dismiss:nil]; EXPECT_FALSE(delegate_.link_clicked); EXPECT_TRUE(delegate_.closed); } TEST_F(LinkInfoBarControllerTest, ShowAndClickLink) { // Check that clicking on the link calls LinkClicked() on the // delegate. It should also close the infobar. [controller_ linkClicked]; EXPECT_TRUE(delegate_.link_clicked); EXPECT_TRUE(delegate_.closed); } TEST_F(LinkInfoBarControllerTest, ShowAndClickLinkWithoutClosing) { delegate_.closes_on_action = false; // Check that clicking on the link calls LinkClicked() on the // delegate. It should not close the infobar. [controller_ linkClicked]; EXPECT_TRUE(delegate_.link_clicked); EXPECT_FALSE(delegate_.closed); } TEST_F(ConfirmInfoBarControllerTest, ShowAndDismiss) { // Make sure someone looked at the message and icon. EXPECT_TRUE(delegate_.message_text_accessed); EXPECT_TRUE(delegate_.icon_accessed); // Check to make sure the infobar message was set properly. EXPECT_EQ(std::wstring(kMockConfirmInfoBarMessage), base::SysNSStringToWide([[controller_.get() label] stringValue])); // Check that dismissing the infobar calls InfoBarClosed() on the delegate. [controller_ dismiss:nil]; EXPECT_FALSE(delegate_.ok_clicked); EXPECT_FALSE(delegate_.cancel_clicked); EXPECT_TRUE(delegate_.closed); } TEST_F(ConfirmInfoBarControllerTest, ShowAndClickOK) { // Check that clicking the OK button calls Accept() and then closes // the infobar. [controller_ ok:nil]; EXPECT_TRUE(delegate_.ok_clicked); EXPECT_FALSE(delegate_.cancel_clicked); EXPECT_TRUE(delegate_.closed); } TEST_F(ConfirmInfoBarControllerTest, ShowAndClickOKWithoutClosing) { delegate_.closes_on_action = false; // Check that clicking the OK button calls Accept() but does not close // the infobar. [controller_ ok:nil]; EXPECT_TRUE(delegate_.ok_clicked); EXPECT_FALSE(delegate_.cancel_clicked); EXPECT_FALSE(delegate_.closed); } TEST_F(ConfirmInfoBarControllerTest, ShowAndClickCancel) { // Check that clicking the cancel button calls Cancel() and closes // the infobar. [controller_ cancel:nil]; EXPECT_FALSE(delegate_.ok_clicked); EXPECT_TRUE(delegate_.cancel_clicked); EXPECT_TRUE(delegate_.closed); } TEST_F(ConfirmInfoBarControllerTest, ShowAndClickCancelWithoutClosing) { delegate_.closes_on_action = false; // Check that clicking the cancel button calls Cancel() but does not close // the infobar. [controller_ cancel:nil]; EXPECT_FALSE(delegate_.ok_clicked); EXPECT_TRUE(delegate_.cancel_clicked); EXPECT_FALSE(delegate_.closed); } } // namespace