tooltip_controller_unittest.cc revision a1401311d1ab56c4ed0a474bd38c108f75cb0cd9
12a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Copyright (c) 2013 The Chromium Authors. All rights reserved. 22a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 32a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// found in the LICENSE file. 42a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 52a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/views/corewm/tooltip_controller.h" 62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 7868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/utf_string_conversions.h" 82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/aura/client/cursor_client.h" 91e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#include "ui/aura/client/screen_position_client.h" 102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/aura/client/tooltip_client.h" 112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/aura/env.h" 122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/aura/test/aura_test_base.h" 132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/aura/test/event_generator.h" 141e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#include "ui/aura/test/test_screen.h" 155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "ui/aura/test/test_window_delegate.h" 162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/aura/window.h" 17a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "ui/aura/window_event_dispatcher.h" 182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/base/resource/resource_bundle.h" 192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/gfx/font.h" 202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/gfx/point.h" 211e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#include "ui/gfx/screen.h" 224e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "ui/gfx/screen_type_delegate.h" 2358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "ui/gfx/text_elider.h" 244e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "ui/views/corewm/tooltip_aura.h" 252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/views/corewm/tooltip_controller_test_helper.h" 262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/views/view.h" 271e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#include "ui/views/widget/tooltip_manager.h" 282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/views/widget/widget.h" 29a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "ui/wm/core/wm_state.h" 305d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "ui/wm/public/window_types.h" 312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#if defined(OS_WIN) 332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/base/win/scoped_ole_initializer.h" 342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif 351e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#if !defined(OS_CHROMEOS) 372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/views/widget/desktop_aura/desktop_native_widget_aura.h" 381e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#include "ui/views/widget/desktop_aura/desktop_screen.h" 392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif 402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)using base::ASCIIToUTF16; 425d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace views { 442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace corewm { 452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace test { 462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace { 472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 48f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)views::Widget* CreateWidget(aura::Window* root) { 492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) views::Widget* widget = new views::Widget; 502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) views::Widget::InitParams params; 512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) params.type = views::Widget::InitParams::TYPE_WINDOW_FRAMELESS; 522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) params.accept_events = true; 532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) params.ownership = views::Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET; 542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#if defined(OS_CHROMEOS) 552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) params.parent = root; 562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#else 572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) params.native_widget = new DesktopNativeWidgetAura(widget); 582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif 592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) params.bounds = gfx::Rect(0, 0, 200, 100); 602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) widget->Init(params); 612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) widget->Show(); 622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return widget; 632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TooltipController* GetController(Widget* widget) { 662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return static_cast<TooltipController*>( 672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) aura::client::GetTooltipClient( 682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) widget->GetNativeWindow()->GetRootWindow())); 692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // namespace 722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class TooltipControllerTest : public aura::test::AuraTestBase { 742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public: 752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TooltipControllerTest() : view_(NULL) {} 762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual ~TooltipControllerTest() {} 772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void SetUp() OVERRIDE { 79a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) wm_state_.reset(new wm::WMState); 802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) aura::test::AuraTestBase::SetUp(); 812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#if defined(OS_CHROMEOS) 824e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) controller_.reset(new TooltipController( 834e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) scoped_ptr<views::corewm::Tooltip>( 844e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) new views::corewm::TooltipAura(gfx::SCREEN_TYPE_ALTERNATE)))); 852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) root_window()->AddPreTargetHandler(controller_.get()); 862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SetTooltipClient(root_window(), controller_.get()); 872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif 882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) widget_.reset(CreateWidget(root_window())); 892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) widget_->SetContentsView(new View); 902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) view_ = new TooltipTestView; 912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) widget_->GetContentsView()->AddChildView(view_); 922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) view_->SetBoundsRect(widget_->GetContentsView()->GetLocalBounds()); 932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) helper_.reset(new TooltipControllerTestHelper( 942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetController(widget_.get()))); 952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) generator_.reset(new aura::test::EventGenerator(GetRootWindow())); 962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void TearDown() OVERRIDE { 992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#if defined(OS_CHROMEOS) 1002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) root_window()->RemovePreTargetHandler(controller_.get()); 101f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) aura::client::SetTooltipClient(root_window(), NULL); 1022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) controller_.reset(); 1032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif 1042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) generator_.reset(); 1052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) helper_.reset(); 1062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) widget_.reset(); 1072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) aura::test::AuraTestBase::TearDown(); 1085d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) wm_state_.reset(); 1092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 1102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) protected: 1122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) aura::Window* GetWindow() { 1132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return widget_->GetNativeWindow(); 1142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 1152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1161e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) aura::Window* GetRootWindow() { 1172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return GetWindow()->GetRootWindow(); 1182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 1192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TooltipTestView* PrepareSecondView() { 1212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TooltipTestView* view2 = new TooltipTestView; 1222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) widget_->GetContentsView()->AddChildView(view2); 1232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) view_->SetBounds(0, 0, 100, 100); 1242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) view2->SetBounds(100, 0, 100, 100); 1252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return view2; 1262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 1272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<views::Widget> widget_; 1292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TooltipTestView* view_; 1302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<TooltipControllerTestHelper> helper_; 1312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<aura::test::EventGenerator> generator_; 1322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private: 1342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<TooltipController> controller_; 1355d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#if defined(OS_WIN) 1372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui::ScopedOleInitializer ole_initializer_; 1382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif 1392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 140a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) scoped_ptr<wm::WMState> wm_state_; 1415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(TooltipControllerTest); 1432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}; 1442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(TooltipControllerTest, ViewTooltip) { 1462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) view_->set_tooltip_text(ASCIIToUTF16("Tooltip Text")); 1475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(base::string16(), helper_->GetTooltipText()); 1482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(NULL, helper_->GetTooltipWindow()); 1492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) generator_->MoveMouseToCenterOf(GetWindow()); 1502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(GetWindow(), GetRootWindow()->GetEventHandlerForPoint( 1522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) generator_->current_location())); 1535d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::string16 expected_tooltip = ASCIIToUTF16("Tooltip Text"); 1542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(expected_tooltip, aura::client::GetTooltipText(GetWindow())); 1555d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(base::string16(), helper_->GetTooltipText()); 1562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(GetWindow(), helper_->GetTooltipWindow()); 1572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Fire tooltip timer so tooltip becomes visible. 1592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) helper_->FireTooltipTimer(); 1602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(helper_->IsTooltipVisible()); 1622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) generator_->MoveMouseBy(1, 0); 1632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(helper_->IsTooltipVisible()); 1652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(expected_tooltip, aura::client::GetTooltipText(GetWindow())); 1662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(expected_tooltip, helper_->GetTooltipText()); 1672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(GetWindow(), helper_->GetTooltipWindow()); 1682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(TooltipControllerTest, TooltipsInMultipleViews) { 1712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) view_->set_tooltip_text(ASCIIToUTF16("Tooltip Text")); 1725d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(base::string16(), helper_->GetTooltipText()); 1732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(NULL, helper_->GetTooltipWindow()); 1742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) PrepareSecondView(); 1762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) aura::Window* window = GetWindow(); 1771e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) aura::Window* root_window = GetRootWindow(); 1782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Fire tooltip timer so tooltip becomes visible. 1802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) generator_->MoveMouseRelativeTo(window, view_->bounds().CenterPoint()); 1812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) helper_->FireTooltipTimer(); 1822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(helper_->IsTooltipVisible()); 1832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) for (int i = 0; i < 49; ++i) { 1842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) generator_->MoveMouseBy(1, 0); 1852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(helper_->IsTooltipVisible()); 1862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(window, root_window->GetEventHandlerForPoint( 1872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) generator_->current_location())); 1885d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::string16 expected_tooltip = ASCIIToUTF16("Tooltip Text"); 1892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(expected_tooltip, aura::client::GetTooltipText(window)); 1902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(expected_tooltip, helper_->GetTooltipText()); 1912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(window, helper_->GetTooltipWindow()); 1922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 1932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) for (int i = 0; i < 49; ++i) { 1942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) generator_->MoveMouseBy(1, 0); 1952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_FALSE(helper_->IsTooltipVisible()); 1962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(window, root_window->GetEventHandlerForPoint( 1972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) generator_->current_location())); 1985d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::string16 expected_tooltip; // = "" 1992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(expected_tooltip, aura::client::GetTooltipText(window)); 2002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(expected_tooltip, helper_->GetTooltipText()); 2012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(window, helper_->GetTooltipWindow()); 2022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 2032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 2042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(TooltipControllerTest, EnableOrDisableTooltips) { 2062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) view_->set_tooltip_text(ASCIIToUTF16("Tooltip Text")); 2075d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(base::string16(), helper_->GetTooltipText()); 2082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(NULL, helper_->GetTooltipWindow()); 2092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) generator_->MoveMouseRelativeTo(GetWindow(), view_->bounds().CenterPoint()); 2115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::string16 expected_tooltip = ASCIIToUTF16("Tooltip Text"); 2122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Fire tooltip timer so tooltip becomes visible. 2142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) helper_->FireTooltipTimer(); 2152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(helper_->IsTooltipVisible()); 2162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2171e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // Disable tooltips and check again. 2182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) helper_->controller()->SetTooltipsEnabled(false); 2192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_FALSE(helper_->IsTooltipVisible()); 2202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) helper_->FireTooltipTimer(); 2212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_FALSE(helper_->IsTooltipVisible()); 2222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Enable tooltips back and check again. 2242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) helper_->controller()->SetTooltipsEnabled(true); 2252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_FALSE(helper_->IsTooltipVisible()); 2262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) helper_->FireTooltipTimer(); 2272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(helper_->IsTooltipVisible()); 2282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 2292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2301e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)// Verifies tooltip isn't shown if tooltip text consists entirely of whitespace. 2311e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)TEST_F(TooltipControllerTest, DontShowEmptyTooltips) { 2321e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) view_->set_tooltip_text(ASCIIToUTF16(" ")); 2335d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(base::string16(), helper_->GetTooltipText()); 2341e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EXPECT_EQ(NULL, helper_->GetTooltipWindow()); 2351e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 2361e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) generator_->MoveMouseRelativeTo(GetWindow(), view_->bounds().CenterPoint()); 2371e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 2381e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) helper_->FireTooltipTimer(); 2391e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EXPECT_FALSE(helper_->IsTooltipVisible()); 2401e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)} 2411e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 2422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(TooltipControllerTest, TooltipHidesOnKeyPressAndStaysHiddenUntilChange) { 2432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) view_->set_tooltip_text(ASCIIToUTF16("Tooltip Text for view 1")); 2445d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(base::string16(), helper_->GetTooltipText()); 2452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(NULL, helper_->GetTooltipWindow()); 2462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TooltipTestView* view2 = PrepareSecondView(); 2482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) view2->set_tooltip_text(ASCIIToUTF16("Tooltip Text for view 2")); 2492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) aura::Window* window = GetWindow(); 2512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Fire tooltip timer so tooltip becomes visible. 2532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) generator_->MoveMouseRelativeTo(window, view_->bounds().CenterPoint()); 2542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) helper_->FireTooltipTimer(); 2552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(helper_->IsTooltipVisible()); 2562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(helper_->IsTooltipShownTimerRunning()); 2572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) generator_->PressKey(ui::VKEY_1, 0); 2592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_FALSE(helper_->IsTooltipVisible()); 2602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_FALSE(helper_->IsTooltipTimerRunning()); 2612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_FALSE(helper_->IsTooltipShownTimerRunning()); 2622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Moving the mouse inside |view1| should not change the state of the tooltip 2642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // or the timers. 2652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) for (int i = 0; i < 49; i++) { 2662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) generator_->MoveMouseBy(1, 0); 2672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_FALSE(helper_->IsTooltipVisible()); 2682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_FALSE(helper_->IsTooltipTimerRunning()); 2692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_FALSE(helper_->IsTooltipShownTimerRunning()); 2702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(window, 2712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetRootWindow()->GetEventHandlerForPoint( 2722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) generator_->current_location())); 2735d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::string16 expected_tooltip = ASCIIToUTF16("Tooltip Text for view 1"); 2742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(expected_tooltip, aura::client::GetTooltipText(window)); 2752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(expected_tooltip, helper_->GetTooltipText()); 2762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(window, helper_->GetTooltipWindow()); 2772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 2782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Now we move the mouse on to |view2|. It should re-start the tooltip timer. 2802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) generator_->MoveMouseBy(1, 0); 2812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(helper_->IsTooltipTimerRunning()); 2822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) helper_->FireTooltipTimer(); 2832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(helper_->IsTooltipVisible()); 2842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(helper_->IsTooltipShownTimerRunning()); 2855d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::string16 expected_tooltip = ASCIIToUTF16("Tooltip Text for view 2"); 2862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(expected_tooltip, aura::client::GetTooltipText(window)); 2872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(expected_tooltip, helper_->GetTooltipText()); 2882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(window, helper_->GetTooltipWindow()); 2892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 2902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(TooltipControllerTest, TooltipHidesOnTimeoutAndStaysHiddenUntilChange) { 2922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) view_->set_tooltip_text(ASCIIToUTF16("Tooltip Text for view 1")); 2935d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(base::string16(), helper_->GetTooltipText()); 2942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(NULL, helper_->GetTooltipWindow()); 2952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TooltipTestView* view2 = PrepareSecondView(); 2972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) view2->set_tooltip_text(ASCIIToUTF16("Tooltip Text for view 2")); 2982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) aura::Window* window = GetWindow(); 3002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Fire tooltip timer so tooltip becomes visible. 3022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) generator_->MoveMouseRelativeTo(window, view_->bounds().CenterPoint()); 3032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) helper_->FireTooltipTimer(); 3042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(helper_->IsTooltipVisible()); 3052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(helper_->IsTooltipShownTimerRunning()); 3062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) helper_->FireTooltipShownTimer(); 3082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_FALSE(helper_->IsTooltipVisible()); 3092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_FALSE(helper_->IsTooltipTimerRunning()); 3102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_FALSE(helper_->IsTooltipShownTimerRunning()); 3112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Moving the mouse inside |view1| should not change the state of the tooltip 3132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // or the timers. 3142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) for (int i = 0; i < 49; ++i) { 3152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) generator_->MoveMouseBy(1, 0); 3162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_FALSE(helper_->IsTooltipVisible()); 3172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_FALSE(helper_->IsTooltipTimerRunning()); 3182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_FALSE(helper_->IsTooltipShownTimerRunning()); 3192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(window, GetRootWindow()->GetEventHandlerForPoint( 3202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) generator_->current_location())); 3215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::string16 expected_tooltip = ASCIIToUTF16("Tooltip Text for view 1"); 3222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(expected_tooltip, aura::client::GetTooltipText(window)); 3232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(expected_tooltip, helper_->GetTooltipText()); 3242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(window, helper_->GetTooltipWindow()); 3252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 3262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Now we move the mouse on to |view2|. It should re-start the tooltip timer. 3282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) generator_->MoveMouseBy(1, 0); 3292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(helper_->IsTooltipTimerRunning()); 3302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) helper_->FireTooltipTimer(); 3312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(helper_->IsTooltipVisible()); 3322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(helper_->IsTooltipShownTimerRunning()); 3335d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::string16 expected_tooltip = ASCIIToUTF16("Tooltip Text for view 2"); 3342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(expected_tooltip, aura::client::GetTooltipText(window)); 3352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(expected_tooltip, helper_->GetTooltipText()); 3362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(window, helper_->GetTooltipWindow()); 3372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 3382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 339424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)// Verifies a mouse exit event hides the tooltips. 340424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)TEST_F(TooltipControllerTest, HideOnExit) { 341424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) view_->set_tooltip_text(ASCIIToUTF16("Tooltip Text")); 342424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) generator_->MoveMouseToCenterOf(GetWindow()); 3435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::string16 expected_tooltip = ASCIIToUTF16("Tooltip Text"); 344424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) EXPECT_EQ(expected_tooltip, aura::client::GetTooltipText(GetWindow())); 3455d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(base::string16(), helper_->GetTooltipText()); 346424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) EXPECT_EQ(GetWindow(), helper_->GetTooltipWindow()); 347424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 348424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) // Fire tooltip timer so tooltip becomes visible. 349424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) helper_->FireTooltipTimer(); 350424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 351424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) EXPECT_TRUE(helper_->IsTooltipVisible()); 352424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) generator_->SendMouseExit(); 353424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) EXPECT_FALSE(helper_->IsTooltipVisible()); 354424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)} 355424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 3565d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)TEST_F(TooltipControllerTest, ReshowOnClickAfterEnterExit) { 3575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Owned by |view_|. 3585d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) TooltipTestView* v1 = new TooltipTestView; 3595d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) TooltipTestView* v2 = new TooltipTestView; 3605d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) view_->AddChildView(v1); 3615d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) view_->AddChildView(v2); 3625d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) gfx::Rect view_bounds(view_->GetLocalBounds()); 3635d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) view_bounds.set_height(view_bounds.height() / 2); 3645d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) v1->SetBoundsRect(view_bounds); 3655d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) view_bounds.set_y(view_bounds.height()); 3665d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) v2->SetBoundsRect(view_bounds); 3675d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const base::string16 v1_tt(ASCIIToUTF16("v1")); 3685d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const base::string16 v2_tt(ASCIIToUTF16("v2")); 3695d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) v1->set_tooltip_text(v1_tt); 3705d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) v2->set_tooltip_text(v2_tt); 3715d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 3725d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) gfx::Point v1_point(1, 1); 3735d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) View::ConvertPointToWidget(v1, &v1_point); 3745d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) generator_->MoveMouseRelativeTo(GetWindow(), v1_point); 3755d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 3765d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Fire tooltip timer so tooltip becomes visible. 3775d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) helper_->FireTooltipTimer(); 3785d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_TRUE(helper_->IsTooltipVisible()); 3795d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(v1_tt, helper_->GetTooltipText()); 3805d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 3815d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Press the mouse, move to v2 and back to v1. 3825d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) generator_->ClickLeftButton(); 3835d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 3845d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) gfx::Point v2_point(1, 1); 3855d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) View::ConvertPointToWidget(v2, &v2_point); 3865d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) generator_->MoveMouseRelativeTo(GetWindow(), v2_point); 3875d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) generator_->MoveMouseRelativeTo(GetWindow(), v1_point); 3885d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 3895d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) helper_->FireTooltipTimer(); 3905d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_TRUE(helper_->IsTooltipVisible()); 3915d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(v1_tt, helper_->GetTooltipText()); 3925d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 3935d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 3941e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)namespace { 3951e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 3961e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)// Returns the index of |window| in its parent's children. 3971e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)int IndexInParent(const aura::Window* window) { 3981e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) aura::Window::Windows::const_iterator i = 3991e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) std::find(window->parent()->children().begin(), 4001e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) window->parent()->children().end(), 4011e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) window); 4021e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) return i == window->parent()->children().end() ? -1 : 4031e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) static_cast<int>(i - window->parent()->children().begin()); 4041e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)} 4051e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 4061e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)class TestScreenPositionClient : public aura::client::ScreenPositionClient { 4071e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) public: 4081e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) TestScreenPositionClient() {} 4091e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) virtual ~TestScreenPositionClient() {} 4101e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 4111e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // ScreenPositionClient overrides: 4121e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) virtual void ConvertPointToScreen(const aura::Window* window, 4131e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) gfx::Point* point) OVERRIDE { 4141e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) } 4151e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) virtual void ConvertPointFromScreen(const aura::Window* window, 4161e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) gfx::Point* point) OVERRIDE { 4171e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) } 4181e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) virtual void ConvertHostPointToScreen(aura::Window* root_gwindow, 4191e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) gfx::Point* point) OVERRIDE { 4201e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) NOTREACHED(); 4211e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) } 4221e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) virtual void SetBounds(aura::Window* window, 4231e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) const gfx::Rect& bounds, 4241e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) const gfx::Display& display) OVERRIDE { 4251e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) window->SetBounds(bounds); 4261e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) } 4271e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 4281e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) private: 4291e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(TestScreenPositionClient); 4301e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)}; 4311e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 4321e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)} // namespace 4331e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 4341e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)class TooltipControllerCaptureTest : public TooltipControllerTest { 4351e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) public: 4361e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) TooltipControllerCaptureTest() {} 4371e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) virtual ~TooltipControllerCaptureTest() {} 4381e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 4391e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) virtual void SetUp() OVERRIDE { 4401e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) TooltipControllerTest::SetUp(); 4411e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) aura::client::SetScreenPositionClient(GetRootWindow(), 4421e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) &screen_position_client_); 4431e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#if !defined(OS_CHROMEOS) 4441e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) desktop_screen_.reset(CreateDesktopScreen()); 4451e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) gfx::Screen::SetScreenInstance(gfx::SCREEN_TYPE_NATIVE, 4461e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) desktop_screen_.get()); 4471e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#endif 4481e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) } 4491e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 4501e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) virtual void TearDown() OVERRIDE { 4511e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#if !defined(OS_CHROMEOS) 4521e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) gfx::Screen::SetScreenInstance(gfx::SCREEN_TYPE_NATIVE, test_screen()); 4531e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) desktop_screen_.reset(); 4541e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#endif 4551e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) aura::client::SetScreenPositionClient(GetRootWindow(), NULL); 4561e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) TooltipControllerTest::TearDown(); 4571e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) } 4581e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 4591e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) private: 4601e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) TestScreenPositionClient screen_position_client_; 4611e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) scoped_ptr<gfx::Screen> desktop_screen_; 4621e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 4631e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(TooltipControllerCaptureTest); 4641e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)}; 4651e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 4661e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)// Verifies when capture is released the TooltipController resets state. 4671e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)TEST_F(TooltipControllerCaptureTest, CloseOnCaptureLost) { 4681e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) view_->GetWidget()->SetCapture(view_); 4691e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) view_->set_tooltip_text(ASCIIToUTF16("Tooltip Text")); 4701e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) generator_->MoveMouseToCenterOf(GetWindow()); 4715d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::string16 expected_tooltip = ASCIIToUTF16("Tooltip Text"); 4721e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EXPECT_EQ(expected_tooltip, aura::client::GetTooltipText(GetWindow())); 4735d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(base::string16(), helper_->GetTooltipText()); 4741e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EXPECT_EQ(GetWindow(), helper_->GetTooltipWindow()); 4751e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 4761e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // Fire tooltip timer so tooltip becomes visible. 4771e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) helper_->FireTooltipTimer(); 4781e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 4791e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EXPECT_TRUE(helper_->IsTooltipVisible()); 4801e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) view_->GetWidget()->ReleaseCapture(); 4811e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EXPECT_FALSE(helper_->IsTooltipVisible()); 4821e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EXPECT_TRUE(helper_->GetTooltipWindow() == NULL); 4831e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)} 4841e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 4851e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)// Disabled on linux as DesktopScreenX11::GetWindowAtScreenPoint() doesn't 4861e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)// consider z-order. 4871e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#if defined(OS_LINUX) && !defined(OS_CHROMEOS) 4881e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#define MAYBE_Capture DISABLED_Capture 4891e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#else 4901e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#define MAYBE_Capture Capture 4911e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#endif 4921e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)// Verifies the correct window is found for tooltips when there is a capture. 4931e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)TEST_F(TooltipControllerCaptureTest, MAYBE_Capture) { 4945d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const base::string16 tooltip_text(ASCIIToUTF16("1")); 4955d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const base::string16 tooltip_text2(ASCIIToUTF16("2")); 4961e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 4971e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) widget_->SetBounds(gfx::Rect(0, 0, 200, 200)); 4981e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) view_->set_tooltip_text(tooltip_text); 4991e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 5001e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) scoped_ptr<views::Widget> widget2(CreateWidget(root_window())); 5011e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) widget2->SetContentsView(new View); 5021e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) TooltipTestView* view2 = new TooltipTestView; 5031e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) widget2->GetContentsView()->AddChildView(view2); 5041e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) view2->set_tooltip_text(tooltip_text2); 5051e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) widget2->SetBounds(gfx::Rect(0, 0, 200, 200)); 5061e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) view2->SetBoundsRect(widget2->GetContentsView()->GetLocalBounds()); 5071e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 5081e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) widget_->SetCapture(view_); 5091e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EXPECT_TRUE(widget_->HasCapture()); 5101e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) widget2->Show(); 5111e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EXPECT_GE(IndexInParent(widget2->GetNativeWindow()), 5121e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) IndexInParent(widget_->GetNativeWindow())); 5131e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 5141e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) generator_->MoveMouseRelativeTo(widget_->GetNativeWindow(), 5151e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) view_->bounds().CenterPoint()); 5161e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 5171e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EXPECT_TRUE(helper_->IsTooltipTimerRunning()); 5181e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) helper_->FireTooltipTimer(); 5191e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // Even though the mouse is over a window with a tooltip it shouldn't be 5201e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // picked up because the windows don't have the same value for 5211e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // |TooltipManager::kGroupingPropertyKey|. 5221e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EXPECT_TRUE(helper_->GetTooltipText().empty()); 5231e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 5241e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // Now make both the windows have same transient value for 5251e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // kGroupingPropertyKey. In this case the tooltip should be picked up from 5261e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // |widget2| (because the mouse is over it). 5271e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) const int grouping_key = 1; 5281e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) widget_->SetNativeWindowProperty(TooltipManager::kGroupingPropertyKey, 5291e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) reinterpret_cast<void*>(grouping_key)); 5301e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) widget2->SetNativeWindowProperty(TooltipManager::kGroupingPropertyKey, 5311e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) reinterpret_cast<void*>(grouping_key)); 5321e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) generator_->MoveMouseBy(1, 10); 5331e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EXPECT_TRUE(helper_->IsTooltipTimerRunning()); 5341e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) helper_->FireTooltipTimer(); 5351e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EXPECT_EQ(tooltip_text2, helper_->GetTooltipText()); 5361e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 5371e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) widget2.reset(); 5381e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)} 5391e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 5405d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// These tests search for a specific aura::Window to identify the 5415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// tooltip. Windows shows the tooltip using a native tooltip, so these tests 5425d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// don't apply. 5435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#if !defined(OS_WIN) && !defined(OS_CHROMEOS) 54458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)// This test creates two top level windows and verifies that the tooltip 54558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)// displays correctly when mouse moves are dispatched to these windows. 54658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)// Additionally it also verifies that the tooltip is reparented to the new 54758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)// window when mouse moves are dispatched to it. 54858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)TEST_F(TooltipControllerTest, TooltipsInMultipleRootWindows) { 54958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) view_->set_tooltip_text(ASCIIToUTF16("Tooltip Text For RootWindow1")); 5505d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(base::string16(), helper_->GetTooltipText()); 55158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) EXPECT_EQ(NULL, helper_->GetTooltipWindow()); 55258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 55358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) aura::Window* window = GetWindow(); 5541e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) aura::Window* root_window = GetRootWindow(); 55558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 55658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) // Fire tooltip timer so tooltip becomes visible. 55758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) generator_->MoveMouseRelativeTo(window, view_->bounds().CenterPoint()); 55858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) helper_->FireTooltipTimer(); 55958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) EXPECT_TRUE(helper_->IsTooltipVisible()); 56058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) for (int i = 0; i < 49; ++i) { 56158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) generator_->MoveMouseBy(1, 0); 56258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) EXPECT_TRUE(helper_->IsTooltipVisible()); 56358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) EXPECT_EQ(window, root_window->GetEventHandlerForPoint( 56458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) generator_->current_location())); 5655d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::string16 expected_tooltip = 56658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ASCIIToUTF16("Tooltip Text For RootWindow1"); 56758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) EXPECT_EQ(expected_tooltip, aura::client::GetTooltipText(window)); 56858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) EXPECT_EQ(expected_tooltip, helper_->GetTooltipText()); 56958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) EXPECT_EQ(window, helper_->GetTooltipWindow()); 57058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) } 57158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 57258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) views::Widget* widget2 = CreateWidget(NULL); 57358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) widget2->SetContentsView(new View); 57458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) TooltipTestView* view2 = new TooltipTestView; 57558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) widget2->GetContentsView()->AddChildView(view2); 57658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) view2->SetBoundsRect(widget2->GetContentsView()->GetLocalBounds()); 57758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) helper_.reset(new TooltipControllerTestHelper( 57858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) GetController(widget2))); 57958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) generator_.reset(new aura::test::EventGenerator( 58058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) widget2->GetNativeWindow()->GetRootWindow())); 58158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) view2->set_tooltip_text(ASCIIToUTF16("Tooltip Text For RootWindow2")); 58258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 58358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) aura::Window* window2 = widget2->GetNativeWindow(); 5841e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) aura::Window* root_window2 = 58558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) widget2->GetNativeWindow()->GetRootWindow(); 58658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) // Fire tooltip timer so tooltip becomes visible. 58758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) generator_->MoveMouseRelativeTo(window2, view2->bounds().CenterPoint()); 58858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) helper_->FireTooltipTimer(); 58958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 59058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) EXPECT_NE(root_window, root_window2); 59158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) EXPECT_NE(window, window2); 59258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 59358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) for (int i = 0; i < 49; ++i) { 59458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) generator_->MoveMouseBy(1, 0); 59558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) EXPECT_TRUE(helper_->IsTooltipVisible()); 59658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) EXPECT_EQ(window2, root_window2->GetEventHandlerForPoint( 59758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) generator_->current_location())); 5985d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::string16 expected_tooltip = 5995d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ASCIIToUTF16("Tooltip Text For RootWindow2"); 60058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) EXPECT_EQ(expected_tooltip, aura::client::GetTooltipText(window2)); 60158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) EXPECT_EQ(expected_tooltip, helper_->GetTooltipText()); 60258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) EXPECT_EQ(window2, helper_->GetTooltipWindow()); 60358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) } 60458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 60558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) bool tooltip_reparented = false; 60658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) for (size_t i = 0; i < root_window2->children().size(); ++i) { 6075d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (root_window2->children()[i]->type() == ui::wm::WINDOW_TYPE_TOOLTIP) { 60858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) tooltip_reparented = true; 60958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) break; 61058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) } 61158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) } 61258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) EXPECT_TRUE(tooltip_reparented); 61358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) widget2->Close(); 61458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)} 61568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 61668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)// This test validates whether the tooltip after becoming visible stays at the 61768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)// top of the ZOrder in its root window after activation changes. 61868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)TEST_F(TooltipControllerTest, TooltipAtTopOfZOrderAfterActivation) { 61968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) view_->set_tooltip_text(ASCIIToUTF16("Tooltip Text")); 6205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(base::string16(), helper_->GetTooltipText()); 62168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) EXPECT_EQ(NULL, helper_->GetTooltipWindow()); 62268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) generator_->MoveMouseToCenterOf(GetWindow()); 62368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 62468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) EXPECT_EQ(GetWindow(), GetRootWindow()->GetEventHandlerForPoint( 62568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) generator_->current_location())); 6265d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::string16 expected_tooltip = ASCIIToUTF16("Tooltip Text"); 62768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) EXPECT_EQ(expected_tooltip, aura::client::GetTooltipText(GetWindow())); 6285d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(base::string16(), helper_->GetTooltipText()); 62968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) EXPECT_EQ(GetWindow(), helper_->GetTooltipWindow()); 63068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 63168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) // Fire tooltip timer so tooltip becomes visible. 63268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) helper_->FireTooltipTimer(); 63368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 63468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) EXPECT_TRUE(helper_->IsTooltipVisible()); 63568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) generator_->MoveMouseBy(1, 0); 63668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 63768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) EXPECT_TRUE(helper_->IsTooltipVisible()); 63868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) EXPECT_EQ(expected_tooltip, aura::client::GetTooltipText(GetWindow())); 63968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) EXPECT_EQ(expected_tooltip, helper_->GetTooltipText()); 64068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) EXPECT_EQ(GetWindow(), helper_->GetTooltipWindow()); 64168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 64268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) // Fake activation loss and gain in the native widget. This should cause a 64368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) // ZOrder change which should not affect the position of the tooltip. 64468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) DesktopNativeWidgetAura* native_widget = 64568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) static_cast<DesktopNativeWidgetAura*>(widget_->native_widget()); 64668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) EXPECT_TRUE(native_widget != NULL); 64768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 64868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) native_widget->HandleActivationChanged(false); 64968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) native_widget->HandleActivationChanged(true); 65068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 65168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) EXPECT_EQ( 65268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) widget_->GetNativeWindow()->GetRootWindow()->children().back()->type(), 6535d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ui::wm::WINDOW_TYPE_TOOLTIP); 65468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)} 65558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#endif 65658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 6575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)namespace { 6585d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 6595d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)class TestTooltip : public Tooltip { 6605d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) public: 6615d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) TestTooltip() : is_visible_(false) {} 6625d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual ~TestTooltip() {} 6635d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 6645d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const base::string16& tooltip_text() const { return tooltip_text_; } 6655d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 6665d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Tooltip: 6675d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual void SetText(aura::Window* window, 6685d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const base::string16& tooltip_text, 6695d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const gfx::Point& location) OVERRIDE { 6705d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) tooltip_text_ = tooltip_text; 6715d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 6725d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual void Show() OVERRIDE { 6735d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) is_visible_ = true; 6745d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 6755d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual void Hide() OVERRIDE { 6765d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) is_visible_ = false; 6775d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 6785d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual bool IsVisible() OVERRIDE { 6795d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return is_visible_; 6805d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 6815d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 6825d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) private: 6835d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) bool is_visible_; 6845d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::string16 tooltip_text_; 6855d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 6865d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(TestTooltip); 6875d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}; 6885d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 6895d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} // namespace 6905d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 6915d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// Use for tests that don't depend upon views. 6925d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)class TooltipControllerTest2 : public aura::test::AuraTestBase { 6935d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) public: 6945d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) TooltipControllerTest2() : test_tooltip_(new TestTooltip) {} 6955d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual ~TooltipControllerTest2() {} 6965d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 6975d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual void SetUp() OVERRIDE { 698a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) wm_state_.reset(new wm::WMState); 6995d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) aura::test::AuraTestBase::SetUp(); 7005d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) controller_.reset(new TooltipController( 701a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) scoped_ptr<corewm::Tooltip>(test_tooltip_))); 7025d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) root_window()->AddPreTargetHandler(controller_.get()); 7035d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) SetTooltipClient(root_window(), controller_.get()); 7045d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) helper_.reset(new TooltipControllerTestHelper(controller_.get())); 7055d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) generator_.reset(new aura::test::EventGenerator(root_window())); 7065d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 7075d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 7085d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual void TearDown() OVERRIDE { 7095d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) root_window()->RemovePreTargetHandler(controller_.get()); 7105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) aura::client::SetTooltipClient(root_window(), NULL); 7115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) controller_.reset(); 7125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) generator_.reset(); 7135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) helper_.reset(); 7145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) aura::test::AuraTestBase::TearDown(); 7155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) wm_state_.reset(); 7165d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 7175d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 7185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) protected: 7195d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Owned by |controller_|. 7205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) TestTooltip* test_tooltip_; 7215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) scoped_ptr<TooltipControllerTestHelper> helper_; 7225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) scoped_ptr<aura::test::EventGenerator> generator_; 7235d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 7245d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) private: 7255d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) scoped_ptr<TooltipController> controller_; 726a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) scoped_ptr<wm::WMState> wm_state_; 7275d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 7285d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(TooltipControllerTest2); 7295d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}; 7305d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 7315d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)TEST_F(TooltipControllerTest2, VerifyLeadingTrailingWhitespaceStripped) { 7325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) aura::test::TestWindowDelegate test_delegate; 7335d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) scoped_ptr<aura::Window> window( 7345d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) CreateNormalWindow(100, root_window(), &test_delegate)); 7355d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) window->SetBounds(gfx::Rect(0, 0, 300, 300)); 7365d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::string16 tooltip_text(ASCIIToUTF16(" \nx ")); 7375d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) aura::client::SetTooltipText(window.get(), &tooltip_text); 7385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) generator_->MoveMouseToCenterOf(window.get()); 7395d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) helper_->FireTooltipTimer(); 7405d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(ASCIIToUTF16("x"), test_tooltip_->tooltip_text()); 7415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 7425d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 7435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// Verifies that tooltip is hidden and tooltip window closed upon cancel mode. 7445d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)TEST_F(TooltipControllerTest2, CloseOnCancelMode) { 7455d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) aura::test::TestWindowDelegate test_delegate; 7465d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) scoped_ptr<aura::Window> window( 7475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) CreateNormalWindow(100, root_window(), &test_delegate)); 7485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) window->SetBounds(gfx::Rect(0, 0, 300, 300)); 7495d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::string16 tooltip_text(ASCIIToUTF16("Tooltip Text")); 7505d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) aura::client::SetTooltipText(window.get(), &tooltip_text); 7515d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) generator_->MoveMouseToCenterOf(window.get()); 7525d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 7535d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Fire tooltip timer so tooltip becomes visible. 7545d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) helper_->FireTooltipTimer(); 7555d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_TRUE(helper_->IsTooltipVisible()); 7565d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 7575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Send OnCancelMode event and verify that tooltip becomes invisible and 7585d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // the tooltip window is closed. 7595d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ui::CancelModeEvent event; 7605d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) helper_->controller()->OnCancelMode(&event); 7615d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_FALSE(helper_->IsTooltipVisible()); 7625d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_TRUE(helper_->GetTooltipWindow() == NULL); 7635d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 7645d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 7652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // namespace test 7662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // namespace corewm 7672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // namespace views 768