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

Unified Diff: chrome/browser/ui/views/omnibox/omnibox_view_views_unittest.cc

Issue 2727253006: Cleanup of omnibox_view_views_unittest.cc in advance of adding more to it. (Closed)
Patch Set: Review comments Created 3 years, 9 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 | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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());
+ }
}
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698