Index: chrome/browser/ui/gtk/omnibox/omnibox_popup_view_gtk_unittest.cc |
diff --git a/chrome/browser/ui/gtk/omnibox/omnibox_popup_view_gtk_unittest.cc b/chrome/browser/ui/gtk/omnibox/omnibox_popup_view_gtk_unittest.cc |
index 729ad949042bf50cdbdb091dc33c04a734bc9ff8..4d268f31991be6b4938ac8a6a032b93ae192e695 100644 |
--- a/chrome/browser/ui/gtk/omnibox/omnibox_popup_view_gtk_unittest.cc |
+++ b/chrome/browser/ui/gtk/omnibox/omnibox_popup_view_gtk_unittest.cc |
@@ -6,10 +6,16 @@ |
#include <gtk/gtk.h> |
+#include "base/memory/scoped_ptr.h" |
+#include "base/metrics/field_trial.h" |
#include "base/strings/utf_string_conversions.h" |
#include "chrome/browser/autocomplete/autocomplete_match.h" |
+#include "chrome/browser/autocomplete/autocomplete_result.h" |
+#include "components/variations/entropy_provider.h" |
#include "testing/platform_test.h" |
#include "ui/base/gtk/gtk_hig_constants.h" |
+#include "ui/gfx/font.h" |
+#include "ui/gfx/rect.h" |
namespace { |
@@ -19,6 +25,38 @@ const GdkColor kContentTextColor = GDK_COLOR_RGB(0x00, 0x00, 0x00); |
const GdkColor kDimContentTextColor = GDK_COLOR_RGB(0x80, 0x80, 0x80); |
const GdkColor kURLTextColor = GDK_COLOR_RGB(0x00, 0x88, 0x00); |
+class TestableOmniboxPopupViewGtk : public OmniboxPopupViewGtk { |
+ public: |
+ TestableOmniboxPopupViewGtk() |
+ : OmniboxPopupViewGtk(gfx::Font(), NULL, NULL, NULL), |
+ show_called_(false), |
+ hide_called_(false) { |
+ } |
+ |
+ virtual ~TestableOmniboxPopupViewGtk() { |
+ } |
+ |
+ virtual void Show(size_t num_results) OVERRIDE { |
+ show_called_ = true; |
+ } |
+ |
+ virtual void Hide() OVERRIDE { |
+ hide_called_ = true; |
+ } |
+ |
+ virtual const AutocompleteResult& GetResult() const OVERRIDE { |
+ return result_; |
+ } |
+ |
+ using OmniboxPopupViewGtk::GetRectForLine; |
+ using OmniboxPopupViewGtk::LineFromY; |
+ using OmniboxPopupViewGtk::GetHiddenMatchCount; |
+ |
+ AutocompleteResult result_; |
+ bool show_called_; |
+ bool hide_called_; |
+}; |
+ |
} // namespace |
class OmniboxPopupViewGtkTest : public PlatformTest { |
@@ -30,6 +68,9 @@ class OmniboxPopupViewGtkTest : public PlatformTest { |
window_ = gtk_window_new(GTK_WINDOW_POPUP); |
layout_ = gtk_widget_create_pango_layout(window_, NULL); |
+ view_.reset(new TestableOmniboxPopupViewGtk); |
+ field_trial_list_.reset(new base::FieldTrialList( |
+ new metrics::SHA1EntropyProvider("42"))); |
} |
virtual void TearDown() { |
@@ -180,6 +221,9 @@ class OmniboxPopupViewGtkTest : public PlatformTest { |
GtkWidget* window_; |
PangoLayout* layout_; |
+ scoped_ptr<TestableOmniboxPopupViewGtk> view_; |
+ scoped_ptr<base::FieldTrialList> field_trial_list_; |
+ |
private: |
DISALLOW_COPY_AND_ASSIGN(OmniboxPopupViewGtkTest); |
}; |
@@ -371,3 +415,70 @@ TEST_F(OmniboxPopupViewGtkTest, DecorateMatchedStringURLMatch) { |
PANGO_ATTR_FOREGROUND)); |
EXPECT_TRUE(RunHasColor(0U, kContents.length(), kURLTextColor)); |
} |
+ |
+// Test that the popup is not shown if there is only one hidden match. |
+TEST_F(OmniboxPopupViewGtkTest, HidesIfOnlyOneHiddenMatch) { |
+ ASSERT_TRUE(base::FieldTrialList::CreateFieldTrial( |
+ "InstantExtended", "Group1 hide_verbatim:1")); |
+ ACMatches matches; |
+ AutocompleteMatch match; |
+ match.destination_url = GURL("http://verbatim/"); |
+ match.type = AutocompleteMatchType::SEARCH_WHAT_YOU_TYPED; |
+ matches.push_back(match); |
+ view_->result_.AppendMatches(matches); |
+ ASSERT_TRUE(view_->result_.ShouldHideTopMatch()); |
+ |
+ // Since there is only one match which is hidden, the popup should close. |
+ view_->UpdatePopupAppearance(); |
+ EXPECT_TRUE(view_->hide_called_); |
+} |
+ |
+// Test that the top match is skipped if the model indicates it should be |
+// hidden. |
+TEST_F(OmniboxPopupViewGtkTest, SkipsTopMatchIfHidden) { |
+ ASSERT_TRUE(base::FieldTrialList::CreateFieldTrial( |
+ "InstantExtended", "Group1 hide_verbatim:1")); |
+ ACMatches matches; |
+ { |
+ AutocompleteMatch match; |
+ match.destination_url = GURL("http://verbatim/"); |
+ match.type = AutocompleteMatchType::SEARCH_WHAT_YOU_TYPED; |
+ matches.push_back(match); |
+ } |
+ { |
+ AutocompleteMatch match; |
+ match.destination_url = GURL("http://not-verbatim/"); |
+ match.type = AutocompleteMatchType::SEARCH_OTHER_ENGINE; |
+ matches.push_back(match); |
+ } |
+ view_->result_.AppendMatches(matches); |
+ ASSERT_TRUE(view_->result_.ShouldHideTopMatch()); |
+ |
+ EXPECT_EQ(1U, view_->GetHiddenMatchCount()); |
+ EXPECT_EQ(1U, view_->LineFromY(0)); |
+ gfx::Rect rect = view_->GetRectForLine(1, 100); |
+ EXPECT_EQ(1, rect.y()); |
+} |
+ |
+// Test that the top match is not skipped if the model does not indicate it |
+// should be hidden. |
+TEST_F(OmniboxPopupViewGtkTest, DoesNotSkipTopMatchIfVisible) { |
+ ASSERT_TRUE(base::FieldTrialList::CreateFieldTrial( |
+ "InstantExtended", "Group1 hide_verbatim:1")); |
+ ACMatches matches; |
+ AutocompleteMatch match; |
+ match.destination_url = GURL("http://not-verbatim/"); |
+ match.type = AutocompleteMatchType::SEARCH_OTHER_ENGINE; |
+ matches.push_back(match); |
+ view_->result_.AppendMatches(matches); |
+ ASSERT_FALSE(view_->result_.ShouldHideTopMatch()); |
+ |
+ EXPECT_EQ(0U, view_->GetHiddenMatchCount()); |
+ EXPECT_EQ(0U, view_->LineFromY(0)); |
+ gfx::Rect rect = view_->GetRectForLine(1, 100); |
+ EXPECT_EQ(25, rect.y()); |
+ |
+ // The single match is visible so the popup should be open. |
+ view_->UpdatePopupAppearance(); |
+ EXPECT_TRUE(view_->show_called_); |
+} |