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

Unified Diff: ios/chrome/browser/ui/find_bar/find_in_page_egtest.mm

Issue 2590473002: Upstream Chrome on iOS source code [5/11]. (Closed)
Patch Set: Created 4 years 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
Index: ios/chrome/browser/ui/find_bar/find_in_page_egtest.mm
diff --git a/ios/chrome/browser/ui/find_bar/find_in_page_egtest.mm b/ios/chrome/browser/ui/find_bar/find_in_page_egtest.mm
new file mode 100644
index 0000000000000000000000000000000000000000..dce6d1419d079ba12a11b14f9248627fcbb696c6
--- /dev/null
+++ b/ios/chrome/browser/ui/find_bar/find_in_page_egtest.mm
@@ -0,0 +1,228 @@
+// Copyright 2016 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#import <XCTest/XCTest.h>
+
+#include "base/strings/string_number_conversions.h"
+#include "components/strings/grit/components_strings.h"
+#import "ios/chrome/browser/find_in_page/find_in_page_controller.h"
+#import "ios/chrome/browser/ui/find_bar/find_bar_controller_ios.h"
+#import "ios/chrome/browser/ui/find_bar/find_bar_view.h"
+#import "ios/chrome/browser/ui/tools_menu/tools_menu_view_controller.h"
+#import "ios/chrome/test/app/tab_test_util.h"
+#import "ios/chrome/test/earl_grey/accessibility_util.h"
+#import "ios/chrome/test/earl_grey/chrome_assertions.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_test_case.h"
+#import "ios/testing/wait_util.h"
+#import "ios/web/public/test/http_server.h"
+#import "ios/web/public/test/http_server_util.h"
+#include "ui/base/l10n/l10n_util_mac.h"
+
+namespace {
+
+// Test web page content.
+const std::string kFindInPageResponse = "Find in page. Find in page.";
+
+} // namespace
+
+using chrome_test_util::buttonWithAccessibilityLabel;
+using chrome_test_util::webViewContainingText;
+
+// Tests for Find in Page.
+@interface FindInPageTestCase : ChromeTestCase
+
+// URL for a test page with |kFindInPageResponse|.
+@property(nonatomic, assign) GURL testURL;
+
+// Opens Find in Page.
+- (void)openFindInPage;
+// Closes Find in page.
+- (void)closeFindInPage;
+// Types text into Find in page textfield.
+- (void)typeFindInPageText:(NSString*)text;
+// Matcher for find in page textfield.
+- (id<GREYMatcher>)findInPageInputField;
+// Asserts that there is a string "|resultIndex| of |resultCount|" present on
+// screen. Waits for up to 2 seconds for this to happen.
+- (void)assertResultStringIsResult:(int)resultIndex outOfTotal:(int)resultCount;
+// Taps Next button in Find in page.
+- (void)advanceToNextResult;
+// Taps Previous button in Find in page.
+- (void)advanceToPreviousResult;
+// Navigates to |self.testURL| and waits for the page to load.
+- (void)navigateToTestPage;
+
+@end
+
+@implementation FindInPageTestCase
+@synthesize testURL = _testURL;
+
+#pragma mark - XCTest.
+
+// After setup, a page with |kFindInPageResponse| is displayed and Find In Page
+// bar is opened.
+- (void)setUp {
+ [super setUp];
+ // Clear saved search term
+ [FindInPageController setSearchTerm:nil];
+
+ // Setup find in page test URL.
+ std::map<GURL, std::string> responses;
+ self.testURL = web::test::HttpServer::MakeUrl("http://findinpage");
+ responses[self.testURL] = kFindInPageResponse;
+ web::test::SetUpSimpleHttpServer(responses);
+
+ [self navigateToTestPage];
+
+ // Open Find in Page view.
+ [self openFindInPage];
+}
+
+- (void)tearDown {
+ // Close find in page view.
+ [self closeFindInPage];
+
+ [super tearDown];
+}
+
+#pragma mark - Tests.
+
+// Tests that find in page allows iteration between search results and displays
+// correct number of results.
+- (void)testFindInPage {
+ // Type "find".
+ [self typeFindInPageText:@"find"];
+ // Should be highlighting result 1 of 2.
+ [self assertResultStringIsResult:1 outOfTotal:2];
+ // Tap Next.
+ [self advanceToNextResult];
+ // Should now read "2 of 2".
+ [self assertResultStringIsResult:2 outOfTotal:2];
+ // Go to previous.
+ [self advanceToPreviousResult];
+ [self assertResultStringIsResult:1 outOfTotal:2];
+}
+
+// Tests that Find In Page search term retention is working as expected, e.g.
+// the search term is persisted between FIP runs, but in incognito search term
+// is not retained and not autofilled.
+- (void)testFindInPageRetainsSearchTerm {
+ // Type "find".
+ [self typeFindInPageText:@"find"];
+ [self assertResultStringIsResult:1 outOfTotal:2];
+ [self closeFindInPage];
+
+ // Verify it's closed.
+ ConditionBlock condition = ^{
+ NSError* error = nil;
+ [[EarlGrey selectElementWithMatcher:grey_accessibilityID(
+ kFindInPageContainerViewId)]
+ assertWithMatcher:grey_nil()
+ error:&error];
+ return (error == nil);
+ };
+ GREYAssert(testing::WaitUntilConditionOrTimeout(2.0, condition),
+ @"Timeout while waiting for Find Bar to close");
+
+ // Open incognito page.
+ [ChromeEarlGreyUI openNewIncognitoTab];
+ [self navigateToTestPage];
+ [self openFindInPage];
+ // Check that no search term is prefilled.
+ [[EarlGrey selectElementWithMatcher:[self findInPageInputField]]
+ assertWithMatcher:grey_text(@"")];
+ [self typeFindInPageText:@"in"];
+ [self assertResultStringIsResult:1 outOfTotal:4];
+ [self closeFindInPage];
+
+ // Navigate to a new non-incognito tab.
+ [ChromeEarlGreyUI openNewTab];
+ [self navigateToTestPage];
+ [self openFindInPage];
+ // Check that search term is retained from normal tab, not incognito tab.
+ [[EarlGrey selectElementWithMatcher:[self findInPageInputField]]
+ assertWithMatcher:grey_text(@"find")];
+ [self assertResultStringIsResult:1 outOfTotal:2];
+}
+
+// Tests accessibility of the Find in Page screen.
+- (void)testAccessibilityOnFindInPage {
+ [self typeFindInPageText:@"find"];
+
+ // Wait for UI to finish loading screen, before programatically verifying
+ // accessibility.
+ [[GREYUIThreadExecutor sharedInstance] drainUntilIdle];
+ chrome_test_util::VerifyAccessibilityForCurrentScreen();
+}
+
+#pragma mark - Steps.
+
+- (void)openFindInPage {
+ [ChromeEarlGreyUI openToolsMenu];
+ [[EarlGrey
+ selectElementWithMatcher:grey_accessibilityID(kToolsMenuFindInPageId)]
+ performAction:grey_tap()];
+}
+
+- (void)closeFindInPage {
+ [[EarlGrey
+ selectElementWithMatcher:grey_accessibilityID(kFindInPageCloseButtonId)]
+ performAction:grey_tap()];
+}
+
+- (void)typeFindInPageText:(NSString*)text {
+ [[EarlGrey selectElementWithMatcher:[self findInPageInputField]]
+ performAction:grey_typeText(text)];
+}
+
+- (id<GREYMatcher>)findInPageInputField {
+ return grey_accessibilityID(kFindInPageInputFieldId);
+}
+
+- (void)assertResultStringIsResult:(int)resultIndex
+ outOfTotal:(int)resultCount {
+ // Returns "<current> of <total>" search results label (e.g "1 of 5").
+ NSString* expectedResultsString = l10n_util::GetNSStringF(
+ IDS_FIND_IN_PAGE_COUNT, base::IntToString16(resultIndex),
+ base::IntToString16(resultCount));
+
+ ConditionBlock condition = ^{
+ NSError* error = nil;
+ [[EarlGrey
+ selectElementWithMatcher:grey_accessibilityLabel(expectedResultsString)]
+ assertWithMatcher:grey_notNil()
+ error:&error];
+ return (error == nil);
+ };
+ GREYAssert(
+ testing::WaitUntilConditionOrTimeout(2.0, condition),
+ @"Timeout waiting for correct Find in Page results string to appear");
+}
+
+- (void)advanceToNextResult {
+ [[EarlGrey
+ selectElementWithMatcher:grey_accessibilityID(kFindInPageNextButtonId)]
+ performAction:grey_tap()];
+}
+
+- (void)advanceToPreviousResult {
+ [[EarlGrey selectElementWithMatcher:grey_accessibilityID(
+ kFindInPagePreviousButtonId)]
+ performAction:grey_tap()];
+}
+
+- (void)navigateToTestPage {
+ // Navigate to a page with some text.
+ [ChromeEarlGrey loadURL:self.testURL];
+
+ // Verify web page finished loading.
+ [[EarlGrey
+ selectElementWithMatcher:webViewContainingText(kFindInPageResponse)]
+ assertWithMatcher:grey_notNil()];
+}
+
+@end

Powered by Google App Engine
This is Rietveld 408576698