Index: chrome/browser/cocoa/tab_view_picker_table_unittest.mm |
diff --git a/chrome/browser/cocoa/tab_view_picker_table_unittest.mm b/chrome/browser/cocoa/tab_view_picker_table_unittest.mm |
new file mode 100644 |
index 0000000000000000000000000000000000000000..7c141d07a67c632efe49e18a05508f202f4bdfa9 |
--- /dev/null |
+++ b/chrome/browser/cocoa/tab_view_picker_table_unittest.mm |
@@ -0,0 +1,116 @@ |
+// Copyright (c) 2010 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> |
+ |
+#import "chrome/browser/cocoa/tab_view_picker_table.h" |
+ |
+#include "base/scoped_nsobject.h" |
+#import "chrome/browser/cocoa/cocoa_test_helper.h" |
+#include "testing/gtest/include/gtest/gtest.h" |
+#include "testing/platform_test.h" |
+ |
+@interface TabViewPickerTableTestPing : NSObject { |
+ @public |
+ BOOL didSelectItemCalled_; |
+} |
+@end |
+ |
+@implementation TabViewPickerTableTestPing |
+- (void) tabView:(NSTabView*)tabView |
+ didSelectTabViewItem:(NSTabViewItem*)tabViewItem { |
+ didSelectItemCalled_ = YES; |
+} |
+@end |
+ |
+namespace { |
+ |
+class TabViewPickerTableTest : public CocoaTest { |
+ public: |
+ TabViewPickerTableTest() { |
+ // Initialize picker table. |
+ NSRect frame = NSMakeRect(0, 0, 30, 50); |
+ scoped_nsobject<TabViewPickerTable> view( |
+ [[TabViewPickerTable alloc] initWithFrame:frame]); |
+ view_ = view.get(); |
+ [view_ setAllowsEmptySelection:NO]; |
+ [view_ setAllowsMultipleSelection:NO]; |
+ [view_ addTableColumn:[[NSTableColumn alloc] initWithIdentifier:nil]]; |
+ [[test_window() contentView] addSubview:view_]; |
+ |
+ // Initialize source tab view, with delegate. |
+ frame = NSMakeRect(30, 0, 50, 50); |
+ scoped_nsobject<NSTabView> tabView( |
+ [[NSTabView alloc] initWithFrame:frame]); |
+ tabView_ = tabView.get(); |
+ |
+ scoped_nsobject<NSTabViewItem> item1( |
+ [[NSTabViewItem alloc] initWithIdentifier:nil]); |
+ [item1 setLabel:@"label 1"]; |
+ [tabView_ addTabViewItem:item1]; |
+ |
+ scoped_nsobject<NSTabViewItem> item2( |
+ [[NSTabViewItem alloc] initWithIdentifier:nil]); |
+ [item2 setLabel:@"label 2"]; |
+ [tabView_ addTabViewItem:item2]; |
+ |
+ [tabView_ selectTabViewItemAtIndex:1]; |
+ [[test_window() contentView] addSubview:tabView_]; |
+ |
+ ping_.reset([TabViewPickerTableTestPing new]); |
+ [tabView_ setDelegate:ping_.get()]; |
+ |
+ // Simulate nib loading. |
+ view_->tabView_ = tabView_; |
+ [view_ awakeFromNib]; |
+ } |
+ |
+ TabViewPickerTable* view_; |
+ NSTabView* tabView_; |
+ scoped_nsobject<TabViewPickerTableTestPing> ping_; |
+}; |
+ |
+TEST_VIEW(TabViewPickerTableTest, view_) |
+ |
+TEST_F(TabViewPickerTableTest, TestInitialSelectionCorrect) { |
+NSLog(@"%d %@", [view_ selectedRow], [view_ selectedRowIndexes]); |
+ EXPECT_EQ(1, [view_ selectedRow]); |
+} |
+ |
+TEST_F(TabViewPickerTableTest, TestSelectionUpdates) { |
+ [tabView_ selectTabViewItemAtIndex:0]; |
+ EXPECT_EQ(0, [view_ selectedRow]); |
+ |
+ [tabView_ selectTabViewItemAtIndex:1]; |
+ EXPECT_EQ(1, [view_ selectedRow]); |
+} |
+ |
+TEST_F(TabViewPickerTableTest, TestDelegateStillWorks) { |
+ EXPECT_FALSE(ping_.get()->didSelectItemCalled_); |
+ [tabView_ selectTabViewItemAtIndex:0]; |
+ EXPECT_TRUE(ping_.get()->didSelectItemCalled_); |
+} |
+ |
+TEST_F(TabViewPickerTableTest, RowsCorrect) { |
+ EXPECT_EQ(2, [view_ numberOfRows]); |
+ EXPECT_EQ(2, [[view_ dataSource] numberOfRowsInTableView:view_]); |
+ |
+ EXPECT_TRUE([@"label 1" isEqualToString:[[view_ dataSource] |
+ tableView:view_ |
+ objectValueForTableColumn:nil // ignored |
+ row:0]]); |
+ EXPECT_TRUE([@"label 2" isEqualToString:[[view_ dataSource] |
+ tableView:view_ |
+ objectValueForTableColumn:nil // ignored |
+ row:1]]); |
+} |
+ |
+TEST_F(TabViewPickerTableTest, TestListUpdatesTabView) { |
+ [view_ selectRowIndexes:[NSIndexSet indexSetWithIndex:0] |
+ byExtendingSelection:NO]; |
+ EXPECT_EQ(0, [view_ selectedRow]); // sanity |
+ EXPECT_EQ(0, [tabView_ indexOfTabViewItem:[tabView_ selectedTabViewItem]]); |
+} |
+ |
+} // namespace |