Home | History | Annotate | Download | only in cocoa
      1 // Copyright 2014 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 "ui/base/cocoa/cocoa_base_utils.h"
      6 
      7 #import <objc/objc-class.h>
      8 
      9 #include "testing/gtest/include/gtest/gtest.h"
     10 #include "testing/platform_test.h"
     11 #include "ui/events/event_constants.h"
     12 #import "ui/events/test/cocoa_test_event_utils.h"
     13 #import "ui/gfx/test/ui_cocoa_test_helper.h"
     14 
     15 // We provide a donor class with a specially modified |modifierFlags|
     16 // implementation that we swap with NSEvent's. This is because we can't create a
     17 // NSEvent that represents a middle click with modifiers.
     18 @interface TestEvent : NSObject
     19 @end
     20 @implementation TestEvent
     21 - (NSUInteger)modifierFlags { return NSShiftKeyMask; }
     22 @end
     23 
     24 namespace ui {
     25 
     26 namespace {
     27 
     28 class CocoaBaseUtilsTest : public CocoaTest {
     29 };
     30 
     31 TEST_F(CocoaBaseUtilsTest, WindowOpenDispositionFromNSEvent) {
     32   // Left Click = same tab.
     33   NSEvent* me = cocoa_test_event_utils::MouseEventWithType(NSLeftMouseUp, 0);
     34   EXPECT_EQ(CURRENT_TAB, WindowOpenDispositionFromNSEvent(me));
     35 
     36   // Middle Click = new background tab.
     37   me = cocoa_test_event_utils::MouseEventWithType(NSOtherMouseUp, 0);
     38   EXPECT_EQ(NEW_BACKGROUND_TAB, WindowOpenDispositionFromNSEvent(me));
     39 
     40   // Shift+Middle Click = new foreground tab.
     41   {
     42     ScopedClassSwizzler swizzler([NSEvent class], [TestEvent class],
     43                                  @selector(modifierFlags));
     44     me = cocoa_test_event_utils::MouseEventWithType(NSOtherMouseUp,
     45                                                     NSShiftKeyMask);
     46     EXPECT_EQ(NEW_FOREGROUND_TAB, WindowOpenDispositionFromNSEvent(me));
     47   }
     48 
     49   // Cmd+Left Click = new background tab.
     50   me = cocoa_test_event_utils::MouseEventWithType(NSLeftMouseUp,
     51                                                   NSCommandKeyMask);
     52   EXPECT_EQ(NEW_BACKGROUND_TAB, WindowOpenDispositionFromNSEvent(me));
     53 
     54   // Cmd+Shift+Left Click = new foreground tab.
     55   me = cocoa_test_event_utils::MouseEventWithType(NSLeftMouseUp,
     56                                               NSCommandKeyMask |
     57                                               NSShiftKeyMask);
     58   EXPECT_EQ(NEW_FOREGROUND_TAB, WindowOpenDispositionFromNSEvent(me));
     59 
     60   // Shift+Left Click = new window
     61   me = cocoa_test_event_utils::MouseEventWithType(NSLeftMouseUp,
     62                                                   NSShiftKeyMask);
     63   EXPECT_EQ(NEW_WINDOW, WindowOpenDispositionFromNSEvent(me));
     64 }
     65 
     66 }  // namespace
     67 
     68 }  // namespace ui
     69