blob: 151d03365554f142bf5d69382aab3a8c615898a0 [file] [log] [blame]
[email protected]f5558b972011-02-15 12:50:351// 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/scoped_nsobject.h"
6#include "chrome/browser/ui/cocoa/cocoa_test_helper.h"
7#include "chrome/browser/ui/cocoa/objc_zombie.h"
8#import "chrome/browser/ui/cocoa/tracking_area.h"
9
10// A test object that counts the number of times a message is sent to it.
11@interface TestTrackingAreaOwner : NSObject {
12 @private
13 NSUInteger messageCount_;
14}
15@property(nonatomic, assign) NSUInteger messageCount;
16- (void)performMessage;
17@end
18
19@implementation TestTrackingAreaOwner
20@synthesize messageCount = messageCount_;
21- (void)performMessage {
22 ++messageCount_;
23}
24@end
25
26class CrTrackingAreaTest : public CocoaTest {
27 public:
28 CrTrackingAreaTest()
29 : owner_([[TestTrackingAreaOwner alloc] init]),
30 trackingArea_([[CrTrackingArea alloc]
31 initWithRect:NSMakeRect(0, 0, 100, 100)
32 options:NSTrackingMouseMoved | NSTrackingActiveInKeyWindow
33 owner:owner_.get()
34 userInfo:nil]) {
35 }
36
37 scoped_nsobject<TestTrackingAreaOwner> owner_;
38 scoped_nsobject<CrTrackingArea> trackingArea_;
39};
40
41TEST_F(CrTrackingAreaTest, OwnerForwards) {
42 [[trackingArea_ owner] performMessage];
43 EXPECT_EQ(1U, [owner_ messageCount]);
44
45 [[trackingArea_ owner] performMessage];
46 EXPECT_EQ(2U, [owner_ messageCount]);
47}
48
49TEST_F(CrTrackingAreaTest, OwnerStopsForwarding) {
50 [[trackingArea_ owner] performMessage];
51 EXPECT_EQ(1U, [owner_ messageCount]);
52
53 [trackingArea_ clearOwner];
54
55 [[trackingArea_ owner] performMessage];
56 EXPECT_EQ(1U, [owner_ messageCount]);
57}
58
59TEST_F(CrTrackingAreaTest, OwnerAutomaticallyStopsForwardingOnClose) {
60 [test_window() orderFront:nil];
61 [trackingArea_ clearOwnerWhenWindowWillClose:test_window()];
62
63 [[trackingArea_ owner] performMessage];
64 EXPECT_EQ(1U, [owner_ messageCount]);
65
66 [test_window() close];
67
68 [[trackingArea_ owner] performMessage];
69 EXPECT_EQ(1U, [owner_ messageCount]);
70}
71
72TEST_F(CrTrackingAreaTest, ZombieOwner) {
73 EXPECT_TRUE(ObjcEvilDoers::ZombieEnable(NO, 20));
74
75 [[trackingArea_ owner] performMessage];
76 EXPECT_EQ(1U, [owner_ messageCount]);
77
78 [owner_ shouldBecomeCrZombie];
79 owner_.reset();
80 [trackingArea_ clearOwner];
81
82 [[trackingArea_ owner] performMessage];
83 // Don't crash!
84
85 ObjcEvilDoers::ZombieDisable();
86}