Commit a12554af authored by Tommy C. Li's avatar Tommy C. Li Committed by Commit Bot

Omnibox UI Experiments: Steady state elisions - Unit test for arrow keys

When steady state elisions is on, the user focuses the Omnibox, and
presses an arrow key, we should unelide and place the cursor correctly.

This adds a unit test for the above behavior.

Bug: 797354
Change-Id: I417603b21c89a634dc494dcbe3a764f19d7f0d27
Reviewed-on: https://chromium-review.googlesource.com/996295
Commit-Queue: Tommy Li <tommycli@chromium.org>
Reviewed-by: default avatarPeter Kasting <pkasting@chromium.org>
Cr-Commit-Position: refs/heads/master@{#548513}
parent ae4f9ce3
......@@ -354,7 +354,7 @@ class OmniboxViewTest : public InProcessBrowserTest,
browser()->swap_toolbar_models(&toolbar_model);
}
test_toolbar_model_->set_text(text);
test_toolbar_model_->set_formatted_full_url(text);
omnibox_view->Update();
}
......
......@@ -121,6 +121,8 @@ class OmniboxViewViews : public OmniboxView,
FRIEND_TEST_ALL_PREFIXES(OmniboxViewViewsTest, MaintainCursorAfterFocusCycle);
FRIEND_TEST_ALL_PREFIXES(OmniboxViewViewsTest, OnBlur);
FRIEND_TEST_ALL_PREFIXES(OmniboxViewViewsTest, DoNotNavigateOnDrop);
FRIEND_TEST_ALL_PREFIXES(OmniboxViewViewsSteadyStateElisionsTest,
UnelideOnArrowKey);
// Update the field with |text| and set the selection.
void SetTextAndSelectedRange(const base::string16& text,
......
......@@ -9,6 +9,7 @@
#include <memory>
#include "base/macros.h"
#include "base/test/scoped_feature_list.h"
#include "build/build_config.h"
#include "chrome/browser/autocomplete/autocomplete_classifier_factory.h"
#include "chrome/browser/autocomplete/chrome_autocomplete_scheme_classifier.h"
......@@ -20,6 +21,7 @@
#include "chrome/test/base/testing_profile.h"
#include "chrome/test/views/chrome_views_test_base.h"
#include "components/omnibox/browser/omnibox_edit_model.h"
#include "components/omnibox/browser/omnibox_field_trial.h"
#include "components/toolbar/test_toolbar_model.h"
#include "content/public/test/test_browser_thread_bundle.h"
#include "testing/gtest/include/gtest/gtest.h"
......@@ -197,11 +199,12 @@ class OmniboxViewViewsTest : public ChromeViewsTestBase {
return test_api_->GetRenderText()->cursor_enabled();
}
private:
protected:
// testing::Test:
void SetUp() override;
void TearDown() override;
private:
content::TestBrowserThreadBundle thread_bundle_;
TestingProfile profile_;
TemplateURLServiceFactoryTestUtil util_;
......@@ -390,7 +393,7 @@ TEST_F(OmniboxViewViewsTest, Emphasis) {
}
TEST_F(OmniboxViewViewsTest, RevertOnBlur) {
toolbar_model()->set_text(base::ASCIIToUTF16("permanent text"));
toolbar_model()->set_formatted_full_url(base::ASCIIToUTF16("permanent text"));
omnibox_view()->model()->ResetDisplayUrls();
omnibox_view()->RevertAll();
......@@ -415,3 +418,79 @@ TEST_F(OmniboxViewViewsTest, RevertOnBlur) {
EXPECT_EQ(base::ASCIIToUTF16("permanent text"), omnibox_view()->text());
EXPECT_FALSE(omnibox_view()->model()->user_input_in_progress());
}
class OmniboxViewViewsSteadyStateElisionsTest : public OmniboxViewViewsTest {
protected:
void SetUp() override {
scoped_feature_list_.InitAndEnableFeature(
omnibox::kUIExperimentHideSteadyStateUrlSchemeAndSubdomains);
OmniboxViewViewsTest::SetUp();
toolbar_model()->set_formatted_full_url(
base::ASCIIToUTF16("https://example.com"));
toolbar_model()->set_url_for_display(base::ASCIIToUTF16("example.com"));
omnibox_view()->model()->ResetDisplayUrls();
omnibox_view()->RevertAll();
ExpectElidedUrlDisplayed();
}
void ExpectFullUrlDisplayed() {
EXPECT_EQ(base::ASCIIToUTF16("https://example.com"),
omnibox_view()->text());
EXPECT_TRUE(omnibox_view()->model()->user_input_in_progress());
}
void ExpectElidedUrlDisplayed() {
EXPECT_EQ(base::ASCIIToUTF16("example.com"), omnibox_view()->text());
EXPECT_FALSE(omnibox_view()->model()->user_input_in_progress());
}
// Used to access members that are marked private in views::TextField.
views::View* omnibox_textfield_view() { return omnibox_view(); }
private:
base::test::ScopedFeatureList scoped_feature_list_;
};
TEST_F(OmniboxViewViewsSteadyStateElisionsTest, StayElidedOnFocus) {
// We should not unelide on focus.
omnibox_textfield()->OnFocus();
EXPECT_EQ(OMNIBOX_FOCUS_VISIBLE, omnibox_view()->model()->focus_state());
ExpectElidedUrlDisplayed();
}
TEST_F(OmniboxViewViewsSteadyStateElisionsTest, UnelideOnArrowKey) {
omnibox_textfield()->OnFocus();
EXPECT_EQ(OMNIBOX_FOCUS_VISIBLE, omnibox_view()->model()->focus_state());
omnibox_view()->SelectAll(true);
EXPECT_TRUE(omnibox_view()->IsSelectAll());
ExpectElidedUrlDisplayed();
// Right key should unelide and move the cursor to the end.
omnibox_textfield_view()->OnKeyPressed(
ui::KeyEvent(ui::ET_KEY_PRESSED, ui::VKEY_RIGHT, 0));
ExpectFullUrlDisplayed();
size_t start, end;
omnibox_view()->GetSelectionBounds(&start, &end);
EXPECT_EQ(19U, start);
EXPECT_EQ(19U, end);
// Blur and restore the elided URL.
omnibox_textfield()->OnBlur();
omnibox_textfield()->OnFocus();
omnibox_view()->SelectAll(true);
ExpectElidedUrlDisplayed();
// Left key should unelide and move the cursor to the beginning of the elided
// part.
omnibox_textfield_view()->OnKeyPressed(
ui::KeyEvent(ui::ET_KEY_PRESSED, ui::VKEY_LEFT, 0));
ExpectFullUrlDisplayed();
omnibox_view()->GetSelectionBounds(&start, &end);
EXPECT_EQ(8U, start);
EXPECT_EQ(8U, end);
}
......@@ -146,7 +146,8 @@ TEST_F(OmniboxEditModelTest, AdjustTextForCopy) {
};
for (size_t i = 0; i < arraysize(input); ++i) {
toolbar_model()->set_text(base::ASCIIToUTF16(input[i].url_for_editing));
toolbar_model()->set_formatted_full_url(
base::ASCIIToUTF16(input[i].url_for_editing));
model()->ResetDisplayUrls();
model()->SetInputInProgress(input[i].is_match_selected_in_popup);
......
......@@ -19,11 +19,11 @@ TestToolbarModel::TestToolbarModel()
TestToolbarModel::~TestToolbarModel() {}
base::string16 TestToolbarModel::GetFormattedFullURL() const {
return text_;
return formatted_full_url_;
}
base::string16 TestToolbarModel::GetURLForDisplay() const {
return text_;
return url_for_display_;
}
GURL TestToolbarModel::GetURL() const {
......
......@@ -34,7 +34,12 @@ class TestToolbarModel : public ToolbarModel {
bool ShouldDisplayURL() const override;
bool IsOfflinePage() const override;
void set_text(const base::string16& text) { text_ = text; }
void set_formatted_full_url(const base::string16& url) {
formatted_full_url_ = url;
}
void set_url_for_display(const base::string16& url) {
url_for_display_ = url;
}
void set_url(const GURL& url) { url_ = url; }
void set_security_level(security_state::SecurityLevel security_level) {
security_level_ = security_level;
......@@ -49,7 +54,8 @@ class TestToolbarModel : public ToolbarModel {
void set_offline_page(bool offline_page) { offline_page_ = offline_page; }
private:
base::string16 text_;
base::string16 formatted_full_url_;
base::string16 url_for_display_;
GURL url_;
security_state::SecurityLevel security_level_ = security_state::NONE;
const gfx::VectorIcon* icon_ = nullptr;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment