| OLD | NEW | 
|---|
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be | 
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. | 
| 4 | 4 | 
| 5 #include "ash/shell.h" | 5 #include "ash/shell.h" | 
| 6 #include "ash/test/ash_test_base.h" | 6 #include "ash/test/ash_test_base.h" | 
| 7 #include "ash/tooltips/tooltip_controller.h" | 7 #include "ash/tooltips/tooltip_controller.h" | 
| 8 #include "base/utf_string_conversions.h" | 8 #include "base/utf_string_conversions.h" | 
| 9 #include "ui/aura/client/tooltip_client.h" | 9 #include "ui/aura/client/tooltip_client.h" | 
| 10 #include "ui/aura/cursor_manager.h" | 10 #include "ui/aura/cursor_manager.h" | 
| (...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 93   } | 93   } | 
| 94 | 94 | 
| 95   aura::Window* GetTooltipWindow() { | 95   aura::Window* GetTooltipWindow() { | 
| 96     return GetController()->tooltip_window_; | 96     return GetController()->tooltip_window_; | 
| 97   } | 97   } | 
| 98 | 98 | 
| 99   void FireTooltipTimer() { | 99   void FireTooltipTimer() { | 
| 100     GetController()->TooltipTimerFired(); | 100     GetController()->TooltipTimerFired(); | 
| 101   } | 101   } | 
| 102 | 102 | 
|  | 103   bool IsTooltipTimerRunning() { | 
|  | 104     return GetController()->tooltip_timer_.IsRunning(); | 
|  | 105   } | 
|  | 106 | 
|  | 107   void FireTooltipShownTimer() { | 
|  | 108     GetController()->tooltip_shown_timer_.Stop(); | 
|  | 109     GetController()->TooltipShownTimerFired(); | 
|  | 110   } | 
|  | 111 | 
|  | 112   bool IsTooltipShownTimerRunning() { | 
|  | 113     return GetController()->tooltip_shown_timer_.IsRunning(); | 
|  | 114   } | 
|  | 115 | 
| 103   bool IsTooltipVisible() { | 116   bool IsTooltipVisible() { | 
| 104     return GetController()->IsTooltipVisible(); | 117     return GetController()->IsTooltipVisible(); | 
| 105   } | 118   } | 
| 106 | 119 | 
| 107   void TrimTooltipToFit(string16* text, | 120   void TrimTooltipToFit(string16* text, | 
| 108                         int* max_width, | 121                         int* max_width, | 
| 109                         int* line_count, | 122                         int* line_count, | 
| 110                         int x, | 123                         int x, | 
| 111                         int y) { | 124                         int y) { | 
| 112     ash::internal::TooltipController::TrimTooltipToFit(text, max_width, | 125     ash::internal::TooltipController::TrimTooltipToFit(text, max_width, | 
| (...skipping 228 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 341   // Whitespaces in tooltips are preserved. | 354   // Whitespaces in tooltips are preserved. | 
| 342   tooltip.clear(); | 355   tooltip.clear(); | 
| 343   max_width = line_count = -1; | 356   max_width = line_count = -1; | 
| 344   tooltip = ASCIIToUTF16("Small  Tool  t\tip"); | 357   tooltip = ASCIIToUTF16("Small  Tool  t\tip"); | 
| 345   TrimTooltipToFit(&tooltip, &max_width, &line_count, 0, 0); | 358   TrimTooltipToFit(&tooltip, &max_width, &line_count, 0, 0); | 
| 346   EXPECT_EQ(font.GetStringWidth(ASCIIToUTF16("Small  Tool  t\tip")), max_width); | 359   EXPECT_EQ(font.GetStringWidth(ASCIIToUTF16("Small  Tool  t\tip")), max_width); | 
| 347   EXPECT_EQ(1, line_count); | 360   EXPECT_EQ(1, line_count); | 
| 348   EXPECT_EQ(ASCIIToUTF16("Small  Tool  t\tip"), tooltip); | 361   EXPECT_EQ(ASCIIToUTF16("Small  Tool  t\tip"), tooltip); | 
| 349 } | 362 } | 
| 350 | 363 | 
|  | 364 TEST_F(TooltipControllerTest, TooltipHidesOnKeyPressAndStaysHiddenUntilChange) { | 
|  | 365   scoped_ptr<views::Widget> widget(CreateNewWidget()); | 
|  | 366   TooltipTestView* view1 = new TooltipTestView; | 
|  | 367   AddViewToWidgetAndResize(widget.get(), view1); | 
|  | 368   view1->set_tooltip_text(ASCIIToUTF16("Tooltip Text for view 1")); | 
|  | 369   EXPECT_EQ(string16(), GetTooltipText()); | 
|  | 370   EXPECT_EQ(NULL, GetTooltipWindow()); | 
|  | 371 | 
|  | 372   TooltipTestView* view2 = new TooltipTestView; | 
|  | 373   AddViewToWidgetAndResize(widget.get(), view2); | 
|  | 374   view2->set_tooltip_text(ASCIIToUTF16("Tooltip Text for view 2")); | 
|  | 375 | 
|  | 376   aura::Window* window = widget->GetNativeView(); | 
|  | 377 | 
|  | 378   // Fire tooltip timer so tooltip becomes visible. | 
|  | 379   aura::test::EventGenerator generator(Shell::GetPrimaryRootWindow()); | 
|  | 380   generator.MoveMouseRelativeTo(window, | 
|  | 381                                 view1->bounds().CenterPoint()); | 
|  | 382   FireTooltipTimer(); | 
|  | 383   EXPECT_TRUE(IsTooltipVisible()); | 
|  | 384   EXPECT_TRUE(IsTooltipShownTimerRunning()); | 
|  | 385 | 
|  | 386   generator.PressKey(ui::VKEY_1, 0); | 
|  | 387   EXPECT_FALSE(IsTooltipVisible()); | 
|  | 388   EXPECT_FALSE(IsTooltipTimerRunning()); | 
|  | 389   EXPECT_FALSE(IsTooltipShownTimerRunning()); | 
|  | 390 | 
|  | 391   // Moving the mouse inside |view1| should not change the state of the tooltip | 
|  | 392   // or the timers. | 
|  | 393   for (int i = 0; i < 50; i++) { | 
|  | 394     generator.MoveMouseBy(1, 0); | 
|  | 395     EXPECT_FALSE(IsTooltipVisible()); | 
|  | 396     EXPECT_FALSE(IsTooltipTimerRunning()); | 
|  | 397     EXPECT_FALSE(IsTooltipShownTimerRunning()); | 
|  | 398     EXPECT_EQ(window, | 
|  | 399         Shell::GetPrimaryRootWindow()->GetEventHandlerForPoint( | 
|  | 400             generator.current_location())); | 
|  | 401     string16 expected_tooltip = ASCIIToUTF16("Tooltip Text for view 1"); | 
|  | 402     EXPECT_EQ(expected_tooltip, aura::client::GetTooltipText(window)); | 
|  | 403     EXPECT_EQ(expected_tooltip, GetTooltipText()); | 
|  | 404     EXPECT_EQ(window, GetTooltipWindow()); | 
|  | 405   } | 
|  | 406 | 
|  | 407   // Now we move the mouse on to |view2|. It should re-start the tooltip timer. | 
|  | 408   generator.MoveMouseBy(1, 0); | 
|  | 409   EXPECT_TRUE(IsTooltipTimerRunning()); | 
|  | 410   FireTooltipTimer(); | 
|  | 411   EXPECT_TRUE(IsTooltipVisible()); | 
|  | 412   EXPECT_TRUE(IsTooltipShownTimerRunning()); | 
|  | 413   string16 expected_tooltip = ASCIIToUTF16("Tooltip Text for view 2"); | 
|  | 414   EXPECT_EQ(expected_tooltip, aura::client::GetTooltipText(window)); | 
|  | 415   EXPECT_EQ(expected_tooltip, GetTooltipText()); | 
|  | 416   EXPECT_EQ(window, GetTooltipWindow()); | 
|  | 417 } | 
|  | 418 | 
|  | 419 TEST_F(TooltipControllerTest, TooltipHidesOnTimeoutAndStaysHiddenUntilChange) { | 
|  | 420   scoped_ptr<views::Widget> widget(CreateNewWidget()); | 
|  | 421   TooltipTestView* view1 = new TooltipTestView; | 
|  | 422   AddViewToWidgetAndResize(widget.get(), view1); | 
|  | 423   view1->set_tooltip_text(ASCIIToUTF16("Tooltip Text for view 1")); | 
|  | 424   EXPECT_EQ(string16(), GetTooltipText()); | 
|  | 425   EXPECT_EQ(NULL, GetTooltipWindow()); | 
|  | 426 | 
|  | 427   TooltipTestView* view2 = new TooltipTestView; | 
|  | 428   AddViewToWidgetAndResize(widget.get(), view2); | 
|  | 429   view2->set_tooltip_text(ASCIIToUTF16("Tooltip Text for view 2")); | 
|  | 430 | 
|  | 431   aura::Window* window = widget->GetNativeView(); | 
|  | 432 | 
|  | 433   // Fire tooltip timer so tooltip becomes visible. | 
|  | 434   aura::test::EventGenerator generator(Shell::GetPrimaryRootWindow()); | 
|  | 435   generator.MoveMouseRelativeTo(window, | 
|  | 436                                 view1->bounds().CenterPoint()); | 
|  | 437   FireTooltipTimer(); | 
|  | 438   EXPECT_TRUE(IsTooltipVisible()); | 
|  | 439   EXPECT_TRUE(IsTooltipShownTimerRunning()); | 
|  | 440 | 
|  | 441   FireTooltipShownTimer(); | 
|  | 442   EXPECT_FALSE(IsTooltipVisible()); | 
|  | 443   EXPECT_FALSE(IsTooltipTimerRunning()); | 
|  | 444   EXPECT_FALSE(IsTooltipShownTimerRunning()); | 
|  | 445 | 
|  | 446   // Moving the mouse inside |view1| should not change the state of the tooltip | 
|  | 447   // or the timers. | 
|  | 448   for (int i = 0; i < 50; i++) { | 
|  | 449     generator.MoveMouseBy(1, 0); | 
|  | 450     EXPECT_FALSE(IsTooltipVisible()); | 
|  | 451     EXPECT_FALSE(IsTooltipTimerRunning()); | 
|  | 452     EXPECT_FALSE(IsTooltipShownTimerRunning()); | 
|  | 453     EXPECT_EQ(window, | 
|  | 454         Shell::GetPrimaryRootWindow()->GetEventHandlerForPoint( | 
|  | 455             generator.current_location())); | 
|  | 456     string16 expected_tooltip = ASCIIToUTF16("Tooltip Text for view 1"); | 
|  | 457     EXPECT_EQ(expected_tooltip, aura::client::GetTooltipText(window)); | 
|  | 458     EXPECT_EQ(expected_tooltip, GetTooltipText()); | 
|  | 459     EXPECT_EQ(window, GetTooltipWindow()); | 
|  | 460   } | 
|  | 461 | 
|  | 462   // Now we move the mouse on to |view2|. It should re-start the tooltip timer. | 
|  | 463   generator.MoveMouseBy(1, 0); | 
|  | 464   EXPECT_TRUE(IsTooltipTimerRunning()); | 
|  | 465   FireTooltipTimer(); | 
|  | 466   EXPECT_TRUE(IsTooltipVisible()); | 
|  | 467   EXPECT_TRUE(IsTooltipShownTimerRunning()); | 
|  | 468   string16 expected_tooltip = ASCIIToUTF16("Tooltip Text for view 2"); | 
|  | 469   EXPECT_EQ(expected_tooltip, aura::client::GetTooltipText(window)); | 
|  | 470   EXPECT_EQ(expected_tooltip, GetTooltipText()); | 
|  | 471   EXPECT_EQ(window, GetTooltipWindow()); | 
|  | 472 } | 
|  | 473 | 
| 351 }  // namespace test | 474 }  // namespace test | 
| 352 }  // namespace ash | 475 }  // namespace ash | 
| OLD | NEW | 
|---|