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

Unified Diff: ios/chrome/browser/ui/sad_tab/sad_tab_view_egtest.mm

Issue 2952343002: EG Tests for Sad Tab View (Closed)
Patch Set: Created 3 years, 6 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
Index: ios/chrome/browser/ui/sad_tab/sad_tab_view_egtest.mm
diff --git a/ios/chrome/browser/ui/sad_tab/sad_tab_view_egtest.mm b/ios/chrome/browser/ui/sad_tab/sad_tab_view_egtest.mm
new file mode 100644
index 0000000000000000000000000000000000000000..605cf05526bfe0fb750f6f1465ea2dbe2a94b047
--- /dev/null
+++ b/ios/chrome/browser/ui/sad_tab/sad_tab_view_egtest.mm
@@ -0,0 +1,122 @@
+// Copyright 2017 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 <EarlGrey/EarlGrey.h>
+#import <XCTest/XCTest.h>
+
+#include "base/ios/ios_util.h"
+#include "components/strings/grit/components_strings.h"
+#include "ios/chrome/browser/ui/tools_menu/tools_menu_constants.h"
+#import "ios/chrome/test/app/chrome_test_util.h"
+#import "ios/chrome/test/app/navigation_test_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/web/public/test/http_server/http_server.h"
+#include "ios/web/public/test/http_server/http_server_util.h"
+#include "ui/base/l10n/l10n_util_mac.h"
+
+#if !defined(__has_feature) || !__has_feature(objc_arc)
+#error "This file requires ARC support."
+#endif
+
+// Sad Tab View integration tests for Chrome.
+@interface SadTabViewTestCase : ChromeTestCase
+@end
+
+@implementation SadTabViewTestCase
+
+// Verifies initial and repeated visits to the Sad Tab.
+// N.B. There is a mechanism which changes the Sad Tab UI if a crash URL is
kkhorimoto 2017/06/23 21:54:46 What does N.B. mean?
PL 2017/06/23 22:16:03 N.B. = Note Bene = Take careful note of the follow
+// visited within 60 seconds, for this reason this one test can not
+// be easily split up across multiple tests
+// as visiting Sad Tab may not be idempotent.
baxley 2017/06/26 08:25:36 Great comment! it cleared up my question of why th
+- (void)testSadTabView {
+ // A matcher for the main title of the Sad Tab in 'reload' mode.
+ NSString* reloadSadTabTitleString =
kkhorimoto 2017/06/23 21:54:46 optional: You'd save a line by inlining the l10n_u
PL 2017/06/23 22:16:04 Yeah, I think you're right. Originally I thought t
+ l10n_util::GetNSString(IDS_SAD_TAB_MESSAGE);
+ id<GREYMatcher> reloadSadTabTitleStringMatcher =
+ [GREYMatchers matcherForText:reloadSadTabTitleString];
+ // A matcher for the main title of the Sad Tab in 'feedback' mode.
+ NSString* feedbackSadTabTitleString =
+ l10n_util::GetNSString(IDS_SAD_TAB_RELOAD_TRY);
+ id<GREYMatcher> feedbackSadTabTitleStringMatcher =
+ chrome_test_util::ContainsText(feedbackSadTabTitleString);
+ // A matcher for a help string suggesting the user use Incognito Mode.
+ NSString* incognitoHelpString =
+ l10n_util::GetNSString(IDS_SAD_TAB_RELOAD_INCOGNITO);
+ id<GREYMatcher> incognitoHelpStringMatcher =
+ chrome_test_util::ContainsText(incognitoHelpString);
baxley 2017/06/26 08:25:36 Optional nit: If you want to make the test shorter
PL 2017/06/26 23:51:47 That's interesting, I've put up a change that does
+
+ // Prepare a simple but known URL to avoid testing from the NTP.
+ web::test::SetUpFileBasedHttpServer();
+ const GURL simple_URL = web::test::HttpServer::MakeUrl(
+ "http://ios/testing/data/http_server_files/destination.html");
+
+ // Prepare a helper block to test Sad Tab navigating from and to normal pages.
+ void (^loadAndCheckSimpleURL)() = ^void() {
+ [ChromeEarlGrey loadURL:simple_URL];
+ [ChromeEarlGrey waitForWebViewContainingText:"You've arrived"];
+ [[EarlGrey selectElementWithMatcher:reloadSadTabTitleStringMatcher]
+ assertWithMatcher:grey_nil()];
+ [[EarlGrey selectElementWithMatcher:feedbackSadTabTitleStringMatcher]
+ assertWithMatcher:grey_nil()];
+ };
+
+ loadAndCheckSimpleURL();
+
+ // Navigate to the chrome://crash URL which should show the Sad Tab.
+ // Use chome_test_util::LoadURL() directly to avoid ChomeEarlGray helper
baxley 2017/06/26 08:25:37 nit: s/LoadURL/LoadUrl s/ChromeEarlGray/ChromeEarl
PL 2017/06/26 23:51:47 Good catch, done! Thanks!
+ // methods which expect to wait for web content.
baxley 2017/06/26 08:25:36 Another great comment! answering my question about
+ const GURL crash_URL = GURL("chrome://crash");
+ chrome_test_util::LoadUrl(crash_URL);
+ [[EarlGrey selectElementWithMatcher:reloadSadTabTitleStringMatcher]
+ assertWithMatcher:grey_notNil()];
+
+ // Ensure user can navigate away from Sad Tab, and the Sad Tab content
+ // is no longer visible.
+ loadAndCheckSimpleURL();
+
+ // A second visit to the crashing URL should show a feedback message.
+ // It should also show help messages including an invitation to use
+ // Incognito Mode.
+ chrome_test_util::LoadUrl(crash_URL);
+ [[EarlGrey selectElementWithMatcher:feedbackSadTabTitleStringMatcher]
+ assertWithMatcher:grey_notNil()];
+ [[EarlGrey selectElementWithMatcher:incognitoHelpStringMatcher]
+ assertWithMatcher:grey_notNil()];
+
+ // Again ensure a user can navigate away from Sad Tab, and the Sad Tab content
+ // is no longer visible.
+ loadAndCheckSimpleURL();
+
+ // Open an Incognito tab and browse somewhere, the repeated crash UI changes
+ // dependent on the Incognito mode.
+ [ChromeEarlGreyUI openToolsMenu];
+ id<GREYMatcher> newIncognitoTabButtonMatcher =
+ grey_accessibilityID(kToolsMenuNewIncognitoTabId);
+ [[EarlGrey selectElementWithMatcher:newIncognitoTabButtonMatcher]
+ performAction:grey_tap()];
+ chrome_test_util::AssertIncognitoTabCount(1);
+ loadAndCheckSimpleURL();
+
+ // Test an initial crash, and then a second crash in Incognito mode, as above.
+ // Incognito mode should not be suggested if already in Incognito mode.
+ chrome_test_util::LoadUrl(crash_URL);
+ [[EarlGrey selectElementWithMatcher:reloadSadTabTitleStringMatcher]
+ assertWithMatcher:grey_notNil()];
+ chrome_test_util::LoadUrl(crash_URL);
+ [[EarlGrey selectElementWithMatcher:feedbackSadTabTitleStringMatcher]
+ assertWithMatcher:grey_notNil()];
+ [[EarlGrey selectElementWithMatcher:incognitoHelpStringMatcher]
+ assertWithMatcher:grey_nil()];
+
+ // Finally, ensure that the user can browse away from the Sad Tab page
+ // in Incognito Mode.
+ loadAndCheckSimpleURL();
+}
+
+@end

Powered by Google App Engine
This is Rietveld 408576698