Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(166)

Side by Side Diff: ui/views/focus/focus_manager_unittest.cc

Issue 12225042: Remove NativeTabbedPane[Win|Wrapper]; promote Views impl. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Rewrite a good portion of TabbedPane. Created 7 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include <utility> 5 #include <utility>
6 #include <vector> 6 #include <vector>
7 7
8 #include "base/utf_string_conversions.h" 8 #include "base/utf_string_conversions.h"
9 #include "ui/base/accelerators/accelerator.h" 9 #include "ui/base/accelerators/accelerator.h"
10 #include "ui/base/keycodes/keyboard_codes.h" 10 #include "ui/base/keycodes/keyboard_codes.h"
11 #include "ui/views/controls/button/text_button.h" 11 #include "ui/views/controls/button/text_button.h"
12 #include "ui/views/controls/textfield/textfield.h" 12 #include "ui/views/controls/textfield/textfield.h"
13 #include "ui/views/focus/accelerator_handler.h" 13 #include "ui/views/focus/accelerator_handler.h"
14 #include "ui/views/focus/focus_manager_factory.h" 14 #include "ui/views/focus/focus_manager_factory.h"
15 #include "ui/views/focus/focus_manager_test.h" 15 #include "ui/views/focus/focus_manager_test.h"
16 #include "ui/views/focus/widget_focus_manager.h" 16 #include "ui/views/focus/widget_focus_manager.h"
17 #include "ui/views/widget/widget.h" 17 #include "ui/views/widget/widget.h"
18 18
19 #if defined(USE_AURA) 19 #if defined(USE_AURA)
20 #include "ui/aura/client/focus_client.h" 20 #include "ui/aura/client/focus_client.h"
21 #include "ui/aura/window.h" 21 #include "ui/aura/window.h"
22 #else
23 #include "ui/views/controls/tabbed_pane/native_tabbed_pane_wrapper.h"
24 #include "ui/views/controls/tabbed_pane/tabbed_pane.h"
25 #endif 22 #endif
26 23
27 namespace views { 24 namespace views {
28 25
29 void FocusNativeView(gfx::NativeView view) { 26 void FocusNativeView(gfx::NativeView view) {
30 #if defined(USE_AURA) 27 #if defined(USE_AURA)
31 aura::client::GetFocusClient(view)->FocusWindow(view); 28 aura::client::GetFocusClient(view)->FocusWindow(view);
32 #elif defined(OS_WIN) 29 #elif defined(OS_WIN)
33 SetFocus(view); 30 SetFocus(view);
34 #else 31 #else
(...skipping 133 matching lines...) Expand 10 before | Expand all | Expand 10 after
168 165
169 #if !defined(USE_AURA) 166 #if !defined(USE_AURA)
170 class TestTextfield : public Textfield { 167 class TestTextfield : public Textfield {
171 public: 168 public:
172 TestTextfield() {} 169 TestTextfield() {}
173 virtual gfx::NativeView TestGetNativeControlView() { 170 virtual gfx::NativeView TestGetNativeControlView() {
174 return native_wrapper_->GetTestingHandle(); 171 return native_wrapper_->GetTestingHandle();
175 } 172 }
176 }; 173 };
177 174
178 class TestTabbedPane : public TabbedPane {
179 public:
180 TestTabbedPane() {}
181 virtual gfx::NativeView TestGetNativeControlView() {
182 return native_tabbed_pane_->GetTestingHandle();
183 }
184 };
185
186 // Tests that NativeControls do set the focused View appropriately on the 175 // Tests that NativeControls do set the focused View appropriately on the
187 // FocusManager. 176 // FocusManager.
188 TEST_F(FocusManagerTest, DISABLED_FocusNativeControls) { 177 TEST_F(FocusManagerTest, DISABLED_FocusNativeControls) {
189 TestTextfield* textfield = new TestTextfield(); 178 TestTextfield* textfield = new TestTextfield();
190 TestTabbedPane* tabbed_pane = new TestTabbedPane();
191 tabbed_pane->set_use_native_win_control(true);
192 TestTextfield* textfield2 = new TestTextfield();
193
194 GetContentsView()->AddChildView(textfield); 179 GetContentsView()->AddChildView(textfield);
195 GetContentsView()->AddChildView(tabbed_pane);
196
197 tabbed_pane->AddTab(ASCIIToUTF16("Awesome textfield"), textfield2);
198
199 // Simulate the native view getting the native focus (such as by user click). 180 // Simulate the native view getting the native focus (such as by user click).
200 FocusNativeView(textfield->TestGetNativeControlView()); 181 FocusNativeView(textfield->TestGetNativeControlView());
201 EXPECT_EQ(textfield, GetFocusManager()->GetFocusedView()); 182 EXPECT_EQ(textfield, GetFocusManager()->GetFocusedView());
202
203 FocusNativeView(tabbed_pane->TestGetNativeControlView());
204 EXPECT_EQ(tabbed_pane, GetFocusManager()->GetFocusedView());
205
206 FocusNativeView(textfield2->TestGetNativeControlView());
207 EXPECT_EQ(textfield2, GetFocusManager()->GetFocusedView());
208 } 183 }
209 #endif 184 #endif
210 185
211 // There is no tabbed pane in Aura.
212 #if !defined(USE_AURA)
213 TEST_F(FocusManagerTest, ContainsView) {
214 View* view = new View();
215 scoped_ptr<View> detached_view(new View());
216 TabbedPane* tabbed_pane = new TabbedPane();
217 tabbed_pane->set_use_native_win_control(true);
218 TabbedPane* nested_tabbed_pane = new TabbedPane();
219 nested_tabbed_pane->set_use_native_win_control(true);
220 NativeTextButton* tab_button = new NativeTextButton(
221 NULL, ASCIIToUTF16("tab button"));
222
223 GetContentsView()->AddChildView(view);
224 GetContentsView()->AddChildView(tabbed_pane);
225 // Adding a View inside a TabbedPane to test the case of nested root view.
226
227 tabbed_pane->AddTab(ASCIIToUTF16("Awesome tab"), nested_tabbed_pane);
228 nested_tabbed_pane->AddTab(ASCIIToUTF16("Awesomer tab"), tab_button);
229
230 EXPECT_TRUE(GetFocusManager()->ContainsView(view));
231 EXPECT_TRUE(GetFocusManager()->ContainsView(tabbed_pane));
232 EXPECT_TRUE(GetFocusManager()->ContainsView(nested_tabbed_pane));
233 EXPECT_TRUE(GetFocusManager()->ContainsView(tab_button));
234 EXPECT_FALSE(GetFocusManager()->ContainsView(detached_view.get()));
235 }
236 #endif
237
238 // Counts accelerator calls. 186 // Counts accelerator calls.
239 class TestAcceleratorTarget : public ui::AcceleratorTarget { 187 class TestAcceleratorTarget : public ui::AcceleratorTarget {
240 public: 188 public:
241 explicit TestAcceleratorTarget(bool process_accelerator) 189 explicit TestAcceleratorTarget(bool process_accelerator)
242 : accelerator_count_(0), 190 : accelerator_count_(0),
243 process_accelerator_(process_accelerator), 191 process_accelerator_(process_accelerator),
244 can_handle_accelerators_(true) {} 192 can_handle_accelerators_(true) {}
245 193
246 virtual bool AcceleratorPressed(const ui::Accelerator& accelerator) OVERRIDE { 194 virtual bool AcceleratorPressed(const ui::Accelerator& accelerator) OVERRIDE {
247 ++accelerator_count_; 195 ++accelerator_count_;
(...skipping 384 matching lines...) Expand 10 before | Expand all | Expand 10 after
632 ViewsTestBase::TearDown(); 580 ViewsTestBase::TearDown();
633 } 581 }
634 582
635 FocusManager* tracked_focus_manager_; 583 FocusManager* tracked_focus_manager_;
636 DtorTrackVector dtor_tracker_; 584 DtorTrackVector dtor_tracker_;
637 }; 585 };
638 586
639 #if !defined(USE_AURA) 587 #if !defined(USE_AURA)
640 TEST_F(FocusManagerDtorTest, FocusManagerDestructedLast) { 588 TEST_F(FocusManagerDtorTest, FocusManagerDestructedLast) {
641 // Setup views hierarchy. 589 // Setup views hierarchy.
642 TabbedPane* tabbed_pane = new TabbedPane(); 590 GetContentsView()->AddChildView(new TestTextfield());
643 tabbed_pane->set_use_native_win_control(true); 591 GetContentsView()->AddChildView(new NativeButtonDtorTracked(
644 GetContentsView()->AddChildView(tabbed_pane); 592 ASCIIToUTF16("button"), &dtor_tracker_));
645
646 NativeButtonDtorTracked* button = new NativeButtonDtorTracked(
647 ASCIIToUTF16("button"), &dtor_tracker_);
648 tabbed_pane->AddTab(ASCIIToUTF16("Awesome tab"), button);
649 593
650 // Close the window. 594 // Close the window.
651 GetWidget()->Close(); 595 GetWidget()->Close();
652 RunPendingMessages(); 596 RunPendingMessages();
653 597
654 // Test window, button and focus manager should all be destructed. 598 // Test window, button and focus manager should all be destructed.
655 ASSERT_EQ(3, static_cast<int>(dtor_tracker_.size())); 599 ASSERT_EQ(3, static_cast<int>(dtor_tracker_.size()));
656 600
657 // Focus manager should be the last one to destruct. 601 // Focus manager should be the last one to destruct.
658 ASSERT_STREQ("FocusManagerDtorTracked", dtor_tracker_[2].c_str()); 602 ASSERT_STREQ("FocusManagerDtorTracked", dtor_tracker_[2].c_str());
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
696 views::View* v3 = new View; 640 views::View* v3 = new View;
697 v3->set_focusable(true); 641 v3->set_focusable(true);
698 GetContentsView()->AddChildView(v3); 642 GetContentsView()->AddChildView(v3);
699 643
700 v3->RequestFocus(); 644 v3->RequestFocus();
701 GetWidget()->GetFocusManager()->AdvanceFocus(true); 645 GetWidget()->GetFocusManager()->AdvanceFocus(true);
702 EXPECT_TRUE(v1->HasFocus()); 646 EXPECT_TRUE(v1->HasFocus());
703 } 647 }
704 648
705 } // namespace views 649 } // namespace views
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698