blob: 5ae183303bebd5006a8c6dfcfb55e1118107124e [file] [log] [blame]
// Copyright 2024 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#import "base/strings/sys_string_conversions.h"
#import "components/omnibox/common/omnibox_features.h"
#import "ios/chrome/browser/omnibox/eg_tests/omnibox_app_interface.h"
#import "ios/chrome/browser/omnibox/eg_tests/omnibox_earl_grey.h"
#import "ios/chrome/browser/omnibox/eg_tests/omnibox_matchers.h"
#import "ios/chrome/browser/omnibox/eg_tests/omnibox_test_util.h"
#import "ios/chrome/browser/omnibox/public/omnibox_ui_features.h"
#import "ios/chrome/browser/shared/public/features/features.h"
#import "ios/chrome/common/NSString+Chromium.h"
#import "ios/chrome/grit/ios_strings.h"
#import "ios/chrome/test/earl_grey/chrome_actions.h"
#import "ios/chrome/test/earl_grey/chrome_earl_grey.h"
#import "ios/chrome/test/earl_grey/chrome_earl_grey_ui.h"
#import "ios/chrome/test/earl_grey/chrome_matchers.h"
#import "ios/chrome/test/earl_grey/chrome_matchers_app_interface.h"
#import "ios/chrome/test/earl_grey/chrome_test_case.h"
#import "ios/testing/earl_grey/app_launch_manager.h"
#import "ios/testing/earl_grey/earl_grey_test.h"
#import "net/test/embedded_test_server/embedded_test_server.h"
// Tests the omnibox text field when editing.
@interface OmniboxEditTestCase : ChromeTestCase
@end
@implementation OmniboxEditTestCase
- (void)setUp {
[super setUp];
// Start a server to be able to navigate to a web page.
self.testServer->RegisterRequestHandler(
base::BindRepeating(&omnibox::OmniboxHTTPResponses));
GREYAssertTrue(self.testServer->Start(), @"Test server failed to start.");
if (![ChromeTestCase forceRestartAndWipe]) {
[ChromeEarlGrey clearBrowsingHistory];
}
}
- (AppLaunchConfiguration)appConfigurationForTestCase {
AppLaunchConfiguration config = [super appConfigurationForTestCase];
// Enable flags for rich inline autocomplete tests.
if ([self isRunningTest:@selector(testRichInlineDefaultSuggestion)]) {
config.features_enabled.push_back(omnibox::kRichAutocompletion);
}
// Disable AutocompleteProvider types: TYPE_SEARCH and TYPE_ON_DEVICE_HEAD.
omnibox::DisableAutocompleteProviders(config, 1056);
return config;
}
#pragma mark - Test clear button
// Tests clearing text in the pre-edit state of the omnibox.
- (void)testClearButtonPreEditState {
[OmniboxEarlGrey openPage:omnibox::Page(1) testServer:self.testServer];
[ChromeEarlGreyUI focusOmnibox];
// Tap the clear button.
[[EarlGrey selectElementWithMatcher:omnibox::ClearButtonMatcher()]
performAction:grey_tap()];
// Verify that the omnibox is empty.
[[EarlGrey selectElementWithMatcher:chrome_test_util::Omnibox()]
assertWithMatcher:chrome_test_util::OmniboxText("")];
// Verify that the clear button is not visible.
[[EarlGrey selectElementWithMatcher:omnibox::ClearButtonMatcher()]
assertWithMatcher:grey_notVisible()];
}
// Tests clearing text in the edit state of the omnibox.
- (void)testClearButtonEditState {
[OmniboxEarlGrey openPage:omnibox::Page(1) testServer:self.testServer];
[ChromeEarlGreyUI focusOmniboxAndReplaceText:@"something"];
// Tap the clear button.
[[EarlGrey selectElementWithMatcher:omnibox::ClearButtonMatcher()]
performAction:grey_tap()];
// Verify that the omnibox is empty.
[[EarlGrey selectElementWithMatcher:chrome_test_util::Omnibox()]
assertWithMatcher:chrome_test_util::OmniboxText("")];
// Verify that the clear button is not visible.
[[EarlGrey selectElementWithMatcher:omnibox::ClearButtonMatcher()]
assertWithMatcher:grey_notVisible()];
}
#pragma mark - Test rich inline
// Tests navigating to a shortcut as a default match.
- (void)testRichInlineDefaultSuggestion {
// Add 2 shortcuts Page(1) and Page(2).
[OmniboxEarlGrey addShorcuts:2 toTestServer:self.testServer];
omnibox::Page shortcutPage = omnibox::Page(1);
// Type the shortcut input in the omnibox.
[ChromeEarlGreyUI
focusOmniboxAndReplaceText:[NSString cr_fromString:omnibox::PageTitle(
shortcutPage)]];
// The shortcut suggestion should be default match. Press enter to navigate to
// it.
// TODO(crbug.com/40916974): Use simulatePhysicalKeyboardEvent until
// replaceText can properly handle \n.
[ChromeEarlGrey simulatePhysicalKeyboardEvent:@"\n" flags:0];
[ChromeEarlGrey
waitForWebStateContainingText:omnibox::PageContent(shortcutPage)];
}
@end