tooltip_controller_unittest.cc revision 2a99a7e74a7f215066514fe81d2bfa6639d9eddd
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) 72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/utf_string_conversions.h" 82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/aura/client/cursor_client.h" 92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/aura/client/tooltip_client.h" 102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/aura/env.h" 112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/aura/root_window.h" 122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/aura/test/aura_test_base.h" 132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/aura/test/event_generator.h" 142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/aura/window.h" 152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/base/resource/resource_bundle.h" 162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/base/text/text_elider.h" 172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/gfx/font.h" 182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/gfx/point.h" 192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/views/corewm/tooltip_controller_test_helper.h" 202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/views/view.h" 212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/views/widget/widget.h" 222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#if defined(OS_WIN) 242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/base/win/scoped_ole_initializer.h" 252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif 262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#if !defined(OS_CHROMEOS) 272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/views/widget/desktop_aura/desktop_native_widget_aura.h" 282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif 292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace views { 312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace corewm { 322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace test { 332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace { 342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)views::Widget* CreateWidget(aura::RootWindow* root) { 362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) views::Widget* widget = new views::Widget; 372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) views::Widget::InitParams params; 382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) params.type = views::Widget::InitParams::TYPE_WINDOW_FRAMELESS; 392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) params.accept_events = true; 402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) params.ownership = views::Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET; 412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#if defined(OS_CHROMEOS) 422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) params.parent = root; 432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#else 442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) params.native_widget = new DesktopNativeWidgetAura(widget); 452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif 462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) params.bounds = gfx::Rect(0, 0, 200, 100); 472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) widget->Init(params); 482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) widget->Show(); 492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return widget; 502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)gfx::Font GetDefaultFont() { 532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return ui::ResourceBundle::GetSharedInstance().GetFont( 542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui::ResourceBundle::BaseFont); 552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TooltipController* GetController(Widget* widget) { 582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return static_cast<TooltipController*>( 592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) aura::client::GetTooltipClient( 602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) widget->GetNativeWindow()->GetRootWindow())); 612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // namespace 642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class TooltipControllerTest : public aura::test::AuraTestBase { 662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public: 672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TooltipControllerTest() : view_(NULL) {} 682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual ~TooltipControllerTest() {} 692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void SetUp() OVERRIDE { 712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) aura::test::AuraTestBase::SetUp(); 722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#if defined(OS_CHROMEOS) 732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) controller_.reset(new TooltipController(gfx::SCREEN_TYPE_ALTERNATE)); 742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) root_window()->AddPreTargetHandler(controller_.get()); 752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SetTooltipClient(root_window(), controller_.get()); 762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif 772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) widget_.reset(CreateWidget(root_window())); 782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) widget_->SetContentsView(new View); 792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) view_ = new TooltipTestView; 802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) widget_->GetContentsView()->AddChildView(view_); 812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) view_->SetBoundsRect(widget_->GetContentsView()->GetLocalBounds()); 822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) helper_.reset(new TooltipControllerTestHelper( 832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetController(widget_.get()))); 842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) generator_.reset(new aura::test::EventGenerator(GetRootWindow())); 852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void TearDown() OVERRIDE { 882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#if defined(OS_CHROMEOS) 892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) root_window()->RemovePreTargetHandler(controller_.get()); 902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SetTooltipClient(root_window(), NULL); 912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) controller_.reset(); 922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif 932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) generator_.reset(); 942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) helper_.reset(); 952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) widget_.reset(); 962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) aura::test::AuraTestBase::TearDown(); 972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) protected: 1002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) aura::Window* GetWindow() { 1012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return widget_->GetNativeWindow(); 1022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 1032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) aura::RootWindow* GetRootWindow() { 1052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return GetWindow()->GetRootWindow(); 1062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 1072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TooltipTestView* PrepareSecondView() { 1092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TooltipTestView* view2 = new TooltipTestView; 1102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) widget_->GetContentsView()->AddChildView(view2); 1112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) view_->SetBounds(0, 0, 100, 100); 1122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) view2->SetBounds(100, 0, 100, 100); 1132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return view2; 1142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 1152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<views::Widget> widget_; 1172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TooltipTestView* view_; 1182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<TooltipControllerTestHelper> helper_; 1192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<aura::test::EventGenerator> generator_; 1202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private: 1222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<TooltipController> controller_; 1232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#if defined(OS_WIN) 1242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui::ScopedOleInitializer ole_initializer_; 1252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif 1262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(TooltipControllerTest); 1282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}; 1292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(TooltipControllerTest, ViewTooltip) { 1312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) view_->set_tooltip_text(ASCIIToUTF16("Tooltip Text")); 1322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(string16(), helper_->GetTooltipText()); 1332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(NULL, helper_->GetTooltipWindow()); 1342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) generator_->MoveMouseToCenterOf(GetWindow()); 1352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(GetWindow(), GetRootWindow()->GetEventHandlerForPoint( 1372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) generator_->current_location())); 1382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) string16 expected_tooltip = ASCIIToUTF16("Tooltip Text"); 1392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(expected_tooltip, aura::client::GetTooltipText(GetWindow())); 1402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(string16(), helper_->GetTooltipText()); 1412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(GetWindow(), helper_->GetTooltipWindow()); 1422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Fire tooltip timer so tooltip becomes visible. 1442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) helper_->FireTooltipTimer(); 1452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(helper_->IsTooltipVisible()); 1472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) generator_->MoveMouseBy(1, 0); 1482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(helper_->IsTooltipVisible()); 1502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(expected_tooltip, aura::client::GetTooltipText(GetWindow())); 1512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(expected_tooltip, helper_->GetTooltipText()); 1522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(GetWindow(), helper_->GetTooltipWindow()); 1532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(TooltipControllerTest, TooltipsInMultipleViews) { 1562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) view_->set_tooltip_text(ASCIIToUTF16("Tooltip Text")); 1572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(string16(), helper_->GetTooltipText()); 1582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(NULL, helper_->GetTooltipWindow()); 1592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) PrepareSecondView(); 1612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) aura::Window* window = GetWindow(); 1622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) aura::RootWindow* root_window = GetRootWindow(); 1632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Fire tooltip timer so tooltip becomes visible. 1652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) generator_->MoveMouseRelativeTo(window, view_->bounds().CenterPoint()); 1662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) helper_->FireTooltipTimer(); 1672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(helper_->IsTooltipVisible()); 1682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) for (int i = 0; i < 49; ++i) { 1692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) generator_->MoveMouseBy(1, 0); 1702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(helper_->IsTooltipVisible()); 1712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(window, root_window->GetEventHandlerForPoint( 1722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) generator_->current_location())); 1732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) string16 expected_tooltip = ASCIIToUTF16("Tooltip Text"); 1742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(expected_tooltip, aura::client::GetTooltipText(window)); 1752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(expected_tooltip, helper_->GetTooltipText()); 1762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(window, helper_->GetTooltipWindow()); 1772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 1782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) for (int i = 0; i < 49; ++i) { 1792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) generator_->MoveMouseBy(1, 0); 1802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_FALSE(helper_->IsTooltipVisible()); 1812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(window, root_window->GetEventHandlerForPoint( 1822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) generator_->current_location())); 1832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) string16 expected_tooltip; // = "" 1842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(expected_tooltip, aura::client::GetTooltipText(window)); 1852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(expected_tooltip, helper_->GetTooltipText()); 1862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(window, helper_->GetTooltipWindow()); 1872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 1882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(TooltipControllerTest, EnableOrDisableTooltips) { 1912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) view_->set_tooltip_text(ASCIIToUTF16("Tooltip Text")); 1922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(string16(), helper_->GetTooltipText()); 1932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(NULL, helper_->GetTooltipWindow()); 1942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) generator_->MoveMouseRelativeTo(GetWindow(), view_->bounds().CenterPoint()); 1962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) string16 expected_tooltip = ASCIIToUTF16("Tooltip Text"); 1972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Fire tooltip timer so tooltip becomes visible. 1992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) helper_->FireTooltipTimer(); 2002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(helper_->IsTooltipVisible()); 2012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Diable tooltips and check again. 2032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) helper_->controller()->SetTooltipsEnabled(false); 2042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_FALSE(helper_->IsTooltipVisible()); 2052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) helper_->FireTooltipTimer(); 2062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_FALSE(helper_->IsTooltipVisible()); 2072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Enable tooltips back and check again. 2092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) helper_->controller()->SetTooltipsEnabled(true); 2102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_FALSE(helper_->IsTooltipVisible()); 2112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) helper_->FireTooltipTimer(); 2122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(helper_->IsTooltipVisible()); 2132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 2142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(TooltipControllerTest, TrimTooltipToFitTests) { 2162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const int max_width = 4000; 2172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) string16 tooltip; 2182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int width, line_count, expect_lines; 2192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int max_pixel_width = 400; // copied from constants in tooltip_controller.cc 2202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int max_lines = 10; // copied from constants in tooltip_controller.cc 2212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) gfx::Font font = GetDefaultFont(); 2222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) size_t tooltip_len; 2232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Error in computed size vs. expected size should not be greater than the 2252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // size of the longest word. 2262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int error_in_pixel_width = font.GetStringWidth(ASCIIToUTF16("tooltip")); 2272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Long tooltips should wrap to next line 2292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) tooltip.clear(); 2302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) width = line_count = -1; 2312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) expect_lines = 3; 2322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) for (; font.GetStringWidth(tooltip) <= (expect_lines - 1) * max_pixel_width;) 2332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) tooltip.append(ASCIIToUTF16("This is part of the tooltip")); 2342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) tooltip_len = tooltip.length(); 2352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TooltipControllerTestHelper::TrimTooltipToFit( 2362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) max_width, &tooltip, &width, &line_count); 2372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_NEAR(max_pixel_width, width, error_in_pixel_width); 2382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(expect_lines, line_count); 2392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(tooltip_len + expect_lines - 1, tooltip.length()); 2402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // More than |max_lines| lines should get truncated at 10 lines. 2422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) tooltip.clear(); 2432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) width = line_count = -1; 2442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) expect_lines = 13; 2452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) for (; font.GetStringWidth(tooltip) <= (expect_lines - 1) * max_pixel_width;) 2462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) tooltip.append(ASCIIToUTF16("This is part of the tooltip")); 2472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TooltipControllerTestHelper::TrimTooltipToFit( 2482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) max_width, &tooltip, &width, &line_count); 2492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_NEAR(max_pixel_width, width, error_in_pixel_width); 2502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(max_lines, line_count); 2512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Long multi line tooltips should wrap individual lines. 2532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) tooltip.clear(); 2542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) width = line_count = -1; 2552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) expect_lines = 4; 2562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) for (; font.GetStringWidth(tooltip) <= (expect_lines - 2) * max_pixel_width;) 2572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) tooltip.append(ASCIIToUTF16("This is part of the tooltip")); 2582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) tooltip.insert(tooltip.length() / 2, ASCIIToUTF16("\n")); 2592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) tooltip_len = tooltip.length(); 2602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TooltipControllerTestHelper::TrimTooltipToFit( 2612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) max_width, &tooltip, &width, &line_count); 2622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_NEAR(max_pixel_width, width, error_in_pixel_width); 2632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(expect_lines, line_count); 2642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // We may have inserted the line break above near a space which will get 2652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // trimmed. Hence we may be off by 1 in the final tooltip length calculation. 2662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_NEAR(tooltip_len + expect_lines - 2, tooltip.length(), 1); 2672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#if !defined(OS_WIN) 2692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Tooltip with really long word gets elided. 2702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) tooltip.clear(); 2712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) width = line_count = -1; 2722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) tooltip = UTF8ToUTF16(std::string('a', max_pixel_width)); 2732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TooltipControllerTestHelper::TrimTooltipToFit( 2742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) max_width, &tooltip, &width, &line_count); 2752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_NEAR(max_pixel_width, width, 5); 2762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(1, line_count); 2772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(ui::ElideText(UTF8ToUTF16(std::string('a', max_pixel_width)), font, 2782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) max_pixel_width, ui::ELIDE_AT_END), tooltip); 2792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif 2802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Normal small tooltip should stay as is. 2822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) tooltip.clear(); 2832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) width = line_count = -1; 2842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) tooltip = ASCIIToUTF16("Small Tooltip"); 2852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TooltipControllerTestHelper::TrimTooltipToFit( 2862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) max_width, &tooltip, &width, &line_count); 2872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(font.GetStringWidth(ASCIIToUTF16("Small Tooltip")), width); 2882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(1, line_count); 2892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(ASCIIToUTF16("Small Tooltip"), tooltip); 2902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Normal small multi-line tooltip should stay as is. 2922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) tooltip.clear(); 2932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) width = line_count = -1; 2942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) tooltip = ASCIIToUTF16("Multi line\nTooltip"); 2952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TooltipControllerTestHelper::TrimTooltipToFit( 2962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) max_width, &tooltip, &width, &line_count); 2972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int expected_width = font.GetStringWidth(ASCIIToUTF16("Multi line")); 2982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) expected_width = std::max(expected_width, 2992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) font.GetStringWidth(ASCIIToUTF16("Tooltip"))); 3002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(expected_width, width); 3012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(2, line_count); 3022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(ASCIIToUTF16("Multi line\nTooltip"), tooltip); 3032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Whitespaces in tooltips are preserved. 3052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) tooltip.clear(); 3062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) width = line_count = -1; 3072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) tooltip = ASCIIToUTF16("Small Tool t\tip"); 3082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TooltipControllerTestHelper::TrimTooltipToFit( 3092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) max_width, &tooltip, &width, &line_count); 3102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(font.GetStringWidth(ASCIIToUTF16("Small Tool t\tip")), width); 3112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(1, line_count); 3122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(ASCIIToUTF16("Small Tool t\tip"), tooltip); 3132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 3142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(TooltipControllerTest, TooltipHidesOnKeyPressAndStaysHiddenUntilChange) { 3162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) view_->set_tooltip_text(ASCIIToUTF16("Tooltip Text for view 1")); 3172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(string16(), helper_->GetTooltipText()); 3182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(NULL, helper_->GetTooltipWindow()); 3192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TooltipTestView* view2 = PrepareSecondView(); 3212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) view2->set_tooltip_text(ASCIIToUTF16("Tooltip Text for view 2")); 3222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) aura::Window* window = GetWindow(); 3242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Fire tooltip timer so tooltip becomes visible. 3262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) generator_->MoveMouseRelativeTo(window, view_->bounds().CenterPoint()); 3272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) helper_->FireTooltipTimer(); 3282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(helper_->IsTooltipVisible()); 3292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(helper_->IsTooltipShownTimerRunning()); 3302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) generator_->PressKey(ui::VKEY_1, 0); 3322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_FALSE(helper_->IsTooltipVisible()); 3332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_FALSE(helper_->IsTooltipTimerRunning()); 3342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_FALSE(helper_->IsTooltipShownTimerRunning()); 3352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Moving the mouse inside |view1| should not change the state of the tooltip 3372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // or the timers. 3382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) for (int i = 0; i < 49; i++) { 3392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) generator_->MoveMouseBy(1, 0); 3402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_FALSE(helper_->IsTooltipVisible()); 3412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_FALSE(helper_->IsTooltipTimerRunning()); 3422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_FALSE(helper_->IsTooltipShownTimerRunning()); 3432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(window, 3442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetRootWindow()->GetEventHandlerForPoint( 3452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) generator_->current_location())); 3462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) string16 expected_tooltip = ASCIIToUTF16("Tooltip Text for view 1"); 3472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(expected_tooltip, aura::client::GetTooltipText(window)); 3482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(expected_tooltip, helper_->GetTooltipText()); 3492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(window, helper_->GetTooltipWindow()); 3502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 3512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Now we move the mouse on to |view2|. It should re-start the tooltip timer. 3532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) generator_->MoveMouseBy(1, 0); 3542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(helper_->IsTooltipTimerRunning()); 3552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) helper_->FireTooltipTimer(); 3562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(helper_->IsTooltipVisible()); 3572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(helper_->IsTooltipShownTimerRunning()); 3582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) string16 expected_tooltip = ASCIIToUTF16("Tooltip Text for view 2"); 3592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(expected_tooltip, aura::client::GetTooltipText(window)); 3602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(expected_tooltip, helper_->GetTooltipText()); 3612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(window, helper_->GetTooltipWindow()); 3622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 3632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(TooltipControllerTest, TooltipHidesOnTimeoutAndStaysHiddenUntilChange) { 3652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) view_->set_tooltip_text(ASCIIToUTF16("Tooltip Text for view 1")); 3662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(string16(), helper_->GetTooltipText()); 3672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(NULL, helper_->GetTooltipWindow()); 3682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TooltipTestView* view2 = PrepareSecondView(); 3702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) view2->set_tooltip_text(ASCIIToUTF16("Tooltip Text for view 2")); 3712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) aura::Window* window = GetWindow(); 3732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Fire tooltip timer so tooltip becomes visible. 3752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) generator_->MoveMouseRelativeTo(window, view_->bounds().CenterPoint()); 3762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) helper_->FireTooltipTimer(); 3772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(helper_->IsTooltipVisible()); 3782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(helper_->IsTooltipShownTimerRunning()); 3792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) helper_->FireTooltipShownTimer(); 3812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_FALSE(helper_->IsTooltipVisible()); 3822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_FALSE(helper_->IsTooltipTimerRunning()); 3832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_FALSE(helper_->IsTooltipShownTimerRunning()); 3842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Moving the mouse inside |view1| should not change the state of the tooltip 3862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // or the timers. 3872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) for (int i = 0; i < 49; ++i) { 3882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) generator_->MoveMouseBy(1, 0); 3892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_FALSE(helper_->IsTooltipVisible()); 3902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_FALSE(helper_->IsTooltipTimerRunning()); 3912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_FALSE(helper_->IsTooltipShownTimerRunning()); 3922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(window, GetRootWindow()->GetEventHandlerForPoint( 3932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) generator_->current_location())); 3942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) string16 expected_tooltip = ASCIIToUTF16("Tooltip Text for view 1"); 3952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(expected_tooltip, aura::client::GetTooltipText(window)); 3962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(expected_tooltip, helper_->GetTooltipText()); 3972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(window, helper_->GetTooltipWindow()); 3982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 3992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Now we move the mouse on to |view2|. It should re-start the tooltip timer. 4012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) generator_->MoveMouseBy(1, 0); 4022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(helper_->IsTooltipTimerRunning()); 4032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) helper_->FireTooltipTimer(); 4042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(helper_->IsTooltipVisible()); 4052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(helper_->IsTooltipShownTimerRunning()); 4062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) string16 expected_tooltip = ASCIIToUTF16("Tooltip Text for view 2"); 4072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(expected_tooltip, aura::client::GetTooltipText(window)); 4082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(expected_tooltip, helper_->GetTooltipText()); 4092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(window, helper_->GetTooltipWindow()); 4102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 4112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // namespace test 4132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // namespace corewm 4142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // namespace views 415