OLD | NEW |
| (Empty) |
1 // Copyright (c) 2010 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 <Cocoa/Cocoa.h> | |
6 | |
7 #import "chrome/browser/browser_window.h" | |
8 #include "chrome/browser/tab_contents/tab_contents.h" | |
9 #include "chrome/browser/renderer_host/site_instance.h" | |
10 #include "chrome/browser/ui/cocoa/browser_test_helper.h" | |
11 #import "chrome/browser/ui/cocoa/cocoa_test_helper.h" | |
12 #import "chrome/browser/ui/cocoa/new_tab_button.h" | |
13 #import "chrome/browser/ui/cocoa/tab_strip_controller.h" | |
14 #import "chrome/browser/ui/cocoa/tab_strip_view.h" | |
15 #include "chrome/browser/ui/tab_contents/tab_contents_wrapper.h" | |
16 #include "testing/gtest/include/gtest/gtest.h" | |
17 #include "testing/platform_test.h" | |
18 | |
19 @interface TestTabStripControllerDelegate : | |
20 NSObject<TabStripControllerDelegate> { | |
21 } | |
22 @end | |
23 | |
24 @implementation TestTabStripControllerDelegate | |
25 - (void)onSelectTabWithContents:(TabContents*)contents { | |
26 } | |
27 - (void)onReplaceTabWithContents:(TabContents*)contents { | |
28 } | |
29 - (void)onSelectedTabChange:(TabStripModelObserver::TabChangeType)change { | |
30 } | |
31 - (void)onTabDetachedWithContents:(TabContents*)contents { | |
32 } | |
33 @end | |
34 | |
35 namespace { | |
36 | |
37 // Stub model delegate | |
38 class TestTabStripDelegate : public TabStripModelDelegate { | |
39 public: | |
40 virtual TabContentsWrapper* AddBlankTab(bool foreground) { | |
41 return NULL; | |
42 } | |
43 virtual TabContentsWrapper* AddBlankTabAt(int index, bool foreground) { | |
44 return NULL; | |
45 } | |
46 virtual Browser* CreateNewStripWithContents(TabContentsWrapper* contents, | |
47 const gfx::Rect& window_bounds, | |
48 const DockInfo& dock_info, | |
49 bool maximize) { | |
50 return NULL; | |
51 } | |
52 virtual void ContinueDraggingDetachedTab(TabContentsWrapper* contents, | |
53 const gfx::Rect& window_bounds, | |
54 const gfx::Rect& tab_bounds) { | |
55 } | |
56 virtual int GetDragActions() const { | |
57 return 0; | |
58 } | |
59 virtual TabContentsWrapper* CreateTabContentsForURL( | |
60 const GURL& url, | |
61 const GURL& referrer, | |
62 Profile* profile, | |
63 PageTransition::Type transition, | |
64 bool defer_load, | |
65 SiteInstance* instance) const { | |
66 return NULL; | |
67 } | |
68 virtual bool CanDuplicateContentsAt(int index) { return true; } | |
69 virtual void DuplicateContentsAt(int index) { } | |
70 virtual void CloseFrameAfterDragSession() { } | |
71 virtual void CreateHistoricalTab(TabContentsWrapper* contents) { } | |
72 virtual bool RunUnloadListenerBeforeClosing(TabContentsWrapper* contents) { | |
73 return true; | |
74 } | |
75 virtual bool CanRestoreTab() { | |
76 return true; | |
77 } | |
78 virtual void RestoreTab() {} | |
79 | |
80 virtual bool CanCloseContentsAt(int index) { return true; } | |
81 | |
82 virtual bool CanBookmarkAllTabs() const { return false; } | |
83 | |
84 virtual bool CanCloseTab() const { return true; } | |
85 | |
86 virtual void BookmarkAllTabs() {} | |
87 | |
88 virtual bool UseVerticalTabs() const { return false; } | |
89 | |
90 virtual void ToggleUseVerticalTabs() {} | |
91 | |
92 virtual bool LargeIconsPermitted() const { return true; } | |
93 }; | |
94 | |
95 class TabStripControllerTest : public CocoaTest { | |
96 public: | |
97 TabStripControllerTest() { | |
98 Browser* browser = browser_helper_.browser(); | |
99 BrowserWindow* browser_window = browser_helper_.CreateBrowserWindow(); | |
100 NSWindow* window = browser_window->GetNativeHandle(); | |
101 NSView* parent = [window contentView]; | |
102 NSRect content_frame = [parent frame]; | |
103 | |
104 // Create the "switch view" (view that gets changed out when a tab | |
105 // switches). | |
106 NSRect switch_frame = NSMakeRect(0, 0, content_frame.size.width, 500); | |
107 scoped_nsobject<NSView> switch_view( | |
108 [[NSView alloc] initWithFrame:switch_frame]); | |
109 [parent addSubview:switch_view.get()]; | |
110 | |
111 // Create the tab strip view. It's expected to have a child button in it | |
112 // already as the "new tab" button so create that too. | |
113 NSRect strip_frame = NSMakeRect(0, NSMaxY(switch_frame), | |
114 content_frame.size.width, 30); | |
115 scoped_nsobject<TabStripView> tab_strip( | |
116 [[TabStripView alloc] initWithFrame:strip_frame]); | |
117 [parent addSubview:tab_strip.get()]; | |
118 NSRect button_frame = NSMakeRect(0, 0, 15, 15); | |
119 scoped_nsobject<NewTabButton> new_tab_button( | |
120 [[NewTabButton alloc] initWithFrame:button_frame]); | |
121 [tab_strip addSubview:new_tab_button.get()]; | |
122 [tab_strip setNewTabButton:new_tab_button.get()]; | |
123 | |
124 delegate_.reset(new TestTabStripDelegate()); | |
125 model_ = browser->tabstrip_model(); | |
126 controller_delegate_.reset([TestTabStripControllerDelegate alloc]); | |
127 controller_.reset([[TabStripController alloc] | |
128 initWithView:static_cast<TabStripView*>(tab_strip.get()) | |
129 switchView:switch_view.get() | |
130 browser:browser | |
131 delegate:controller_delegate_.get()]); | |
132 } | |
133 | |
134 virtual void TearDown() { | |
135 browser_helper_.CloseBrowserWindow(); | |
136 // The call to CocoaTest::TearDown() deletes the Browser and TabStripModel | |
137 // objects, so we first have to delete the controller, which refers to them. | |
138 controller_.reset(nil); | |
139 model_ = NULL; | |
140 CocoaTest::TearDown(); | |
141 } | |
142 | |
143 BrowserTestHelper browser_helper_; | |
144 scoped_ptr<TestTabStripDelegate> delegate_; | |
145 TabStripModel* model_; | |
146 scoped_nsobject<TestTabStripControllerDelegate> controller_delegate_; | |
147 scoped_nsobject<TabStripController> controller_; | |
148 }; | |
149 | |
150 // Test adding and removing tabs and making sure that views get added to | |
151 // the tab strip. | |
152 TEST_F(TabStripControllerTest, AddRemoveTabs) { | |
153 EXPECT_TRUE(model_->empty()); | |
154 SiteInstance* instance = | |
155 SiteInstance::CreateSiteInstance(browser_helper_.profile()); | |
156 TabContentsWrapper* tab_contents = | |
157 Browser::TabContentsFactory(browser_helper_.profile(), instance, | |
158 MSG_ROUTING_NONE, NULL, NULL); | |
159 model_->AppendTabContents(tab_contents, true); | |
160 EXPECT_EQ(model_->count(), 1); | |
161 } | |
162 | |
163 TEST_F(TabStripControllerTest, SelectTab) { | |
164 // TODO(pinkerton): Implement http://crbug.com/10899 | |
165 } | |
166 | |
167 TEST_F(TabStripControllerTest, RearrangeTabs) { | |
168 // TODO(pinkerton): Implement http://crbug.com/10899 | |
169 } | |
170 | |
171 // Test that changing the number of tabs broadcasts a | |
172 // kTabStripNumberOfTabsChanged notifiction. | |
173 TEST_F(TabStripControllerTest, Notifications) { | |
174 // TODO(pinkerton): Implement http://crbug.com/10899 | |
175 } | |
176 | |
177 } // namespace | |
OLD | NEW |