OLD | NEW |
| (Empty) |
1 // Copyright (c) 2009 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/scoped_nsobject.h" | |
8 #import "chrome/browser/ui/cocoa/cocoa_test_helper.h" | |
9 #import "chrome/browser/ui/cocoa/find_bar_view.h" | |
10 #include "chrome/browser/ui/cocoa/test_event_utils.h" | |
11 #include "testing/gtest/include/gtest/gtest.h" | |
12 #include "testing/platform_test.h" | |
13 | |
14 @interface MouseDownViewPong : NSView { | |
15 BOOL pong_; | |
16 } | |
17 @property (nonatomic, assign) BOOL pong; | |
18 @end | |
19 | |
20 @implementation MouseDownViewPong | |
21 @synthesize pong = pong_; | |
22 - (void)mouseDown:(NSEvent*)event { | |
23 pong_ = YES; | |
24 } | |
25 @end | |
26 | |
27 | |
28 namespace { | |
29 | |
30 class FindBarViewTest : public CocoaTest { | |
31 public: | |
32 FindBarViewTest() { | |
33 NSRect frame = NSMakeRect(0, 0, 100, 30); | |
34 scoped_nsobject<FindBarView> view( | |
35 [[FindBarView alloc] initWithFrame:frame]); | |
36 view_ = view.get(); | |
37 [[test_window() contentView] addSubview:view_]; | |
38 } | |
39 | |
40 FindBarView* view_; | |
41 }; | |
42 | |
43 TEST_VIEW(FindBarViewTest, view_) | |
44 | |
45 TEST_F(FindBarViewTest, FindBarEatsMouseClicksInBackgroundArea) { | |
46 scoped_nsobject<MouseDownViewPong> pongView( | |
47 [[MouseDownViewPong alloc] initWithFrame:NSMakeRect(0, 0, 200, 200)]); | |
48 | |
49 // Remove all of the subviews of the findbar, to make sure we don't | |
50 // accidentally hit a subview when trying to simulate a click in the | |
51 // background area. | |
52 [view_ setSubviews:[NSArray array]]; | |
53 [view_ setFrame:NSMakeRect(0, 0, 200, 200)]; | |
54 | |
55 // Add the pong view as a sibling of the findbar. | |
56 [[test_window() contentView] addSubview:pongView.get() | |
57 positioned:NSWindowBelow | |
58 relativeTo:view_]; | |
59 | |
60 // Synthesize a mousedown event and send it to the window. The event is | |
61 // placed in the center of the find bar. | |
62 NSPoint pointInCenterOfFindBar = NSMakePoint(100, 100); | |
63 [pongView setPong:NO]; | |
64 [test_window() | |
65 sendEvent:test_event_utils::LeftMouseDownAtPoint(pointInCenterOfFindBar)]; | |
66 // Click gets eaten by findbar, not passed through to underlying view. | |
67 EXPECT_FALSE([pongView pong]); | |
68 } | |
69 | |
70 TEST_F(FindBarViewTest, FindBarPassesThroughClicksInTransparentArea) { | |
71 scoped_nsobject<MouseDownViewPong> pongView( | |
72 [[MouseDownViewPong alloc] initWithFrame:NSMakeRect(0, 0, 200, 200)]); | |
73 [view_ setFrame:NSMakeRect(0, 0, 200, 200)]; | |
74 | |
75 // Add the pong view as a sibling of the findbar. | |
76 [[test_window() contentView] addSubview:pongView.get() | |
77 positioned:NSWindowBelow | |
78 relativeTo:view_]; | |
79 | |
80 // Synthesize a mousedown event and send it to the window. The event is inset | |
81 // a few pixels from the lower left corner of the window, which places it in | |
82 // the transparent area surrounding the findbar. | |
83 NSPoint pointInTransparentArea = NSMakePoint(2, 2); | |
84 [pongView setPong:NO]; | |
85 [test_window() | |
86 sendEvent:test_event_utils::LeftMouseDownAtPoint(pointInTransparentArea)]; | |
87 // Click is ignored by findbar, passed through to underlying view. | |
88 EXPECT_TRUE([pongView pong]); | |
89 } | |
90 } // namespace | |
OLD | NEW |