diff options
Diffstat (limited to 'chromium/components/autofill/core/browser/webdata/autofill_wallet_syncable_service_unittest.cc')
-rw-r--r-- | chromium/components/autofill/core/browser/webdata/autofill_wallet_syncable_service_unittest.cc | 107 |
1 files changed, 107 insertions, 0 deletions
diff --git a/chromium/components/autofill/core/browser/webdata/autofill_wallet_syncable_service_unittest.cc b/chromium/components/autofill/core/browser/webdata/autofill_wallet_syncable_service_unittest.cc index f407085d98f..c31ea73a9d5 100644 --- a/chromium/components/autofill/core/browser/webdata/autofill_wallet_syncable_service_unittest.cc +++ b/chromium/components/autofill/core/browser/webdata/autofill_wallet_syncable_service_unittest.cc @@ -7,6 +7,7 @@ #include <memory> #include <vector> +#include "base/strings/utf_string_conversions.h" #include "components/autofill/core/browser/autofill_profile.h" #include "components/autofill/core/browser/credit_card.h" #include "components/autofill/core/browser/test_autofill_clock.h" @@ -246,4 +247,110 @@ TEST(AutofillWalletSyncableServiceTest, EmptyNameOnCard) { wallet_cards.back().GetRawInfo(autofill::CREDIT_CARD_NAME_LAST).empty()); } +TEST(AutofillWalletSyncableServiceTest, ComputeCardsDiff) { + // Some arbitrary cards for testing. + CreditCard card0(CreditCard::MASKED_SERVER_CARD, "a"); + CreditCard card1(CreditCard::MASKED_SERVER_CARD, "b"); + CreditCard card2(CreditCard::MASKED_SERVER_CARD, "c"); + CreditCard card3(CreditCard::MASKED_SERVER_CARD, "d"); + // Make sure that card0 < card1 < card2 < card3. + ASSERT_LT(card0.Compare(card1), 0); + ASSERT_LT(card1.Compare(card2), 0); + ASSERT_LT(card2.Compare(card3), 0); + + struct TestCase { + const char* name; + const std::vector<CreditCard> old_cards; + const std::vector<CreditCard> new_cards; + int expected_added; + int expected_removed; + } test_cases[] = { + {"Both empty", {}, {}, 0, 0}, + {"Old empty", {}, {card0}, 1, 0}, + {"New empty", {card0}, {}, 0, 1}, + {"Identical", {card0, card1}, {card0, card1}, 0, 0}, + {"Identical unsorted", {card0, card1}, {card1, card0}, 0, 0}, + {"Added one", {card0}, {card0, card1}, 1, 0}, + {"Added two", {card1}, {card0, card1, card2}, 2, 0}, + {"Removed one", {card0, card1}, {card1}, 0, 1}, + {"Removed two", {card0, card1, card2}, {card1}, 0, 2}, + {"Replaced one", {card0}, {card1}, 1, 1}, + {"Replaced two", {card0, card1}, {card2, card3}, 2, 2}, + {"Added and removed one", {card0, card1}, {card1, card2}, 1, 1}, + }; + + for (const TestCase& test_case : test_cases) { + SCOPED_TRACE(test_case.name); + + // ComputeDiff expects a vector of unique_ptrs for the old data. + std::vector<std::unique_ptr<CreditCard>> old_cards_ptrs; + for (const CreditCard& card : test_case.old_cards) + old_cards_ptrs.push_back(std::make_unique<CreditCard>(card)); + + AutofillWalletSyncableService::Diff diff = + AutofillWalletSyncableService::ComputeDiff(old_cards_ptrs, + test_case.new_cards); + + EXPECT_EQ(test_case.expected_added, diff.items_added); + EXPECT_EQ(test_case.expected_removed, diff.items_removed); + } +} + +TEST(AutofillWalletSyncableServiceTest, ComputeAddressesDiff) { + // Some arbitrary addresses for testing. + AutofillProfile address0(AutofillProfile::SERVER_PROFILE, "a"); + AutofillProfile address1(AutofillProfile::SERVER_PROFILE, "b"); + AutofillProfile address2(AutofillProfile::SERVER_PROFILE, "c"); + AutofillProfile address3(AutofillProfile::SERVER_PROFILE, "d"); + address0.SetRawInfo(NAME_FULL, base::ASCIIToUTF16("a")); + address1.SetRawInfo(NAME_FULL, base::ASCIIToUTF16("b")); + address2.SetRawInfo(NAME_FULL, base::ASCIIToUTF16("c")); + address3.SetRawInfo(NAME_FULL, base::ASCIIToUTF16("d")); + // Make sure that address0 < address1 < address2 < address3. + ASSERT_LT(address0.Compare(address1), 0); + ASSERT_LT(address1.Compare(address2), 0); + ASSERT_LT(address2.Compare(address3), 0); + + struct TestCase { + const char* name; + const std::vector<AutofillProfile> old_addresses; + const std::vector<AutofillProfile> new_addresses; + int expected_added; + int expected_removed; + } test_cases[] = { + {"Both empty", {}, {}, 0, 0}, + {"Old empty", {}, {address0}, 1, 0}, + {"New empty", {address0}, {}, 0, 1}, + {"Identical", {address0, address1}, {address0, address1}, 0, 0}, + {"Identical unsorted", {address0, address1}, {address1, address0}, 0, 0}, + {"Added one", {address0}, {address0, address1}, 1, 0}, + {"Added two", {address1}, {address0, address1, address2}, 2, 0}, + {"Removed one", {address0, address1}, {address1}, 0, 1}, + {"Removed two", {address0, address1, address2}, {address1}, 0, 2}, + {"Replaced one", {address0}, {address1}, 1, 1}, + {"Replaced two", {address0, address1}, {address2, address3}, 2, 2}, + {"Added and removed one", + {address0, address1}, + {address1, address2}, + 1, + 1}, + }; + + for (const TestCase& test_case : test_cases) { + SCOPED_TRACE(test_case.name); + + // ComputeDiff expects a vector of unique_ptrs for the old data. + std::vector<std::unique_ptr<AutofillProfile>> old_addresses_ptrs; + for (const AutofillProfile& address : test_case.old_addresses) + old_addresses_ptrs.push_back(std::make_unique<AutofillProfile>(address)); + + AutofillWalletSyncableService::Diff diff = + AutofillWalletSyncableService::ComputeDiff(old_addresses_ptrs, + test_case.new_addresses); + + EXPECT_EQ(test_case.expected_added, diff.items_added); + EXPECT_EQ(test_case.expected_removed, diff.items_removed); + } +} + } // namespace autofill |