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

Unified Diff: ios/chrome/browser/ui/settings/autofill_collection_view_controller_unittest.mm

Issue 2589583003: Upstream Chrome on iOS source code [7/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/settings/autofill_collection_view_controller_unittest.mm
diff --git a/ios/chrome/browser/ui/settings/autofill_collection_view_controller_unittest.mm b/ios/chrome/browser/ui/settings/autofill_collection_view_controller_unittest.mm
new file mode 100644
index 0000000000000000000000000000000000000000..9cfbadc32ab567a0b11eb26be3f00d34c258ee48
--- /dev/null
+++ b/ios/chrome/browser/ui/settings/autofill_collection_view_controller_unittest.mm
@@ -0,0 +1,141 @@
+// 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/autofill_collection_view_controller.h"
+
+#include "base/guid.h"
+#include "base/mac/foundation_util.h"
+#include "base/strings/utf_string_conversions.h"
+#import "base/test/ios/wait_util.h"
+#include "components/autofill/core/browser/autofill_profile.h"
+#include "components/autofill/core/browser/credit_card.h"
+#include "components/autofill/core/browser/personal_data_manager.h"
+#include "ios/chrome/browser/autofill/personal_data_manager_factory.h"
+#include "ios/chrome/browser/browser_state/test_chrome_browser_state.h"
+#import "ios/chrome/browser/ui/collection_view/collection_view_controller_test.h"
+#include "ios/web/public/test/test_web_thread_bundle.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+@interface SettingsRootCollectionViewController (ExposedForTesting)
+- (void)editButtonPressed;
+@end
+
+namespace {
+
+class AutofillCollectionViewControllerTest
+ : public CollectionViewControllerTest {
+ protected:
+ void SetUp() override {
+ CollectionViewControllerTest::SetUp();
+ TestChromeBrowserState::Builder test_cbs_builder;
+ chrome_browser_state_ = test_cbs_builder.Build();
+ // Profile import requires a PersonalDataManager which itself needs the
+ // WebDataService; this is not initialized on a TestChromeBrowserState by
+ // default.
+ chrome_browser_state_->CreateWebDataService();
+ }
+
+ CollectionViewController* NewController() override NS_RETURNS_RETAINED {
+ return [[AutofillCollectionViewController alloc]
+ initWithBrowserState:chrome_browser_state_.get()];
+ }
+
+ void AddProfile(const std::string& origin,
+ const std::string& name,
+ const std::string& address) {
+ autofill::PersonalDataManager* personalDataManager =
+ autofill::PersonalDataManagerFactory::GetForBrowserState(
+ chrome_browser_state_.get());
+ autofill::AutofillProfile autofillProfile(base::GenerateGUID(), origin);
+ autofillProfile.SetRawInfo(autofill::NAME_FULL, base::ASCIIToUTF16(name));
+ autofillProfile.SetRawInfo(autofill::ADDRESS_HOME_LINE1,
+ base::ASCIIToUTF16(address));
+ personalDataManager->SaveImportedProfile(autofillProfile);
+ }
+
+ web::TestWebThreadBundle thread_bundle_;
+ std::unique_ptr<TestChromeBrowserState> chrome_browser_state_;
+};
+
+// Default test case of no addresses or credit cards.
+TEST_F(AutofillCollectionViewControllerTest, TestInitialization) {
+ CreateController();
+ CheckController();
+
+ // Expect one header section.
+ EXPECT_EQ(1, NumberOfSections());
+ // Expect header section to contain two rows.
+ EXPECT_EQ(2, NumberOfItemsInSection(0));
+}
+
+// Adding a single address results in an address section.
+TEST_F(AutofillCollectionViewControllerTest, TestOneProfile) {
+ AddProfile("https://www.example.com/", "John Doe", "1 Main Street");
+ CreateController();
+ // Expect two sections (header and addresses section).
+ EXPECT_EQ(2, NumberOfSections());
+ // Expect header section to contain two rows.
+ EXPECT_EQ(2, NumberOfItemsInSection(0));
+ // Expect address section to contain 1 row (the address itself).
+ EXPECT_EQ(1, NumberOfItemsInSection(1));
+}
+
+// Adding a single credit card results in a credit card section.
+TEST_F(AutofillCollectionViewControllerTest, TestOneCreditCard) {
+ autofill::PersonalDataManager* personalDataManager =
+ autofill::PersonalDataManagerFactory::GetForBrowserState(
+ chrome_browser_state_.get());
+ autofill::CreditCard creditCard(base::GenerateGUID(),
+ "https://www.example.com/");
+ creditCard.SetRawInfo(autofill::CREDIT_CARD_NAME_FULL,
+ base::ASCIIToUTF16("Alan Smithee"));
+ creditCard.SetRawInfo(autofill::CREDIT_CARD_NUMBER,
+ base::ASCIIToUTF16("378282246310005"));
+ personalDataManager->SaveImportedCreditCard(creditCard);
+ CreateController();
+ // Expect two sections (header and credit card section).
+ EXPECT_EQ(2, NumberOfSections());
+ // Expect header section to contain two rows.
+ EXPECT_EQ(2, NumberOfItemsInSection(0));
+ // Expect credit card section to contain 1 row (the credit card itself).
+ EXPECT_EQ(1, NumberOfItemsInSection(1));
+}
+
+// Deleting the only profile results in item deletion and section deletion.
+TEST_F(AutofillCollectionViewControllerTest, TestOneProfileItemDeleted) {
+ AddProfile("https://www.example.com/", "John Doe", "1 Main Street");
+ CreateController();
+ // Expect two sections (header and addresses section).
+ EXPECT_EQ(2, NumberOfSections());
+ // Expect header section to contain two rows.
+ EXPECT_EQ(2, NumberOfItemsInSection(0));
+ // Expect address section to contain 1 row (the address itself).
+ EXPECT_EQ(1, NumberOfItemsInSection(1));
+
+ AutofillCollectionViewController* view_controller =
+ base::mac::ObjCCastStrict<AutofillCollectionViewController>(controller());
+ // Put the collectionView in 'edit' mode.
+ [view_controller editButtonPressed];
+ // This is a bit of a shortcut, since actually clicking on the 'delete'
+ // button would be tough.
+ void (^delete_item_with_wait)(int, int) = ^(int i, int j) {
+ __block BOOL completion_called = NO;
+ this->DeleteItem(i, j, ^{
+ completion_called = YES;
+ });
+ base::test::ios::WaitUntilCondition(^bool() {
+ return completion_called;
+ });
+ };
+
+ delete_item_with_wait(1, 0);
+ // Exit 'edit' mode.
+ [view_controller editButtonPressed];
+
+ // Verify the resulting UI.
+ EXPECT_EQ(1, NumberOfSections());
+ EXPECT_EQ(2, NumberOfItemsInSection(0));
+}
+
+} // namespace

Powered by Google App Engine
This is Rietveld 408576698