Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(7835)

Unified Diff: chrome/browser/ui/cocoa/tracking_area_unittest.mm

Issue 6486002: [Mac] Create CrTrackingArea and use it in TabStripController. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Address comments Created 9 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/ui/cocoa/tracking_area_unittest.mm
diff --git a/chrome/browser/ui/cocoa/tracking_area_unittest.mm b/chrome/browser/ui/cocoa/tracking_area_unittest.mm
new file mode 100644
index 0000000000000000000000000000000000000000..151d03365554f142bf5d69382aab3a8c615898a0
--- /dev/null
+++ b/chrome/browser/ui/cocoa/tracking_area_unittest.mm
@@ -0,0 +1,86 @@
+// Copyright (c) 2011 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.
+
+#include "base/scoped_nsobject.h"
+#include "chrome/browser/ui/cocoa/cocoa_test_helper.h"
+#include "chrome/browser/ui/cocoa/objc_zombie.h"
+#import "chrome/browser/ui/cocoa/tracking_area.h"
+
+// A test object that counts the number of times a message is sent to it.
+@interface TestTrackingAreaOwner : NSObject {
+ @private
+ NSUInteger messageCount_;
+}
+@property(nonatomic, assign) NSUInteger messageCount;
+- (void)performMessage;
+@end
+
+@implementation TestTrackingAreaOwner
+@synthesize messageCount = messageCount_;
+- (void)performMessage {
+ ++messageCount_;
+}
+@end
+
+class CrTrackingAreaTest : public CocoaTest {
+ public:
+ CrTrackingAreaTest()
+ : owner_([[TestTrackingAreaOwner alloc] init]),
+ trackingArea_([[CrTrackingArea alloc]
+ initWithRect:NSMakeRect(0, 0, 100, 100)
+ options:NSTrackingMouseMoved | NSTrackingActiveInKeyWindow
+ owner:owner_.get()
+ userInfo:nil]) {
+ }
+
+ scoped_nsobject<TestTrackingAreaOwner> owner_;
+ scoped_nsobject<CrTrackingArea> trackingArea_;
+};
+
+TEST_F(CrTrackingAreaTest, OwnerForwards) {
+ [[trackingArea_ owner] performMessage];
+ EXPECT_EQ(1U, [owner_ messageCount]);
+
+ [[trackingArea_ owner] performMessage];
+ EXPECT_EQ(2U, [owner_ messageCount]);
+}
+
+TEST_F(CrTrackingAreaTest, OwnerStopsForwarding) {
+ [[trackingArea_ owner] performMessage];
+ EXPECT_EQ(1U, [owner_ messageCount]);
+
+ [trackingArea_ clearOwner];
+
+ [[trackingArea_ owner] performMessage];
+ EXPECT_EQ(1U, [owner_ messageCount]);
+}
+
+TEST_F(CrTrackingAreaTest, OwnerAutomaticallyStopsForwardingOnClose) {
+ [test_window() orderFront:nil];
+ [trackingArea_ clearOwnerWhenWindowWillClose:test_window()];
+
+ [[trackingArea_ owner] performMessage];
+ EXPECT_EQ(1U, [owner_ messageCount]);
+
+ [test_window() close];
+
+ [[trackingArea_ owner] performMessage];
+ EXPECT_EQ(1U, [owner_ messageCount]);
+}
+
+TEST_F(CrTrackingAreaTest, ZombieOwner) {
Scott Hess - ex-Googler 2011/05/28 00:00:33 Apologies for not catching this when first reviewe
+ EXPECT_TRUE(ObjcEvilDoers::ZombieEnable(NO, 20));
+
+ [[trackingArea_ owner] performMessage];
+ EXPECT_EQ(1U, [owner_ messageCount]);
+
+ [owner_ shouldBecomeCrZombie];
+ owner_.reset();
+ [trackingArea_ clearOwner];
+
+ [[trackingArea_ owner] performMessage];
+ // Don't crash!
+
+ ObjcEvilDoers::ZombieDisable();
+}

Powered by Google App Engine
This is Rietveld 408576698