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

Unified Diff: ui/views/widget/native_widget_mac_unittest.mm

Issue 1137653005: MacViews: Implement Tooltips (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: respond to comments Created 5 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « ui/views/widget/native_widget_mac.mm ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ui/views/widget/native_widget_mac_unittest.mm
diff --git a/ui/views/widget/native_widget_mac_unittest.mm b/ui/views/widget/native_widget_mac_unittest.mm
index c30c5aaeaf52603d80cbbf583ee0c7192869eb1c..ec3d4c9be9748be88b63664240e4d7e77a0cfab6 100644
--- a/ui/views/widget/native_widget_mac_unittest.mm
+++ b/ui/views/widget/native_widget_mac_unittest.mm
@@ -9,11 +9,13 @@
#import "base/mac/scoped_nsobject.h"
#include "base/run_loop.h"
#include "base/strings/utf_string_conversions.h"
+#include "base/strings/sys_string_conversions.h"
#import "testing/gtest_mac.h"
#import "ui/events/test/cocoa_test_event_utils.h"
#include "ui/events/test/event_generator.h"
#import "ui/gfx/mac/coordinate_conversion.h"
#import "ui/views/cocoa/bridged_native_widget.h"
+#include "ui/views/controls/button/label_button.h"
#include "ui/views/controls/label.h"
#include "ui/views/native_cursor.h"
#include "ui/views/test/test_widget_observer.h"
@@ -426,5 +428,75 @@ TEST_F(NativeWidgetMacTest, NonWidgetParent) {
EXPECT_EQ(0u, [[native_parent childWindows] count]);
}
+// Use Native APIs to query the tooltip text that would be shown once the
+// tooltip delay had elapsed.
+base::string16 TooltipTextForWidget(Widget* widget) {
+ // For Mac, the actual location doesn't matter, since there is only one native
+ // view and it fills the window. This just assumes the window is at least big
+ // big enough for a constant coordinate to be within it.
+ NSPoint point = NSMakePoint(30, 30);
+ NSView* view = [widget->GetNativeView() hitTest:point];
+ NSString* text =
+ [view view:view stringForToolTip:0 point:point userData:nullptr];
+ return base::SysNSStringToUTF16(text);
+}
+
+// Tests tooltips. The test doesn't wait for tooltips to appear. That is, the
+// test assumes Cocoa calls stringForToolTip: at appropriate times and that,
+// when a tooltip is already visible, changing it causes an update. These were
+// tested manually by inserting a base::RunLoop.Run().
+TEST_F(NativeWidgetMacTest, Tooltips) {
+ Widget* widget = CreateTopLevelPlatformWidget();
+ gfx::Rect screen_rect(50, 50, 100, 100);
+ widget->SetBounds(screen_rect);
+
+ const base::string16 tooltip_back = base::ASCIIToUTF16("Back");
+ const base::string16 tooltip_front = base::ASCIIToUTF16("Front");
+ const base::string16 long_tooltip(2000, 'W');
+
+ // Create a nested layout to test corner cases.
+ LabelButton* back = new LabelButton(nullptr, base::string16());
+ back->SetBounds(10, 10, 80, 80);
+ widget->GetContentsView()->AddChildView(back);
+ widget->Show();
+
+ ui::test::EventGenerator event_generator(GetContext(),
+ widget->GetNativeWindow());
+
+ // Initially, there should be no tooltip.
+ event_generator.MoveMouseTo(gfx::Point(50, 50));
+ EXPECT_TRUE(TooltipTextForWidget(widget).empty());
+
+ // Create a new button for the "front", and set the tooltip, but don't add it
+ // to the view hierarchy yet.
+ LabelButton* front = new LabelButton(nullptr, base::string16());
+ front->SetBounds(20, 20, 40, 40);
+ front->SetTooltipText(tooltip_front);
+
+ // Changing the tooltip text shouldn't require an additional mousemove to take
+ // effect.
+ EXPECT_TRUE(TooltipTextForWidget(widget).empty());
+ back->SetTooltipText(tooltip_back);
+ EXPECT_EQ(tooltip_back, TooltipTextForWidget(widget));
+
+ // Adding a new view under the mouse should also take immediate effect.
+ back->AddChildView(front);
+ EXPECT_EQ(tooltip_front, TooltipTextForWidget(widget));
+
+ // A long tooltip will be wrapped by Cocoa, but the full string should appear.
+ // Note that render widget hosts clip at 1024 to prevent DOS, but in toolkit-
+ // views the UI is more trusted.
+ front->SetTooltipText(long_tooltip);
+ EXPECT_EQ(long_tooltip, TooltipTextForWidget(widget));
+
+ // Move the mouse to a different view - tooltip should change.
+ event_generator.MoveMouseTo(gfx::Point(15, 15));
+ EXPECT_EQ(tooltip_back, TooltipTextForWidget(widget));
+
+ // Move the mouse off of any view, tooltip should clear.
+ event_generator.MoveMouseTo(gfx::Point(5, 5));
+ EXPECT_TRUE(TooltipTextForWidget(widget).empty());
+}
+
} // namespace test
} // namespace views
« no previous file with comments | « ui/views/widget/native_widget_mac.mm ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698