Home | History | Annotate | Download | only in infobars
      1 // Copyright (c) 2011 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 <Cocoa/Cocoa.h>
      6 
      7 #include "base/memory/scoped_nsobject.h"
      8 #import "chrome/browser/ui/cocoa/cocoa_test_helper.h"
      9 #import "chrome/browser/ui/cocoa/infobars/infobar_container_controller.h"
     10 #include "chrome/browser/ui/cocoa/infobars/mock_confirm_infobar_delegate.h"
     11 #include "chrome/browser/ui/cocoa/infobars/mock_link_infobar_delegate.h"
     12 #import "chrome/browser/ui/cocoa/view_resizer_pong.h"
     13 #include "testing/gtest/include/gtest/gtest.h"
     14 #include "testing/platform_test.h"
     15 
     16 namespace {
     17 
     18 class InfoBarContainerControllerTest : public CocoaTest {
     19   virtual void SetUp() {
     20     CocoaTest::SetUp();
     21     resizeDelegate_.reset([[ViewResizerPong alloc] init]);
     22     ViewResizerPong *viewResizer = resizeDelegate_.get();
     23     controller_ =
     24         [[InfoBarContainerController alloc] initWithResizeDelegate:viewResizer];
     25     NSView* view = [controller_ view];
     26     [[test_window() contentView] addSubview:view];
     27   }
     28 
     29   virtual void TearDown() {
     30     [[controller_ view] removeFromSuperviewWithoutNeedingDisplay];
     31     [controller_ release];
     32     CocoaTest::TearDown();
     33   }
     34 
     35  public:
     36   scoped_nsobject<ViewResizerPong> resizeDelegate_;
     37   InfoBarContainerController* controller_;
     38 };
     39 
     40 TEST_VIEW(InfoBarContainerControllerTest, [controller_ view])
     41 
     42 TEST_F(InfoBarContainerControllerTest, BWCPong) {
     43   // Call positionInfoBarsAndResize and check that |resizeDelegate_| got a
     44   // resize message.
     45   [resizeDelegate_ setHeight:-1];
     46   [controller_ positionInfoBarsAndRedraw];
     47   EXPECT_NE(-1, [resizeDelegate_ height]);
     48 }
     49 
     50 TEST_F(InfoBarContainerControllerTest, AddAndRemoveInfoBars) {
     51   NSView* view = [controller_ view];
     52 
     53   // Add three infobars and then remove them.
     54   // After each step check to make sure we have the correct number of
     55   // infobar subviews.
     56   MockLinkInfoBarDelegate linkDelegate, linkDelegate2;
     57   MockConfirmInfoBarDelegate confirmDelegate;
     58 
     59   [controller_ addInfoBar:&linkDelegate animate:NO];
     60   EXPECT_EQ(1U, [[view subviews] count]);
     61 
     62   [controller_ addInfoBar:&confirmDelegate animate:NO];
     63   EXPECT_EQ(2U, [[view subviews] count]);
     64 
     65   [controller_ addInfoBar:&linkDelegate2 animate:NO];
     66   EXPECT_EQ(3U, [[view subviews] count]);
     67 
     68   // Just to mix things up, remove them in a different order.
     69   [controller_ closeInfoBarsForDelegate:&confirmDelegate animate:NO];
     70   EXPECT_EQ(2U, [[view subviews] count]);
     71 
     72   [controller_ closeInfoBarsForDelegate:&linkDelegate animate:NO];
     73   EXPECT_EQ(1U, [[view subviews] count]);
     74 
     75   [controller_ closeInfoBarsForDelegate:&linkDelegate2 animate:NO];
     76   EXPECT_EQ(0U, [[view subviews] count]);
     77 }
     78 
     79 TEST_F(InfoBarContainerControllerTest, RemoveAllInfoBars) {
     80   NSView* view = [controller_ view];
     81 
     82   // Add three infobars and then remove them all.
     83   MockLinkInfoBarDelegate linkDelegate;
     84   MockConfirmInfoBarDelegate confirmDelegate, confirmDelegate2;
     85 
     86   [controller_ addInfoBar:&linkDelegate animate:NO];
     87   [controller_ addInfoBar:&confirmDelegate animate:NO];
     88   [controller_ addInfoBar:&confirmDelegate2 animate:NO];
     89   EXPECT_EQ(3U, [[view subviews] count]);
     90 
     91   [controller_ removeAllInfoBars];
     92   EXPECT_EQ(0U, [[view subviews] count]);
     93 }
     94 }  // namespace
     95