Index: chrome/browser/ui/views/omnibox/omnibox_view_views_unittest.cc |
diff --git a/chrome/browser/ui/views/omnibox/omnibox_view_views_unittest.cc b/chrome/browser/ui/views/omnibox/omnibox_view_views_unittest.cc |
index f6718c78ed2d131abe6579a95317629920ecd5dc..d1b4eedd5c61fa8d4ea7223c7fcce10f8bba7858 100644 |
--- a/chrome/browser/ui/views/omnibox/omnibox_view_views_unittest.cc |
+++ b/chrome/browser/ui/views/omnibox/omnibox_view_views_unittest.cc |
@@ -26,59 +26,49 @@ |
#include "chrome/browser/chromeos/input_method/mock_input_method_manager_impl.h" |
#endif |
+using gfx::Range; |
+ |
namespace { |
-class TestingOmniboxViewViews : public OmniboxViewViews { |
+// TestingOmniboxView --------------------------------------------------------- |
+ |
+class TestingOmniboxView : public OmniboxViewViews { |
public: |
- TestingOmniboxViewViews(OmniboxEditController* controller, |
- Profile* profile, |
- CommandUpdater* command_updater) |
- : OmniboxViewViews(controller, |
- profile, |
- command_updater, |
- false, |
- nullptr, |
- gfx::FontList()), |
- update_popup_call_count_(0), |
- profile_(profile), |
- base_text_is_emphasized_(false) {} |
- |
- void CheckUpdatePopupCallInfo(size_t call_count, const base::string16& text, |
- const gfx::Range& selection_range) { |
- EXPECT_EQ(call_count, update_popup_call_count_); |
- EXPECT_EQ(text, update_popup_text_); |
- EXPECT_EQ(selection_range, update_popup_selection_range_); |
+ enum BaseTextEmphasis { |
+ DEEMPHASIZED, |
+ EMPHASIZED, |
+ UNSET, |
+ }; |
+ |
+ TestingOmniboxView(OmniboxEditController* controller, |
+ Profile* profile, |
+ CommandUpdater* command_updater); |
+ |
+ static BaseTextEmphasis to_base_text_emphasis(bool emphasize) { |
+ return emphasize ? EMPHASIZED : DEEMPHASIZED; |
} |
- void EmphasizeURLComponents() override { |
- UpdateTextStyle(text(), ChromeAutocompleteSchemeClassifier(profile_)); |
- } |
+ void ResetEmphasisTestState(); |
- gfx::Range scheme_range() const { return scheme_range_; } |
- gfx::Range emphasis_range() const { return emphasis_range_; } |
- bool base_text_is_emphasized() const { return base_text_is_emphasized_; } |
+ void CheckUpdatePopupCallInfo(size_t call_count, |
+ const base::string16& text, |
+ const Range& selection_range); |
- private: |
- // OmniboxView: |
- void UpdatePopup() override { |
- ++update_popup_call_count_; |
- update_popup_text_ = text(); |
- update_popup_selection_range_ = GetSelectedRange(); |
- } |
+ Range scheme_range() const { return scheme_range_; } |
+ Range emphasis_range() const { return emphasis_range_; } |
+ BaseTextEmphasis base_text_emphasis() const { return base_text_emphasis_; } |
- void SetEmphasis(bool emphasize, const gfx::Range& range) override { |
- if (range == gfx::Range::InvalidRange()) { |
- base_text_is_emphasized_ = emphasize; |
- return; |
- } |
+ // OmniboxViewViews: |
+ void EmphasizeURLComponents() override; |
- EXPECT_TRUE(emphasize); |
- emphasis_range_ = range; |
- } |
- |
- void UpdateSchemeStyle(const gfx::Range& range) override { |
- scheme_range_ = range; |
- } |
+ private: |
+ // OmniboxViewViews: |
+ // There is no popup and it doesn't actually matter whether we change the |
+ // visual style of the text, so these methods are all overridden merely to |
+ // capture relevant state at the time of the call, to be checked by test code. |
+ void UpdatePopup() override; |
+ void SetEmphasis(bool emphasize, const Range& range) override; |
+ void UpdateSchemeStyle(const Range& range) override; |
// Simplistic test override returns whether a given string looks like a URL |
// without having to mock AutocompleteClassifier objects and their |
@@ -89,29 +79,81 @@ class TestingOmniboxViewViews : public OmniboxViewViews { |
return looks_like_url; |
} |
- size_t update_popup_call_count_; |
+ size_t update_popup_call_count_ = 0; |
base::string16 update_popup_text_; |
- gfx::Range update_popup_selection_range_; |
+ Range update_popup_selection_range_; |
Profile* profile_; |
// Range of the last scheme logged by UpdateSchemeStyle(). |
- gfx::Range scheme_range_; |
+ Range scheme_range_; |
// Range of the last text emphasized by SetEmphasis(). |
- gfx::Range emphasis_range_; |
+ Range emphasis_range_; |
// SetEmphasis() logs whether the base color of the text is emphasized. |
- bool base_text_is_emphasized_; |
+ BaseTextEmphasis base_text_emphasis_ = UNSET; |
- DISALLOW_COPY_AND_ASSIGN(TestingOmniboxViewViews); |
+ DISALLOW_COPY_AND_ASSIGN(TestingOmniboxView); |
}; |
+TestingOmniboxView::TestingOmniboxView(OmniboxEditController* controller, |
+ Profile* profile, |
+ CommandUpdater* command_updater) |
+ : OmniboxViewViews(controller, |
+ profile, |
+ command_updater, |
+ false, |
+ nullptr, |
+ gfx::FontList()), |
+ profile_(profile) {} |
+ |
+void TestingOmniboxView::ResetEmphasisTestState() { |
+ base_text_emphasis_ = UNSET; |
+ emphasis_range_ = Range::InvalidRange(); |
+ scheme_range_ = Range::InvalidRange(); |
+} |
+ |
+void TestingOmniboxView::CheckUpdatePopupCallInfo( |
+ size_t call_count, |
+ const base::string16& text, |
+ const Range& selection_range) { |
+ EXPECT_EQ(call_count, update_popup_call_count_); |
+ EXPECT_EQ(text, update_popup_text_); |
+ EXPECT_EQ(selection_range, update_popup_selection_range_); |
+} |
+ |
+void TestingOmniboxView::EmphasizeURLComponents() { |
+ UpdateTextStyle(text(), ChromeAutocompleteSchemeClassifier(profile_)); |
+} |
+ |
+void TestingOmniboxView::UpdatePopup() { |
+ ++update_popup_call_count_; |
+ update_popup_text_ = text(); |
+ update_popup_selection_range_ = GetSelectedRange(); |
+} |
+ |
+void TestingOmniboxView::SetEmphasis(bool emphasize, const Range& range) { |
+ if (range == Range::InvalidRange()) { |
+ base_text_emphasis_ = to_base_text_emphasis(emphasize); |
+ return; |
+ } |
+ |
+ EXPECT_TRUE(emphasize); |
+ emphasis_range_ = range; |
+} |
+ |
+void TestingOmniboxView::UpdateSchemeStyle(const Range& range) { |
+ scheme_range_ = range; |
+} |
+ |
+// TestingOmniboxEditController ----------------------------------------------- |
+ |
class TestingOmniboxEditController : public ChromeOmniboxEditController { |
public: |
explicit TestingOmniboxEditController(CommandUpdater* command_updater) |
: ChromeOmniboxEditController(command_updater) {} |
- protected: |
+ private: |
// ChromeOmniboxEditController: |
void UpdateWithoutTabRestore() override {} |
void OnChanged() override {} |
@@ -119,66 +161,70 @@ class TestingOmniboxEditController : public ChromeOmniboxEditController { |
const ToolbarModel* GetToolbarModel() const override { return nullptr; } |
content::WebContents* GetWebContents() override { return nullptr; } |
- private: |
DISALLOW_COPY_AND_ASSIGN(TestingOmniboxEditController); |
}; |
} // namespace |
+// OmniboxViewViewsTest ------------------------------------------------------- |
+ |
class OmniboxViewViewsTest : public testing::Test { |
public: |
- OmniboxViewViewsTest() |
- : command_updater_(NULL), |
- omnibox_edit_controller_(&command_updater_) { |
- } |
- |
- TestingOmniboxViewViews* omnibox_view() { |
- return omnibox_view_.get(); |
- } |
- |
- views::Textfield* omnibox_textfield() { |
- return omnibox_view(); |
- } |
+ OmniboxViewViewsTest(); |
+ TestingOmniboxView* omnibox_view() { return omnibox_view_.get(); } |
+ views::Textfield* omnibox_textfield() { return omnibox_view(); } |
ui::TextEditCommand scheduled_text_edit_command() const { |
return test_api_->scheduled_text_edit_command(); |
} |
- void SetAndEmphasizeText(const std::string& new_text) { |
- omnibox_textfield()->SetText(base::ASCIIToUTF16(new_text)); |
- omnibox_view()->EmphasizeURLComponents(); |
- } |
+ // Sets |new_text| as the omnibox text, and emphasizes it appropriately. |
+ void SetAndEmphasizeText(const std::string& new_text); |
private: |
// testing::Test: |
- void SetUp() override { |
-#if defined(OS_CHROMEOS) |
- chromeos::input_method::InitializeForTesting( |
- new chromeos::input_method::MockInputMethodManagerImpl); |
-#endif |
- omnibox_view_.reset(new TestingOmniboxViewViews( |
- &omnibox_edit_controller_, &profile_, &command_updater_)); |
- test_api_.reset(new views::TextfieldTestApi(omnibox_view_.get())); |
- omnibox_view_->Init(); |
- } |
- |
- void TearDown() override { |
- omnibox_view_.reset(); |
-#if defined(OS_CHROMEOS) |
- chromeos::input_method::Shutdown(); |
-#endif |
- } |
+ void SetUp() override; |
+ void TearDown() override; |
content::TestBrowserThreadBundle thread_bundle_; |
TestingProfile profile_; |
CommandUpdater command_updater_; |
TestingOmniboxEditController omnibox_edit_controller_; |
- std::unique_ptr<TestingOmniboxViewViews> omnibox_view_; |
+ std::unique_ptr<TestingOmniboxView> omnibox_view_; |
std::unique_ptr<views::TextfieldTestApi> test_api_; |
DISALLOW_COPY_AND_ASSIGN(OmniboxViewViewsTest); |
}; |
+OmniboxViewViewsTest::OmniboxViewViewsTest() |
+ : command_updater_(nullptr), omnibox_edit_controller_(&command_updater_) {} |
+ |
+void OmniboxViewViewsTest::SetAndEmphasizeText(const std::string& new_text) { |
+ omnibox_view()->ResetEmphasisTestState(); |
+ omnibox_view()->SetText(base::ASCIIToUTF16(new_text)); |
+ omnibox_view()->EmphasizeURLComponents(); |
+} |
+ |
+void OmniboxViewViewsTest::SetUp() { |
+#if defined(OS_CHROMEOS) |
+ chromeos::input_method::InitializeForTesting( |
+ new chromeos::input_method::MockInputMethodManagerImpl); |
+#endif |
+ omnibox_view_ = base::MakeUnique<TestingOmniboxView>( |
+ &omnibox_edit_controller_, &profile_, &command_updater_); |
+ test_api_ = base::MakeUnique<views::TextfieldTestApi>(omnibox_view_.get()); |
+ omnibox_view_->Init(); |
+} |
+ |
+void OmniboxViewViewsTest::TearDown() { |
+ omnibox_view_.reset(); |
+#if defined(OS_CHROMEOS) |
+ chromeos::input_method::Shutdown(); |
+#endif |
+} |
+ |
+// Actual tests --------------------------------------------------------------- |
+ |
// Checks that a single change of the text in the omnibox invokes |
// only one call to OmniboxViewViews::UpdatePopup(). |
TEST_F(OmniboxViewViewsTest, UpdatePopupCall) { |
@@ -186,20 +232,20 @@ TEST_F(OmniboxViewViewsTest, UpdatePopupCall) { |
ui::DomKey::FromCharacter('a'), |
ui::EventTimeForNow()); |
omnibox_textfield()->InsertChar(char_event); |
- omnibox_view()->CheckUpdatePopupCallInfo( |
- 1, base::ASCIIToUTF16("a"), gfx::Range(1)); |
+ omnibox_view()->CheckUpdatePopupCallInfo(1, base::ASCIIToUTF16("a"), |
+ Range(1)); |
char_event = |
ui::KeyEvent(ui::ET_KEY_PRESSED, ui::VKEY_B, ui::DomCode::US_B, 0, |
ui::DomKey::FromCharacter('b'), ui::EventTimeForNow()); |
omnibox_textfield()->InsertChar(char_event); |
- omnibox_view()->CheckUpdatePopupCallInfo( |
- 2, base::ASCIIToUTF16("ab"), gfx::Range(2)); |
+ omnibox_view()->CheckUpdatePopupCallInfo(2, base::ASCIIToUTF16("ab"), |
+ Range(2)); |
ui::KeyEvent pressed(ui::ET_KEY_PRESSED, ui::VKEY_BACK, 0); |
omnibox_textfield()->OnKeyEvent(&pressed); |
- omnibox_view()->CheckUpdatePopupCallInfo( |
- 3, base::ASCIIToUTF16("a"), gfx::Range(1)); |
+ omnibox_view()->CheckUpdatePopupCallInfo(3, base::ASCIIToUTF16("a"), |
+ Range(1)); |
} |
// Test that the scheduled text edit command is cleared when Textfield receives |
@@ -216,67 +262,37 @@ TEST_F(OmniboxViewViewsTest, ScheduledTextEditCommand) { |
scheduled_text_edit_command()); |
} |
-// Ensure that the scheme is emphasized for data: URLs. |
-TEST_F(OmniboxViewViewsTest, TestEmphasisForDATA) { |
- SetAndEmphasizeText("data:text/html,Hello%20World"); |
- EXPECT_EQ(gfx::Range(0, 4), omnibox_view()->scheme_range()); |
- EXPECT_FALSE(omnibox_view()->base_text_is_emphasized()); |
- EXPECT_EQ(gfx::Range(0, 4), omnibox_view()->emphasis_range()); |
-} |
- |
-// Ensure that the origin is emphasized for http: URLs. |
-TEST_F(OmniboxViewViewsTest, TestEmphasisForHTTP) { |
- SetAndEmphasizeText("http://www.example.com/path/file.htm"); |
- EXPECT_EQ(gfx::Range(0, 4), omnibox_view()->scheme_range()); |
- EXPECT_FALSE(omnibox_view()->base_text_is_emphasized()); |
- EXPECT_EQ(gfx::Range(7, 22), omnibox_view()->emphasis_range()); |
-} |
- |
-// Ensure that the origin is emphasized for https: URLs. |
-TEST_F(OmniboxViewViewsTest, TestEmphasisForHTTPS) { |
- SetAndEmphasizeText("https://www.example.com/path/file.htm"); |
- EXPECT_EQ(gfx::Range(0, 5), omnibox_view()->scheme_range()); |
- EXPECT_FALSE(omnibox_view()->base_text_is_emphasized()); |
- EXPECT_EQ(gfx::Range(8, 23), omnibox_view()->emphasis_range()); |
-} |
- |
-// Ensure that nothing is emphasized for chrome-extension: URLs. |
-TEST_F(OmniboxViewViewsTest, TestEmphasisForChromeExtensionScheme) { |
- SetAndEmphasizeText("chrome-extension://ldfbacdbackkjhclmhnjabngnppnkagl"); |
- EXPECT_EQ(gfx::Range(0, 16), omnibox_view()->scheme_range()); |
- EXPECT_FALSE(omnibox_view()->base_text_is_emphasized()); |
- EXPECT_EQ(gfx::Range(), omnibox_view()->emphasis_range()); |
-} |
- |
-// Ensure that everything is emphasized for unknown scheme hierarchical URLs. |
-TEST_F(OmniboxViewViewsTest, TestEmphasisForUnknownHierarchicalScheme) { |
- SetAndEmphasizeText("nosuchscheme://opaque/string"); |
- EXPECT_EQ(gfx::Range(0, 12), omnibox_view()->scheme_range()); |
- EXPECT_TRUE(omnibox_view()->base_text_is_emphasized()); |
- EXPECT_EQ(gfx::Range(), omnibox_view()->emphasis_range()); |
-} |
- |
-// Ensure that everything is emphasized for unknown scheme URLs. |
-TEST_F(OmniboxViewViewsTest, TestEmphasisForUnknownScheme) { |
- SetAndEmphasizeText("nosuchscheme:opaquestring"); |
- EXPECT_EQ(gfx::Range(0, 12), omnibox_view()->scheme_range()); |
- EXPECT_TRUE(omnibox_view()->base_text_is_emphasized()); |
- EXPECT_EQ(gfx::Range(), omnibox_view()->emphasis_range()); |
-} |
- |
-// Ensure that the origin is emphasized for URL-like text. |
-TEST_F(OmniboxViewViewsTest, TestEmphasisForPartialURLs) { |
- SetAndEmphasizeText("example/path/file"); |
- EXPECT_EQ(gfx::Range(), omnibox_view()->scheme_range()); |
- EXPECT_FALSE(omnibox_view()->base_text_is_emphasized()); |
- EXPECT_EQ(gfx::Range(0, 7), omnibox_view()->emphasis_range()); |
-} |
- |
-// Ensure that everything is emphasized for plain text. |
-TEST_F(OmniboxViewViewsTest, TestEmphasisForNonURLs) { |
- SetAndEmphasizeText("This is plain text"); |
- |
- EXPECT_EQ(gfx::Range(), omnibox_view()->scheme_range()); |
- EXPECT_TRUE(omnibox_view()->base_text_is_emphasized()); |
- EXPECT_EQ(gfx::Range(), omnibox_view()->emphasis_range()); |
+TEST_F(OmniboxViewViewsTest, Emphasis) { |
+ constexpr struct { |
+ const char* input; |
+ bool expected_base_text_emphasized; |
+ Range expected_emphasis_range; |
+ Range expected_scheme_range; |
+ } test_cases[] = { |
+ {"data:text/html,Hello%20World", false, Range(0, 4), Range(0, 4)}, |
+ {"http://www.example.com/path/file.htm", false, Range(7, 22), |
+ Range(0, 4)}, |
+ {"https://www.example.com/path/file.htm", false, Range(8, 23), |
+ Range(0, 5)}, |
+ {"chrome-extension://ldfbacdbackkjhclmhnjabngnppnkagl", false, |
+ Range::InvalidRange(), Range(0, 16)}, |
+ {"nosuchscheme://opaque/string", true, Range::InvalidRange(), |
+ Range(0, 12)}, |
+ {"nosuchscheme:opaquestring", true, Range::InvalidRange(), Range(0, 12)}, |
+ {"host.com/path/file", false, Range(0, 8), Range::InvalidRange()}, |
+ {"This is plain text", true, Range::InvalidRange(), |
+ Range::InvalidRange()}, |
+ }; |
+ |
+ for (const auto& test_case : test_cases) { |
+ SCOPED_TRACE(test_case.input); |
+ |
+ SetAndEmphasizeText(test_case.input); |
+ EXPECT_EQ(TestingOmniboxView::to_base_text_emphasis( |
+ test_case.expected_base_text_emphasized), |
+ omnibox_view()->base_text_emphasis()); |
+ EXPECT_EQ(test_case.expected_emphasis_range, |
+ omnibox_view()->emphasis_range()); |
+ EXPECT_EQ(test_case.expected_scheme_range, omnibox_view()->scheme_range()); |
+ } |
} |