| Index: ios/chrome/browser/ui/settings/import_data_collection_view_controller_unittest.mm
|
| diff --git a/ios/chrome/browser/ui/settings/import_data_collection_view_controller_unittest.mm b/ios/chrome/browser/ui/settings/import_data_collection_view_controller_unittest.mm
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..c6fa7c3b269af3c069fd030ff40c5fea2c9746c9
|
| --- /dev/null
|
| +++ b/ios/chrome/browser/ui/settings/import_data_collection_view_controller_unittest.mm
|
| @@ -0,0 +1,178 @@
|
| +// Copyright 2015 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/settings/import_data_collection_view_controller.h"
|
| +
|
| +#include "base/mac/foundation_util.h"
|
| +#include "base/strings/sys_string_conversions.h"
|
| +#import "ios/chrome/browser/ui/collection_view/cells/collection_view_detail_item.h"
|
| +#import "ios/chrome/browser/ui/collection_view/collection_view_controller_test.h"
|
| +#import "ios/chrome/browser/ui/collection_view/collection_view_model.h"
|
| +#import "ios/chrome/browser/ui/settings/cells/card_multiline_item.h"
|
| +#include "ios/chrome/grit/ios_strings.h"
|
| +#include "testing/gtest/include/gtest/gtest.h"
|
| +#include "testing/gtest_mac.h"
|
| +#include "testing/platform_test.h"
|
| +#include "ui/base/l10n/l10n_util_mac.h"
|
| +
|
| +@interface ImportDataControllerTestDelegate
|
| + : NSObject<ImportDataControllerDelegate>
|
| +@property(nonatomic, readonly) BOOL didChooseClearDataPolicyCalled;
|
| +@property(nonatomic, readonly) ShouldClearData shouldClearData;
|
| +@end
|
| +
|
| +@implementation ImportDataControllerTestDelegate
|
| +
|
| +@synthesize didChooseClearDataPolicyCalled = _didChooseClearDataPolicyCalled;
|
| +@synthesize shouldClearData = _shouldClearData;
|
| +
|
| +- (void)didChooseClearDataPolicy:(ImportDataCollectionViewController*)controller
|
| + shouldClearData:(ShouldClearData)shouldClearData {
|
| + _didChooseClearDataPolicyCalled = YES;
|
| + _shouldClearData = shouldClearData;
|
| +}
|
| +
|
| +@end
|
| +
|
| +namespace {
|
| +
|
| +class ImportDataCollectionViewControllerTest
|
| + : public CollectionViewControllerTest {
|
| + public:
|
| + ImportDataControllerTestDelegate* delegate() { return delegate_; }
|
| +
|
| + protected:
|
| + void SetUp() override {
|
| + CollectionViewControllerTest::SetUp();
|
| + is_signed_in_ = true;
|
| + }
|
| +
|
| + CollectionViewController* NewController() override NS_RETURNS_RETAINED {
|
| + delegate_.reset([[ImportDataControllerTestDelegate alloc] init]);
|
| + return [[ImportDataCollectionViewController alloc]
|
| + initWithDelegate:delegate_
|
| + fromEmail:@"fromEmail@gmail.com"
|
| + toEmail:@"toEmail@gmail.com"
|
| + isSignedIn:is_signed_in_];
|
| + }
|
| +
|
| + void set_is_signed_in(bool is_signed_in) { is_signed_in_ = is_signed_in; }
|
| +
|
| + bool is_signed_in_;
|
| + base::scoped_nsobject<ImportDataControllerTestDelegate> delegate_;
|
| +};
|
| +
|
| +TEST_F(ImportDataCollectionViewControllerTest, TestModelSignedIn) {
|
| + CreateController();
|
| + CheckController();
|
| + ASSERT_EQ(2, NumberOfSections());
|
| + EXPECT_EQ(1, NumberOfItemsInSection(0));
|
| + CardMultilineItem* item = GetCollectionViewItem(0, 0);
|
| + EXPECT_NSEQ(
|
| + l10n_util::GetNSStringF(IDS_IOS_OPTIONS_IMPORT_DATA_HEADER,
|
| + base::SysNSStringToUTF16(@"fromEmail@gmail.com")),
|
| + item.text);
|
| + EXPECT_EQ(2, NumberOfItemsInSection(1));
|
| + CheckTextCellTitleAndSubtitle(
|
| + l10n_util::GetNSString(IDS_IOS_OPTIONS_IMPORT_DATA_IMPORT_TITLE),
|
| + l10n_util::GetNSStringF(IDS_IOS_OPTIONS_IMPORT_DATA_IMPORT_SUBTITLE,
|
| + base::SysNSStringToUTF16(@"toEmail@gmail.com")),
|
| + 1, 0);
|
| + CheckAccessoryType(MDCCollectionViewCellAccessoryNone, 1, 0);
|
| + CheckTextCellTitleAndSubtitle(
|
| + l10n_util::GetNSString(IDS_IOS_OPTIONS_IMPORT_DATA_KEEP_TITLE),
|
| + l10n_util::GetNSStringF(IDS_IOS_OPTIONS_IMPORT_DATA_KEEP_SUBTITLE_SWITCH,
|
| + base::SysNSStringToUTF16(@"fromEmail@gmail.com")),
|
| + 1, 1);
|
| + CheckAccessoryType(MDCCollectionViewCellAccessoryCheckmark, 1, 1);
|
| +}
|
| +
|
| +TEST_F(ImportDataCollectionViewControllerTest, TestModelSignedOut) {
|
| + set_is_signed_in(false);
|
| + CreateController();
|
| + CheckController();
|
| + ASSERT_EQ(2, NumberOfSections());
|
| + EXPECT_EQ(1, NumberOfItemsInSection(0));
|
| + CardMultilineItem* item = GetCollectionViewItem(0, 0);
|
| + EXPECT_NSEQ(
|
| + l10n_util::GetNSStringF(IDS_IOS_OPTIONS_IMPORT_DATA_HEADER,
|
| + base::SysNSStringToUTF16(@"fromEmail@gmail.com")),
|
| + item.text);
|
| + EXPECT_EQ(2, NumberOfItemsInSection(1));
|
| + CheckTextCellTitleAndSubtitle(
|
| + l10n_util::GetNSString(IDS_IOS_OPTIONS_IMPORT_DATA_IMPORT_TITLE),
|
| + l10n_util::GetNSStringF(IDS_IOS_OPTIONS_IMPORT_DATA_IMPORT_SUBTITLE,
|
| + base::SysNSStringToUTF16(@"toEmail@gmail.com")),
|
| + 1, 0);
|
| + CheckAccessoryType(MDCCollectionViewCellAccessoryCheckmark, 1, 0);
|
| + CheckTextCellTitleAndSubtitle(
|
| + l10n_util::GetNSString(IDS_IOS_OPTIONS_IMPORT_DATA_KEEP_TITLE),
|
| + l10n_util::GetNSString(IDS_IOS_OPTIONS_IMPORT_DATA_KEEP_SUBTITLE_SIGNIN),
|
| + 1, 1);
|
| + CheckAccessoryType(MDCCollectionViewCellAccessoryNone, 1, 1);
|
| +}
|
| +
|
| +// Tests that checking a checkbox correctly uncheck the other one.
|
| +TEST_F(ImportDataCollectionViewControllerTest, TestUniqueBoxChecked) {
|
| + CreateController();
|
| +
|
| + ImportDataCollectionViewController* import_data_controller =
|
| + base::mac::ObjCCastStrict<ImportDataCollectionViewController>(
|
| + controller());
|
| + NSIndexPath* importIndexPath = [NSIndexPath indexPathForItem:0 inSection:1];
|
| + NSIndexPath* keepSeparateIndexPath =
|
| + [NSIndexPath indexPathForItem:1 inSection:1];
|
| + CollectionViewDetailItem* importItem =
|
| + base::mac::ObjCCastStrict<CollectionViewDetailItem>(
|
| + [import_data_controller.collectionViewModel
|
| + itemAtIndexPath:importIndexPath]);
|
| + CollectionViewDetailItem* keepSeparateItem =
|
| + base::mac::ObjCCastStrict<CollectionViewDetailItem>(
|
| + [import_data_controller.collectionViewModel
|
| + itemAtIndexPath:keepSeparateIndexPath]);
|
| +
|
| + [import_data_controller collectionView:[import_data_controller collectionView]
|
| + didSelectItemAtIndexPath:importIndexPath];
|
| + EXPECT_EQ(MDCCollectionViewCellAccessoryCheckmark, importItem.accessoryType);
|
| + EXPECT_EQ(MDCCollectionViewCellAccessoryNone, keepSeparateItem.accessoryType);
|
| +
|
| + [import_data_controller collectionView:[import_data_controller collectionView]
|
| + didSelectItemAtIndexPath:keepSeparateIndexPath];
|
| + EXPECT_EQ(MDCCollectionViewCellAccessoryNone, importItem.accessoryType);
|
| + EXPECT_EQ(MDCCollectionViewCellAccessoryCheckmark,
|
| + keepSeparateItem.accessoryType);
|
| +}
|
| +
|
| +// Tests that the default choice when the user is signed in is Clear Data and
|
| +// that tapping continue will correctly select it. Regression test for
|
| +// crbug.com/649533
|
| +TEST_F(ImportDataCollectionViewControllerTest, TestDefaultChoiceSignedIn) {
|
| + CreateController();
|
| +
|
| + EXPECT_FALSE(delegate().didChooseClearDataPolicyCalled);
|
| + UIBarButtonItem* item = controller().navigationItem.rightBarButtonItem;
|
| + ASSERT_TRUE(item);
|
| + [item.target performSelector:item.action];
|
| +
|
| + EXPECT_TRUE(delegate().didChooseClearDataPolicyCalled);
|
| + EXPECT_EQ(SHOULD_CLEAR_DATA_CLEAR_DATA, delegate().shouldClearData);
|
| +}
|
| +
|
| +// Tests that the default choice when the user is signed out is Merge Data and
|
| +// that tapping continue will correctly select it. Regression test for
|
| +// crbug.com/649533
|
| +TEST_F(ImportDataCollectionViewControllerTest, TestDefaultChoiceSignedOut) {
|
| + set_is_signed_in(false);
|
| + CreateController();
|
| +
|
| + EXPECT_FALSE(delegate().didChooseClearDataPolicyCalled);
|
| + UIBarButtonItem* item = controller().navigationItem.rightBarButtonItem;
|
| + ASSERT_TRUE(item);
|
| + [item.target performSelector:item.action];
|
| +
|
| + EXPECT_TRUE(delegate().didChooseClearDataPolicyCalled);
|
| + EXPECT_EQ(SHOULD_CLEAR_DATA_MERGE_DATA, delegate().shouldClearData);
|
| +}
|
| +
|
| +} // namespace
|
|
|