Home | History | Annotate | Download | only in cocoa
      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 #include "base/mac/scoped_nsobject.h"
      6 #import "ui/base/cocoa/tracking_area.h"
      7 #import "ui/gfx/test/ui_cocoa_test_helper.h"
      8 
      9 // A test object that counts the number of times a message is sent to it.
     10 @interface TestTrackingAreaOwner : NSObject {
     11  @private
     12   NSUInteger messageCount_;
     13 }
     14 @property(nonatomic, assign) NSUInteger messageCount;
     15 - (void)performMessage;
     16 @end
     17 
     18 @implementation TestTrackingAreaOwner
     19 @synthesize messageCount = messageCount_;
     20 - (void)performMessage {
     21   ++messageCount_;
     22 }
     23 @end
     24 
     25 namespace ui {
     26 
     27 class CrTrackingAreaTest : public CocoaTest {
     28  public:
     29   CrTrackingAreaTest()
     30       : owner_([[TestTrackingAreaOwner alloc] init]),
     31         trackingArea_([[CrTrackingArea alloc]
     32             initWithRect:NSMakeRect(0, 0, 100, 100)
     33                  options:NSTrackingMouseMoved | NSTrackingActiveInKeyWindow
     34                    owner:owner_.get()
     35                 userInfo:nil]) {
     36   }
     37 
     38   base::scoped_nsobject<TestTrackingAreaOwner> owner_;
     39   base::scoped_nsobject<CrTrackingArea> trackingArea_;
     40 };
     41 
     42 TEST_F(CrTrackingAreaTest, OwnerForwards) {
     43   [[trackingArea_ owner] performMessage];
     44   EXPECT_EQ(1U, [owner_ messageCount]);
     45 
     46   [[trackingArea_ owner] performMessage];
     47   EXPECT_EQ(2U, [owner_ messageCount]);
     48 }
     49 
     50 TEST_F(CrTrackingAreaTest, OwnerStopsForwarding) {
     51   [[trackingArea_ owner] performMessage];
     52   EXPECT_EQ(1U, [owner_ messageCount]);
     53 
     54   [trackingArea_ clearOwner];
     55 
     56   [[trackingArea_ owner] performMessage];
     57   EXPECT_EQ(1U, [owner_ messageCount]);
     58 }
     59 
     60 TEST_F(CrTrackingAreaTest, OwnerAutomaticallyStopsForwardingOnClose) {
     61   [test_window() orderFront:nil];
     62   [trackingArea_ clearOwnerWhenWindowWillClose:test_window()];
     63 
     64   [[trackingArea_ owner] performMessage];
     65   EXPECT_EQ(1U, [owner_ messageCount]);
     66 
     67   [test_window() close];
     68 
     69   [[trackingArea_ owner] performMessage];
     70   EXPECT_EQ(1U, [owner_ messageCount]);
     71 }
     72 
     73 TEST_F(CrTrackingAreaTest, ScoperInit) {
     74   {
     75     ScopedCrTrackingArea scoper([trackingArea_ retain]);
     76     [[scoper.get() owner] performMessage];
     77     EXPECT_EQ(1U, [owner_ messageCount]);
     78   }
     79 
     80   [[trackingArea_ owner] performMessage];
     81   EXPECT_EQ(1U, [owner_ messageCount]);
     82 }
     83 
     84 TEST_F(CrTrackingAreaTest, ScoperReset) {
     85   {
     86     ScopedCrTrackingArea scoper;
     87     EXPECT_FALSE(scoper.get());
     88 
     89     scoper.reset([trackingArea_ retain]);
     90     [[scoper.get() owner] performMessage];
     91     EXPECT_EQ(1U, [owner_ messageCount]);
     92 
     93     [[scoper.get() owner] performMessage];
     94     EXPECT_EQ(2U, [owner_ messageCount]);
     95   }
     96 
     97   [[trackingArea_ owner] performMessage];
     98   EXPECT_EQ(2U, [owner_ messageCount]);
     99 }
    100 
    101 }  // namespace ui
    102