- add sources.
[platform/framework/web/crosswalk.git] / src / ui / base / cocoa / tracking_area_unittest.mm
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/base/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