1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134
|
// 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 <Cocoa/Cocoa.h>
#include "base/mac/scoped_nsobject.h"
#import "chrome/browser/ui/cocoa/clickhold_button_cell.h"
#import "chrome/browser/ui/cocoa/test/cocoa_test_helper.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "testing/gtest_mac.h"
#include "testing/platform_test.h"
@interface ClickHoldButtonCellTestTarget : NSObject {
@private
BOOL didOpen_;
}
- (void)open;
- (BOOL)didOpen;
@end
@implementation ClickHoldButtonCellTestTarget
- (instancetype)init {
if ((self = [super init]))
didOpen_ = NO;
return self;
}
- (void)open {
didOpen_ = YES;
}
- (BOOL)didOpen {
return didOpen_;
}
@end
namespace {
class ClickHoldButtonCellTest : public CocoaTest {
public:
ClickHoldButtonCellTest() {
NSRect frame = NSMakeRect(0, 0, 50, 30);
base::scoped_nsobject<NSButton> view(
[[NSButton alloc] initWithFrame:frame]);
view_ = view.get();
base::scoped_nsobject<ClickHoldButtonCell> cell(
[[ClickHoldButtonCell alloc] initTextCell:@"Testing"]);
[view_ setCell:cell.get()];
[[test_window() contentView] addSubview:view_];
}
NSButton* view_;
};
TEST_VIEW(ClickHoldButtonCellTest, view_)
// Test default values; make sure they are what they should be.
TEST_F(ClickHoldButtonCellTest, Defaults) {
ClickHoldButtonCell* cell = static_cast<ClickHoldButtonCell*>([view_ cell]);
ASSERT_TRUE([cell isKindOfClass:[ClickHoldButtonCell class]]);
EXPECT_FALSE([cell enableClickHold]);
NSTimeInterval clickHoldTimeout = [cell clickHoldTimeout];
EXPECT_GE(clickHoldTimeout, 0.15); // Check for a "Cocoa-ish" value.
EXPECT_LE(clickHoldTimeout, 0.35);
EXPECT_FALSE([cell trackOnlyInRect]);
EXPECT_TRUE([cell activateOnDrag]);
}
// TODO(viettrungluu): (1) Enable click-hold and figure out how to test the
// tracking loop (i.e., |-trackMouse:...|), which is the nontrivial part.
// (2) Test various initialization code paths (in particular, loading from nib).
TEST_F(ClickHoldButtonCellTest, AccessibilityShowMenu) {
ClickHoldButtonCell* cell = static_cast<ClickHoldButtonCell*>([view_ cell]);
ASSERT_TRUE([cell isKindOfClass:[ClickHoldButtonCell class]]);
ClickHoldButtonCellTestTarget* cellTarget =
[[[ClickHoldButtonCellTestTarget alloc] init] autorelease];
ASSERT_NSNE(nil, cellTarget);
ASSERT_TRUE([cellTarget respondsToSelector:@selector(open)]);
ASSERT_FALSE([cellTarget didOpen]);
[cell setEnableClickHold:NO];
NSArray* actionNames = [cell accessibilityActionNames];
EXPECT_FALSE([actionNames containsObject:NSAccessibilityShowMenuAction]);
[cell setEnableClickHold:YES];
// There is no action set.
actionNames = [cell accessibilityActionNames];
EXPECT_FALSE([actionNames containsObject:NSAccessibilityShowMenuAction]);
// clickHoldAction should be independent from accessibilityShowMenuAction
// since different operations, e.g. releasing vs. not releasing a mouse
// button, may need to be performed for each occasion.
[cell setClickHoldAction:@selector(open)];
[cell setClickHoldTarget:cellTarget];
actionNames = [cell accessibilityActionNames];
EXPECT_FALSE([actionNames containsObject:NSAccessibilityShowMenuAction]);
EXPECT_FALSE([cellTarget didOpen]);
// Even when accessibilityShowMenuAction is set, no action should be available
// if neither enableClickHold nor enableRightClickHold are true.
[cell setEnableClickHold:NO];
[cell setAccessibilityShowMenuAction:@selector(open)];
[cell setAccessibilityShowMenuTarget:cellTarget];
actionNames = [cell accessibilityActionNames];
EXPECT_FALSE([actionNames containsObject:NSAccessibilityShowMenuAction]);
// Now the action should be available.
[cell setEnableClickHold:YES];
actionNames = [cell accessibilityActionNames];
EXPECT_TRUE([actionNames containsObject:NSAccessibilityShowMenuAction]);
[cell setEnableClickHold:NO];
[cell setEnableRightClick:YES];
actionNames = [cell accessibilityActionNames];
EXPECT_TRUE([actionNames containsObject:NSAccessibilityShowMenuAction]);
[cell accessibilityPerformAction:NSAccessibilityShowMenuAction];
EXPECT_TRUE([cellTarget didOpen]);
}
} // namespace
|