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

Unified Diff: ui/base/cocoa/events_mac_unittest.mm

Issue 8953037: Aura needs event translation for Mac (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 9 years 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: ui/base/cocoa/events_mac_unittest.mm
diff --git a/ui/base/cocoa/events_mac_unittest.mm b/ui/base/cocoa/events_mac_unittest.mm
new file mode 100644
index 0000000000000000000000000000000000000000..7844bd939bb475a3f22025b0f0dc1d01b987b06c
--- /dev/null
+++ b/ui/base/cocoa/events_mac_unittest.mm
@@ -0,0 +1,348 @@
+// 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.
+
+#import <AppKit/NSEvent.h>
+
+#include "testing/gtest/include/gtest/gtest.h"
+#include "ui/base/events.h"
+#import "ui/base/test/ui_cocoa_test_helper.h"
+#include "ui/gfx/point.h"
+
+namespace {
+
+class EventsMacTest : public ui::CocoaTest {
+ public:
+ EventsMacTest() {}
+
+ private:
+ DISALLOW_COPY_AND_ASSIGN(EventsMacTest);
+};
+
+// Utility for creating a mouse event.
+NSEvent* MouseEventWithType(NSEventType event_type) {
+ return [NSEvent mouseEventWithType:event_type
Nico 2011/12/19 20:54:49 This looks a lot like the stuff in ui/base/test/co
dhollowa 2011/12/19 23:19:11 Done. Yes, I've consolidated these with those and
+ location:NSZeroPoint
+ modifierFlags:0
+ timestamp:[NSDate timeIntervalSinceReferenceDate]
+ windowNumber:0
+ context:nil
+ eventNumber:0
+ clickCount:1
+ pressure:0.0f];
+}
+
+// Utility for creating a key event.
+NSEvent* KeyEventWithType(NSEventType event_type, NSUInteger modifiers) {
+ return [NSEvent keyEventWithType:event_type
+ location:NSZeroPoint
+ modifierFlags:modifiers
+ timestamp:[NSDate timeIntervalSinceReferenceDate]
+ windowNumber:0
+ context:nil
+ characters:@"x"
+ charactersIgnoringModifiers:@"x"
+ isARepeat:NO
+ keyCode:0x78];
+}
+
+// Utility for creating an enter/exit event.
+NSEvent* EnterExitEventWithType(NSEventType event_type) {
+ return [NSEvent enterExitEventWithType:event_type
+ location:NSZeroPoint
+ modifierFlags:0
+ timestamp:[NSDate timeIntervalSinceReferenceDate]
+ windowNumber:0
+ context:nil
+ eventNumber:0
+ trackingNumber:0
+ userData:NULL];
+}
+
+// Utility for creating an "other" event.
+NSEvent* OtherEventWithType(NSEventType event_type) {
+ return [NSEvent otherEventWithType:event_type
+ location:NSZeroPoint
+ modifierFlags:0
+ timestamp:[NSDate timeIntervalSinceReferenceDate]
+ windowNumber:0
+ context:nil
+ subtype:0
+ data1:0
+ data2:0];
+}
+
+TEST_F(EventsMacTest, EventTypeFromNative) {
+ NSEvent* native_event = nil;
+ ui::EventType type = ui::ET_UNKNOWN;
+
+ native_event = MouseEventWithType(NSLeftMouseDown);
+ type = ui::EventTypeFromNative(native_event);
+ EXPECT_EQ(ui::ET_MOUSE_PRESSED, type);
+
+ native_event = MouseEventWithType(NSLeftMouseUp);
+ type = ui::EventTypeFromNative(native_event);
+ EXPECT_EQ(ui::ET_MOUSE_RELEASED, type);
+
+ native_event = MouseEventWithType(NSRightMouseDown);
+ type = ui::EventTypeFromNative(native_event);
+ EXPECT_EQ(ui::ET_MOUSE_PRESSED, type);
+
+ native_event = MouseEventWithType(NSRightMouseUp);
+ type = ui::EventTypeFromNative(native_event);
+ EXPECT_EQ(ui::ET_MOUSE_RELEASED, type);
+
+ native_event = MouseEventWithType(NSMouseMoved);
+ type = ui::EventTypeFromNative(native_event);
+ EXPECT_EQ(ui::ET_MOUSE_MOVED, type);
+
+ native_event = MouseEventWithType(NSLeftMouseDragged);
+ type = ui::EventTypeFromNative(native_event);
+ EXPECT_EQ(ui::ET_MOUSE_DRAGGED, type);
+
+ native_event = MouseEventWithType(NSRightMouseDragged);
+ type = ui::EventTypeFromNative(native_event);
+ EXPECT_EQ(ui::ET_MOUSE_DRAGGED, type);
+
+ native_event = EnterExitEventWithType(NSMouseEntered);
+ type = ui::EventTypeFromNative(native_event);
+ EXPECT_EQ(ui::ET_MOUSE_ENTERED, type);
+
+ native_event = EnterExitEventWithType(NSMouseExited);
+ type = ui::EventTypeFromNative(native_event);
+ EXPECT_EQ(ui::ET_MOUSE_EXITED, type);
+
+ native_event = KeyEventWithType(NSKeyDown, 0);
+ type = ui::EventTypeFromNative(native_event);
+ EXPECT_EQ(ui::ET_KEY_PRESSED, type);
+
+ native_event = KeyEventWithType(NSKeyUp, 0);
+ type = ui::EventTypeFromNative(native_event);
+ EXPECT_EQ(ui::ET_KEY_RELEASED, type);
+
+ native_event = KeyEventWithType(NSFlagsChanged, 0);
+ type = ui::EventTypeFromNative(native_event);
+ EXPECT_EQ(ui::ET_KEY_PRESSED, type);
+
+ native_event = OtherEventWithType(NSAppKitDefined);
+ type = ui::EventTypeFromNative(native_event);
+ EXPECT_EQ(ui::ET_UNKNOWN, type);
+
+ native_event = OtherEventWithType(NSSystemDefined);
+ type = ui::EventTypeFromNative(native_event);
+ EXPECT_EQ(ui::ET_UNKNOWN, type);
+
+ native_event = OtherEventWithType(NSApplicationDefined);
+ type = ui::EventTypeFromNative(native_event);
+ EXPECT_EQ(ui::ET_UNKNOWN, type);
+
+ native_event = OtherEventWithType(NSPeriodic);
+ type = ui::EventTypeFromNative(native_event);
+ EXPECT_EQ(ui::ET_UNKNOWN, type);
+
+ native_event = EnterExitEventWithType(NSCursorUpdate);
+ type = ui::EventTypeFromNative(native_event);
+ EXPECT_EQ(ui::ET_UNKNOWN, type);
+
+ native_event = MouseEventWithType(NSOtherMouseDown);
+ type = ui::EventTypeFromNative(native_event);
+ EXPECT_EQ(ui::ET_MOUSE_PRESSED, type);
+
+ native_event = MouseEventWithType(NSOtherMouseUp);
+ type = ui::EventTypeFromNative(native_event);
+ EXPECT_EQ(ui::ET_MOUSE_RELEASED, type);
+
+ native_event = MouseEventWithType(NSOtherMouseDragged);
+ type = ui::EventTypeFromNative(native_event);
+ EXPECT_EQ(ui::ET_MOUSE_DRAGGED, type);
+}
+
+TEST_F(EventsMacTest, EventFlagsFromNative) {
+ NSEvent* native_event = nil;
+ int flags = 0;
+
+ // No key flags.
+ native_event = KeyEventWithType(NSKeyDown, 0);
+ flags = ui::EventFlagsFromNative(native_event);
+ EXPECT_EQ(0, flags);
+
+ // All key flags.
+ native_event = KeyEventWithType(NSKeyDown,
+ NSAlphaShiftKeyMask |
+ NSShiftKeyMask |
+ NSControlKeyMask |
+ NSAlternateKeyMask |
+ NSCommandKeyMask);
+ flags = ui::EventFlagsFromNative(native_event);
+ EXPECT_EQ(ui::EF_CAPS_LOCK_DOWN |
+ ui::EF_SHIFT_DOWN |
+ ui::EF_CONTROL_DOWN |
+ ui::EF_ALT_DOWN |
+ ui::EF_COMMAND_DOWN,
+ flags);
+
+ // Left mouse flags.
+ native_event = MouseEventWithType(NSLeftMouseDown);
+ flags = ui::EventFlagsFromNative(native_event);
+ EXPECT_EQ(ui::EF_LEFT_BUTTON_DOWN, flags);
+
+ // Right mouse flags.
+ native_event = MouseEventWithType(NSRightMouseDown);
+ flags = ui::EventFlagsFromNative(native_event);
+ EXPECT_EQ(ui::EF_RIGHT_BUTTON_DOWN, flags);
+
+ // Center mouse flags.
+ native_event = MouseEventWithType(NSOtherMouseDown);
+ flags = ui::EventFlagsFromNative(native_event);
+ EXPECT_EQ(ui::EF_MIDDLE_BUTTON_DOWN, flags);
+}
+
+TEST_F(EventsMacTest, EventLocationFromNative) {
+ NSWindow* window = [[NSWindow alloc]
+ initWithContentRect:NSMakeRect(10, 25, 200, 205)
+ styleMask:NSTitledWindowMask
+ backing:NSBackingStoreBuffered
+ defer:NO];
+ [window orderFront:nil];
+
+ // Construct mouse event from window number having position at bottom-left.
+ // Cocoa origin is at bottom-left. ui::Event origin is top-left.
+ NSEvent* native_event =
+ [NSEvent mouseEventWithType:NSLeftMouseDown
+ location:NSMakePoint(10, 15)
+ modifierFlags:0
+ timestamp:[NSDate timeIntervalSinceReferenceDate]
+ windowNumber:[window windowNumber]
+ context:[window graphicsContext]
+ eventNumber:0
+ clickCount:1
+ pressure:0.0f];
+
+ // Expect resulting event to be positioned relative to top-left.
+ gfx::Point location = ui::EventLocationFromNative(native_event);
+ EXPECT_EQ(gfx::Point(10, 190), location);
+
+ [window orderOut:nil];
+ [window close];
+}
+
+TEST_F(EventsMacTest, KeyboardCodeFromNative) {
+ NSEvent* native_event = nil;
+ ui::KeyboardCode code = ui::VKEY_UNKNOWN;
+
+ // Simple "x". No modifiers.
+ native_event =
+ [NSEvent keyEventWithType:NSKeyDown
+ location:NSZeroPoint
+ modifierFlags:0
+ timestamp:[NSDate timeIntervalSinceReferenceDate]
+ windowNumber:0
+ context:nil
+ characters:@"x"
+ charactersIgnoringModifiers:@"x"
+ isARepeat:NO
+ keyCode:0x58];
+ code = ui::KeyboardCodeFromNative(native_event);
+ EXPECT_EQ(ui::VKEY_X, code);
+
+ // Option/Alt "x".
+ native_event =
+ [NSEvent keyEventWithType:NSKeyDown
+ location:NSZeroPoint
+ modifierFlags:NSAlternateKeyMask
+ timestamp:[NSDate timeIntervalSinceReferenceDate]
+ windowNumber:0
+ context:nil
+ characters:@"\0x2248" // opt-x
+ charactersIgnoringModifiers:@"x"
+ isARepeat:NO
+ keyCode:0x58];
+ code = ui::KeyboardCodeFromNative(native_event);
+ EXPECT_EQ(ui::VKEY_X, code);
+
+ // Option/Alt (alone).
+ native_event =
+ [NSEvent keyEventWithType:NSFlagsChanged
+ location:NSZeroPoint
+ modifierFlags:NSAlternateKeyMask
+ timestamp:[NSDate timeIntervalSinceReferenceDate]
+ windowNumber:0
+ context:nil
+ characters:@""
+ charactersIgnoringModifiers:@""
+ isARepeat:NO
+ keyCode:0x3a];
+ code = ui::KeyboardCodeFromNative(native_event);
+ EXPECT_EQ(ui::VKEY_MENU, code);
+}
+
+TEST_F(EventsMacTest, IsMouseEvent) {
+ NSEvent* native_event = nil;
+
+ native_event = MouseEventWithType(NSLeftMouseDown);
+ EXPECT_TRUE(ui::IsMouseEvent(native_event));
+
+ native_event = MouseEventWithType(NSLeftMouseUp);
+ EXPECT_TRUE(ui::IsMouseEvent(native_event));
+
+ native_event = MouseEventWithType(NSRightMouseDown);
+ EXPECT_TRUE(ui::IsMouseEvent(native_event));
+
+ native_event = MouseEventWithType(NSRightMouseUp);
+ EXPECT_TRUE(ui::IsMouseEvent(native_event));
+
+ native_event = MouseEventWithType(NSMouseMoved);
+ EXPECT_TRUE(ui::IsMouseEvent(native_event));
+
+ native_event = MouseEventWithType(NSLeftMouseDragged);
+ EXPECT_TRUE(ui::IsMouseEvent(native_event));
+
+ native_event = MouseEventWithType(NSRightMouseDragged);
+ EXPECT_TRUE(ui::IsMouseEvent(native_event));
+
+ native_event = EnterExitEventWithType(NSMouseEntered);
+ EXPECT_TRUE(ui::IsMouseEvent(native_event));
+
+ native_event = EnterExitEventWithType(NSMouseExited);
+ EXPECT_TRUE(ui::IsMouseEvent(native_event));
+
+ native_event = KeyEventWithType(NSKeyDown, 0);
+ EXPECT_FALSE(ui::IsMouseEvent(native_event));
+
+ native_event = KeyEventWithType(NSKeyUp, 0);
+ EXPECT_FALSE(ui::IsMouseEvent(native_event));
+
+ native_event = KeyEventWithType(NSFlagsChanged, 0);
+ EXPECT_FALSE(ui::IsMouseEvent(native_event));
+
+ native_event = OtherEventWithType(NSAppKitDefined);
+ EXPECT_FALSE(ui::IsMouseEvent(native_event));
+
+ native_event = OtherEventWithType(NSSystemDefined);
+ EXPECT_FALSE(ui::IsMouseEvent(native_event));
+
+ native_event = OtherEventWithType(NSApplicationDefined);
+ EXPECT_FALSE(ui::IsMouseEvent(native_event));
+
+ native_event = OtherEventWithType(NSPeriodic);
+ EXPECT_FALSE(ui::IsMouseEvent(native_event));
+
+ native_event = EnterExitEventWithType(NSCursorUpdate);
+ EXPECT_FALSE(ui::IsMouseEvent(native_event));
+
+ native_event = MouseEventWithType(NSOtherMouseDown);
+ EXPECT_TRUE(ui::IsMouseEvent(native_event));
+
+ native_event = MouseEventWithType(NSOtherMouseUp);
+ EXPECT_TRUE(ui::IsMouseEvent(native_event));
+
+ native_event = MouseEventWithType(NSOtherMouseDragged);
+ EXPECT_TRUE(ui::IsMouseEvent(native_event));
+}
+
+TEST_F(EventsMacTest, CreateNoopEvent) {
+ NSEvent* native_event = ui::CreateNoopEvent();
+ EXPECT_TRUE(native_event != nil);
+}
Nico 2011/12/19 20:54:49 should there be a test that converts from native t
dhollowa 2011/12/19 23:19:11 The back-conversion is not used for production cod
+
+} // namespace

Powered by Google App Engine
This is Rietveld 408576698