OLD | NEW |
1 // Copyright (c) 2009 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #import <Cocoa/Cocoa.h> | |
6 | 5 |
7 #include "base/scoped_nsobject.h" | 6 #include "base/scoped_nsobject.h" |
8 #include "chrome/app/chrome_dll_resource.h" | 7 #include "chrome/app/chrome_dll_resource.h" |
9 #import "chrome/browser/cocoa/chrome_event_processing_window.h" | 8 #import "chrome/browser/cocoa/chrome_event_processing_window.h" |
10 #import "chrome/browser/cocoa/browser_window_controller.h" | 9 #import "chrome/browser/cocoa/browser_window_controller.h" |
11 #import "chrome/browser/cocoa/browser_frame_view.h" | 10 #import "chrome/browser/cocoa/browser_frame_view.h" |
12 #import "chrome/browser/cocoa/cocoa_test_helper.h" | 11 #import "chrome/browser/cocoa/cocoa_test_helper.h" |
13 #include "testing/gtest/include/gtest/gtest.h" | |
14 #include "testing/platform_test.h" | |
15 #import "third_party/ocmock/OCMock/OCMock.h" | 12 #import "third_party/ocmock/OCMock/OCMock.h" |
16 | 13 |
17 namespace { | 14 namespace { |
18 | 15 |
19 NSEvent* KeyEvent(const NSUInteger flags, const NSUInteger keyCode) { | 16 NSEvent* KeyEvent(const NSUInteger flags, const NSUInteger keyCode) { |
20 return [NSEvent keyEventWithType:NSKeyDown | 17 return [NSEvent keyEventWithType:NSKeyDown |
21 location:NSZeroPoint | 18 location:NSZeroPoint |
22 modifierFlags:flags | 19 modifierFlags:flags |
23 timestamp:0.0 | 20 timestamp:0.0 |
24 windowNumber:0 | 21 windowNumber:0 |
25 context:nil | 22 context:nil |
26 characters:@"" | 23 characters:@"" |
27 charactersIgnoringModifiers:@"" | 24 charactersIgnoringModifiers:@"" |
28 isARepeat:NO | 25 isARepeat:NO |
29 keyCode:keyCode]; | 26 keyCode:keyCode]; |
30 } | 27 } |
31 | 28 |
32 class ChromeEventProcessingWindowTest : public PlatformTest { | 29 class ChromeEventProcessingWindowTest : public CocoaTest { |
33 public: | 30 public: |
34 ChromeEventProcessingWindowTest() { | 31 virtual void SetUp() { |
| 32 CocoaTest::SetUp(); |
35 // Create a window. | 33 // Create a window. |
36 const NSUInteger mask = NSTitledWindowMask | NSClosableWindowMask | | 34 const NSUInteger mask = NSTitledWindowMask | NSClosableWindowMask | |
37 NSMiniaturizableWindowMask | NSResizableWindowMask; | 35 NSMiniaturizableWindowMask | NSResizableWindowMask; |
38 window_.reset([[ChromeEventProcessingWindow alloc] | 36 window_ = [[ChromeEventProcessingWindow alloc] |
39 initWithContentRect:NSMakeRect(0, 0, 800, 600) | 37 initWithContentRect:NSMakeRect(0, 0, 800, 600) |
40 styleMask:mask | 38 styleMask:mask |
41 backing:NSBackingStoreBuffered | 39 backing:NSBackingStoreBuffered |
42 defer:NO]); | 40 defer:NO]; |
43 if (DebugUtil::BeingDebugged()) { | 41 if (DebugUtil::BeingDebugged()) { |
44 [window_ orderFront:nil]; | 42 [window_ orderFront:nil]; |
45 } else { | 43 } else { |
46 [window_ orderBack:nil]; | 44 [window_ orderBack:nil]; |
47 } | 45 } |
48 } | 46 } |
49 | 47 |
| 48 virtual void TearDown() { |
| 49 [window_ close]; |
| 50 CocoaTest::TearDown(); |
| 51 } |
| 52 |
50 // Returns a canonical snapshot of the window. | 53 // Returns a canonical snapshot of the window. |
51 NSData* WindowContentsAsTIFF() { | 54 NSData* WindowContentsAsTIFF() { |
52 NSRect frame([window_ frame]); | 55 NSRect frame([window_ frame]); |
53 frame.origin = [window_ convertScreenToBase:frame.origin]; | 56 frame.origin = [window_ convertScreenToBase:frame.origin]; |
54 | 57 |
55 NSData* pdfData = [window_ dataWithPDFInsideRect:frame]; | 58 NSData* pdfData = [window_ dataWithPDFInsideRect:frame]; |
56 | 59 |
57 // |pdfData| can differ for windows which look the same, so make it | 60 // |pdfData| can differ for windows which look the same, so make it |
58 // canonical. | 61 // canonical. |
59 NSImage* image = [[[NSImage alloc] initWithData:pdfData] autorelease]; | 62 NSImage* image = [[[NSImage alloc] initWithData:pdfData] autorelease]; |
60 return [image TIFFRepresentation]; | 63 return [image TIFFRepresentation]; |
61 } | 64 } |
62 | 65 |
63 CocoaNoWindowTestHelper cocoa_helper_; | 66 ChromeEventProcessingWindow* window_; |
64 scoped_nsobject<ChromeEventProcessingWindow> window_; | |
65 }; | 67 }; |
66 | 68 |
67 // Verify that the window intercepts a particular key event and | 69 // Verify that the window intercepts a particular key event and |
68 // forwards it to [delegate executeCommand:]. Assume that other | 70 // forwards it to [delegate executeCommand:]. Assume that other |
69 // CommandForKeyboardShortcut() will work the same for the rest. | 71 // CommandForKeyboardShortcut() will work the same for the rest. |
70 TEST_F(ChromeEventProcessingWindowTest, | 72 TEST_F(ChromeEventProcessingWindowTest, |
71 PerformKeyEquivalentForwardToExecuteCommand) { | 73 PerformKeyEquivalentForwardToExecuteCommand) { |
72 NSEvent* event = KeyEvent(NSCommandKeyMask, kVK_ANSI_1); | 74 NSEvent* event = KeyEvent(NSCommandKeyMask, kVK_ANSI_1); |
73 | 75 |
74 id delegate = [OCMockObject mockForClass:[BrowserWindowController class]]; | 76 id delegate = [OCMockObject mockForClass:[BrowserWindowController class]]; |
(...skipping 25 matching lines...) Expand all Loading... |
100 isKindOfClass:[BrowserWindowController class]]; | 102 isKindOfClass:[BrowserWindowController class]]; |
101 | 103 |
102 [window_ setDelegate:delegate]; | 104 [window_ setDelegate:delegate]; |
103 [window_ performKeyEquivalent:event]; | 105 [window_ performKeyEquivalent:event]; |
104 | 106 |
105 // Don't wish to mock all the way down... | 107 // Don't wish to mock all the way down... |
106 [window_ setDelegate:nil]; | 108 [window_ setDelegate:nil]; |
107 [delegate verify]; | 109 [delegate verify]; |
108 } | 110 } |
109 | 111 |
110 | |
111 } // namespace | 112 } // namespace |
OLD | NEW |