| // Copyright 2018 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 "ios/chrome/browser/ui/sad_tab/sad_tab_view_controller.h" |
| |
| #include "components/strings/grit/components_strings.h" |
| #include "testing/gtest_mac.h" |
| #include "testing/platform_test.h" |
| #import "third_party/ocmock/OCMock/OCMock.h" |
| #include "third_party/ocmock/gtest_support.h" |
| #include "ui/base/l10n/l10n_util.h" |
| |
| #if !defined(__has_feature) || !__has_feature(objc_arc) |
| #error "This file requires ARC support." |
| #endif |
| |
| // Test fixture for testing SadTabViewController class. |
| class SadTabViewControllerTest : public PlatformTest { |
| protected: |
| SadTabViewControllerTest() |
| : view_controller_([[SadTabViewController alloc] init]) {} |
| SadTabViewController* view_controller_; |
| }; |
| |
| // Tests Sad Tab message and button title for first failure in non-incognito |
| // mode. |
| TEST_F(SadTabViewControllerTest, FirstFailureInNonIncognitoText) { |
| view_controller_.repeatedFailure = NO; |
| view_controller_.offTheRecord = NO; |
| [view_controller_ loadViewIfNeeded]; |
| |
| ASSERT_TRUE(view_controller_.messageTextView); |
| EXPECT_NSEQ(l10n_util::GetNSString(IDS_SAD_TAB_MESSAGE), |
| view_controller_.messageTextView.text); |
| |
| ASSERT_TRUE(view_controller_.actionButton); |
| EXPECT_NSEQ( |
| l10n_util::GetNSString(IDS_SAD_TAB_RELOAD_LABEL).uppercaseString, |
| [view_controller_.actionButton titleForState:UIControlStateNormal]); |
| } |
| |
| // Tests Sad Tab message and button title for first failure in incognito |
| // mode. |
| TEST_F(SadTabViewControllerTest, FirstFailureInIncognitoText) { |
| view_controller_.repeatedFailure = NO; |
| view_controller_.offTheRecord = YES; |
| [view_controller_ loadViewIfNeeded]; |
| |
| ASSERT_TRUE(view_controller_.messageTextView); |
| EXPECT_NSEQ(l10n_util::GetNSString(IDS_SAD_TAB_MESSAGE), |
| view_controller_.messageTextView.text); |
| |
| ASSERT_TRUE(view_controller_.actionButton); |
| EXPECT_NSEQ( |
| l10n_util::GetNSString(IDS_SAD_TAB_RELOAD_LABEL).uppercaseString, |
| [view_controller_.actionButton titleForState:UIControlStateNormal]); |
| } |
| |
| // Tests Sad Tab message and button title for repeated failure in non-incognito |
| // mode. |
| TEST_F(SadTabViewControllerTest, RepeatedFailureInNonIncognitoText) { |
| view_controller_.repeatedFailure = YES; |
| view_controller_.offTheRecord = NO; |
| [view_controller_ loadViewIfNeeded]; |
| |
| ASSERT_TRUE(view_controller_.messageTextView); |
| EXPECT_TRUE([view_controller_.messageTextView.text |
| containsString:l10n_util::GetNSString(IDS_SAD_TAB_RELOAD_TRY)]); |
| EXPECT_TRUE([view_controller_.messageTextView.text |
| containsString:l10n_util::GetNSString(IDS_SAD_TAB_RELOAD_INCOGNITO)]); |
| EXPECT_TRUE([view_controller_.messageTextView.text |
| containsString:l10n_util::GetNSString( |
| IDS_SAD_TAB_RELOAD_RESTART_BROWSER)]); |
| EXPECT_TRUE([view_controller_.messageTextView.text |
| containsString:l10n_util::GetNSString( |
| IDS_SAD_TAB_RELOAD_RESTART_DEVICE)]); |
| |
| ASSERT_TRUE(view_controller_.actionButton); |
| EXPECT_NSEQ( |
| l10n_util::GetNSString(IDS_SAD_TAB_SEND_FEEDBACK_LABEL).uppercaseString, |
| [view_controller_.actionButton titleForState:UIControlStateNormal]); |
| } |
| |
| // Tests Sad Tab message and button title for repeated failure in incognito |
| // mode. |
| TEST_F(SadTabViewControllerTest, RepeatedFailureInIncognitoText) { |
| view_controller_.repeatedFailure = YES; |
| view_controller_.offTheRecord = YES; |
| [view_controller_ loadViewIfNeeded]; |
| |
| ASSERT_TRUE(view_controller_.messageTextView); |
| EXPECT_TRUE([view_controller_.messageTextView.text |
| containsString:l10n_util::GetNSString(IDS_SAD_TAB_RELOAD_TRY)]); |
| EXPECT_TRUE([view_controller_.messageTextView.text |
| containsString:l10n_util::GetNSString( |
| IDS_SAD_TAB_RELOAD_RESTART_BROWSER)]); |
| EXPECT_TRUE([view_controller_.messageTextView.text |
| containsString:l10n_util::GetNSString( |
| IDS_SAD_TAB_RELOAD_RESTART_DEVICE)]); |
| |
| ASSERT_TRUE(view_controller_.actionButton); |
| EXPECT_NSEQ( |
| l10n_util::GetNSString(IDS_SAD_TAB_SEND_FEEDBACK_LABEL).uppercaseString, |
| [view_controller_.actionButton titleForState:UIControlStateNormal]); |
| } |
| |
| // Tests action button tap for first failure. |
| TEST_F(SadTabViewControllerTest, FirstFailureAction) { |
| id delegate = OCMStrictProtocolMock(@protocol(SadTabViewControllerDelegate)); |
| OCMExpect([delegate sadTabViewControllerReload:view_controller_]); |
| |
| view_controller_.repeatedFailure = NO; |
| view_controller_.delegate = delegate; |
| [view_controller_ loadViewIfNeeded]; |
| |
| ASSERT_TRUE(view_controller_.actionButton); |
| [view_controller_.actionButton |
| sendActionsForControlEvents:UIControlEventTouchUpInside]; |
| EXPECT_OCMOCK_VERIFY(delegate); |
| } |
| |
| // Tests action button tap for repeated failure. |
| TEST_F(SadTabViewControllerTest, RepeatedFailureAction) { |
| id delegate = OCMStrictProtocolMock(@protocol(SadTabViewControllerDelegate)); |
| OCMExpect([delegate sadTabViewControllerShowReportAnIssue:view_controller_]); |
| |
| view_controller_.repeatedFailure = YES; |
| view_controller_.delegate = delegate; |
| [view_controller_ loadViewIfNeeded]; |
| |
| ASSERT_TRUE(view_controller_.actionButton); |
| [view_controller_.actionButton |
| sendActionsForControlEvents:UIControlEventTouchUpInside]; |
| EXPECT_OCMOCK_VERIFY(delegate); |
| } |