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