diff options
author | dhollowa@chromium.org <dhollowa@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-02-23 03:53:09 +0000 |
---|---|---|
committer | dhollowa@chromium.org <dhollowa@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-02-23 03:53:09 +0000 |
commit | a6d8357a9702c6ce48e15914760708c1970a03e2 (patch) | |
tree | 196c9fe86d6d8b314815f5b7ad699024ec9dfee0 /chrome/browser/webdata/web_database_unittest.cc | |
parent | df0846a5f9527233de7b551dd426585f97b0f296 (diff) | |
download | chromium_src-a6d8357a9702c6ce48e15914760708c1970a03e2.zip chromium_src-a6d8357a9702c6ce48e15914760708c1970a03e2.tar.gz chromium_src-a6d8357a9702c6ce48e15914760708c1970a03e2.tar.bz2 |
Autofill extend profiles to include multi-valued fields.
Changes to the underlying |autofill_profiles| schema. These changes split out name, email, and phone information into separate relationaly-tied tables so that we can support multi-valued fields. New tables are introduced: |autofill_profile_names|, |autofill_profile_emails|, and |autofill_profile_phones|. Also, the |label| fields have been removed from both |credit_cards| and |autofill_profiles|.
BUG=65625
TEST=WebDatabaseMigrationTest.*:WebDatabaseTest.*
Review URL: http://codereview.chromium.org/6546034
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@75710 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/webdata/web_database_unittest.cc')
-rw-r--r-- | chrome/browser/webdata/web_database_unittest.cc | 439 |
1 files changed, 397 insertions, 42 deletions
diff --git a/chrome/browser/webdata/web_database_unittest.cc b/chrome/browser/webdata/web_database_unittest.cc index 0c9b758..4c7baa9 100644 --- a/chrome/browser/webdata/web_database_unittest.cc +++ b/chrome/browser/webdata/web_database_unittest.cc @@ -149,6 +149,23 @@ void AutoFillProfile32FromStatement(const sql::Statement& s, *date_modified = s.ColumnInt64(15); } +void AutoFillProfile33FromStatement(const sql::Statement& s, + AutoFillProfile* profile, + int64* date_modified) { + DCHECK(profile); + DCHECK(date_modified); + profile->set_guid(s.ColumnString(0)); + EXPECT_TRUE(guid::IsValidGUID(profile->guid())); + profile->SetInfo(AutoFillType(COMPANY_NAME), s.ColumnString16(1)); + profile->SetInfo(AutoFillType(ADDRESS_HOME_LINE1), s.ColumnString16(2)); + profile->SetInfo(AutoFillType(ADDRESS_HOME_LINE2), s.ColumnString16(3)); + profile->SetInfo(AutoFillType(ADDRESS_HOME_CITY), s.ColumnString16(4)); + profile->SetInfo(AutoFillType(ADDRESS_HOME_STATE), s.ColumnString16(5)); + profile->SetInfo(AutoFillType(ADDRESS_HOME_ZIP), s.ColumnString16(6)); + profile->SetInfo(AutoFillType(ADDRESS_HOME_COUNTRY), s.ColumnString16(7)); + *date_modified = s.ColumnInt64(8); +} + void CreditCard31FromStatement(const sql::Statement& s, CreditCard* credit_card, string16* label, @@ -180,27 +197,24 @@ void CreditCard31FromStatement(const sql::Statement& s, void CreditCard32FromStatement(const sql::Statement& s, CreditCard* credit_card, - string16* label, std::string* encrypted_number, int64* date_modified) { DCHECK(credit_card); - DCHECK(label); DCHECK(encrypted_number); DCHECK(date_modified); credit_card->set_guid(s.ColumnString(0)); EXPECT_TRUE(guid::IsValidGUID(credit_card->guid())); - *label = s.ColumnString16(1); - credit_card->SetInfo(AutoFillType(CREDIT_CARD_NAME), s.ColumnString16(2)); + credit_card->SetInfo(AutoFillType(CREDIT_CARD_NAME), s.ColumnString16(1)); credit_card->SetInfo(AutoFillType(CREDIT_CARD_EXP_MONTH), - s.ColumnString16(3)); + s.ColumnString16(2)); credit_card->SetInfo(AutoFillType(CREDIT_CARD_EXP_4_DIGIT_YEAR), - s.ColumnString16(4)); - int encrypted_number_len = s.ColumnByteLength(5); + s.ColumnString16(3)); + int encrypted_number_len = s.ColumnByteLength(4); if (encrypted_number_len) { encrypted_number->resize(encrypted_number_len); - memcpy(&(*encrypted_number)[0], s.ColumnBlob(5), encrypted_number_len); + memcpy(&(*encrypted_number)[0], s.ColumnBlob(4), encrypted_number_len); } - *date_modified = s.ColumnInt64(6); + *date_modified = s.ColumnInt64(5); } } // namespace @@ -1458,7 +1472,7 @@ TEST_F(WebDatabaseTest, AutoFillProfile) { EXPECT_FALSE(s_billing.Step()); delete db_profile; - // Update the 'Billing' profile. + // Update the 'Billing' profile, name only. billing_profile.SetInfo(AutoFillType(NAME_FIRST), ASCIIToUTF16("Jane")); Time pre_modification_time = Time::Now(); EXPECT_TRUE(db.UpdateAutoFillProfile(billing_profile)); @@ -1477,6 +1491,45 @@ TEST_F(WebDatabaseTest, AutoFillProfile) { EXPECT_FALSE(s_billing_updated.Step()); delete db_profile; + // Update the 'Billing' profile. + billing_profile.SetInfo(AutoFillType(NAME_FIRST), ASCIIToUTF16("Janice")); + billing_profile.SetInfo(AutoFillType(NAME_MIDDLE), ASCIIToUTF16("C.")); + billing_profile.SetInfo(AutoFillType(NAME_FIRST), ASCIIToUTF16("Joplin")); + billing_profile.SetInfo(AutoFillType(EMAIL_ADDRESS), + ASCIIToUTF16("jane@singer.com")); + billing_profile.SetInfo(AutoFillType(COMPANY_NAME), ASCIIToUTF16("Indy")); + billing_profile.SetInfo(AutoFillType(ADDRESS_HOME_LINE1), + ASCIIToUTF16("Open Road")); + billing_profile.SetInfo(AutoFillType(ADDRESS_HOME_LINE2), + ASCIIToUTF16("Route 66")); + billing_profile.SetInfo(AutoFillType(ADDRESS_HOME_CITY), + ASCIIToUTF16("NFA")); + billing_profile.SetInfo(AutoFillType(ADDRESS_HOME_STATE), ASCIIToUTF16("NY")); + billing_profile.SetInfo(AutoFillType(ADDRESS_HOME_ZIP), + ASCIIToUTF16("10011")); + billing_profile.SetInfo(AutoFillType(ADDRESS_HOME_COUNTRY), + ASCIIToUTF16("USA")); + billing_profile.SetInfo(AutoFillType(PHONE_HOME_WHOLE_NUMBER), + ASCIIToUTF16("18181230000")); + billing_profile.SetInfo(AutoFillType(PHONE_FAX_WHOLE_NUMBER), + ASCIIToUTF16("1915240000")); + Time pre_modification_time_2 = Time::Now(); + EXPECT_TRUE(db.UpdateAutoFillProfile(billing_profile)); + Time post_modification_time_2 = Time::Now(); + ASSERT_TRUE(db.GetAutoFillProfile(billing_profile.guid(), &db_profile)); + EXPECT_EQ(billing_profile, *db_profile); + sql::Statement s_billing_updated_2(db.db_.GetUniqueStatement( + "SELECT date_modified FROM autofill_profiles WHERE guid=?")); + s_billing_updated_2.BindString(0, billing_profile.guid()); + ASSERT_TRUE(s_billing_updated_2); + ASSERT_TRUE(s_billing_updated_2.Step()); + EXPECT_GE(s_billing_updated_2.ColumnInt64(0), + pre_modification_time_2.ToTimeT()); + EXPECT_LE(s_billing_updated_2.ColumnInt64(0), + post_modification_time_2.ToTimeT()); + EXPECT_FALSE(s_billing_updated_2.Step()); + delete db_profile; + // Remove the 'Billing' profile. EXPECT_TRUE(db.RemoveAutoFillProfile(billing_profile.guid())); EXPECT_FALSE(db.GetAutoFillProfile(billing_profile.guid(), &db_profile)); @@ -1507,14 +1560,14 @@ TEST_F(WebDatabaseTest, CreditCard) { ASSERT_TRUE(db.GetCreditCard(work_creditcard.guid(), &db_creditcard)); EXPECT_EQ(work_creditcard, *db_creditcard); sql::Statement s_work(db.db_.GetUniqueStatement( - "SELECT guid, label, name_on_card, expiration_month, expiration_year, " + "SELECT guid, name_on_card, expiration_month, expiration_year, " "card_number_encrypted, date_modified " "FROM credit_cards WHERE guid=?")); s_work.BindString(0, work_creditcard.guid()); ASSERT_TRUE(s_work); ASSERT_TRUE(s_work.Step()); - EXPECT_GE(s_work.ColumnInt64(6), pre_creation_time.ToTimeT()); - EXPECT_LE(s_work.ColumnInt64(6), post_creation_time.ToTimeT()); + EXPECT_GE(s_work.ColumnInt64(5), pre_creation_time.ToTimeT()); + EXPECT_LE(s_work.ColumnInt64(5), post_creation_time.ToTimeT()); EXPECT_FALSE(s_work.Step()); delete db_creditcard; @@ -1535,14 +1588,14 @@ TEST_F(WebDatabaseTest, CreditCard) { ASSERT_TRUE(db.GetCreditCard(target_creditcard.guid(), &db_creditcard)); EXPECT_EQ(target_creditcard, *db_creditcard); sql::Statement s_target(db.db_.GetUniqueStatement( - "SELECT guid, label, name_on_card, expiration_month, expiration_year, " + "SELECT guid, name_on_card, expiration_month, expiration_year, " "card_number_encrypted, date_modified " "FROM credit_cards WHERE guid=?")); s_target.BindString(0, target_creditcard.guid()); ASSERT_TRUE(s_target); ASSERT_TRUE(s_target.Step()); - EXPECT_GE(s_target.ColumnInt64(6), pre_creation_time.ToTimeT()); - EXPECT_LE(s_target.ColumnInt64(6), post_creation_time.ToTimeT()); + EXPECT_GE(s_target.ColumnInt64(5), pre_creation_time.ToTimeT()); + EXPECT_LE(s_target.ColumnInt64(5), post_creation_time.ToTimeT()); EXPECT_FALSE(s_target.Step()); delete db_creditcard; @@ -1555,16 +1608,14 @@ TEST_F(WebDatabaseTest, CreditCard) { ASSERT_TRUE(db.GetCreditCard(target_creditcard.guid(), &db_creditcard)); EXPECT_EQ(target_creditcard, *db_creditcard); sql::Statement s_target_updated(db.db_.GetUniqueStatement( - "SELECT guid, label, name_on_card, expiration_month, expiration_year, " + "SELECT guid, name_on_card, expiration_month, expiration_year, " "card_number_encrypted, date_modified " "FROM credit_cards WHERE guid=?")); s_target_updated.BindString(0, target_creditcard.guid()); ASSERT_TRUE(s_target_updated); ASSERT_TRUE(s_target_updated.Step()); - EXPECT_GE(s_target_updated.ColumnInt64(6), - pre_modification_time.ToTimeT()); - EXPECT_LE(s_target_updated.ColumnInt64(6), - post_modification_time.ToTimeT()); + EXPECT_GE(s_target_updated.ColumnInt64(5), pre_modification_time.ToTimeT()); + EXPECT_LE(s_target_updated.ColumnInt64(5), post_modification_time.ToTimeT()); EXPECT_FALSE(s_target_updated.Step()); delete db_creditcard; @@ -2053,7 +2104,7 @@ class WebDatabaseMigrationTest : public testing::Test { DISALLOW_COPY_AND_ASSIGN(WebDatabaseMigrationTest); }; -const int WebDatabaseMigrationTest::kCurrentTestedVersionNumber = 32; +const int WebDatabaseMigrationTest::kCurrentTestedVersionNumber = 33; void WebDatabaseMigrationTest::LoadDatabase(const FilePath& file) { std::string contents; @@ -2391,14 +2442,13 @@ TEST_F(WebDatabaseMigrationTest, MigrateVersion26ToCurrentStringLabels) { // Verify the credit card data is converted. sql::Statement s(connection.GetUniqueStatement( - "SELECT guid, label, name_on_card, expiration_month, expiration_year, " + "SELECT guid, name_on_card, expiration_month, expiration_year, " "card_number_encrypted, date_modified " "FROM credit_cards")); ASSERT_TRUE(s.Step()); - EXPECT_EQ("label", s.ColumnString(1)); - EXPECT_EQ("Jack", s.ColumnString(2)); - EXPECT_EQ(2, s.ColumnInt(3)); - EXPECT_EQ(2012, s.ColumnInt(4)); + EXPECT_EQ("Jack", s.ColumnString(1)); + EXPECT_EQ(2, s.ColumnInt(2)); + EXPECT_EQ(2012, s.ColumnInt(3)); // Column 5 is encrypted number blob. // Column 6 is date_modified. } @@ -2467,14 +2517,13 @@ TEST_F(WebDatabaseMigrationTest, MigrateVersion26ToCurrentStringIDs) { // Verify the credit card data is converted. sql::Statement s(connection.GetUniqueStatement( - "SELECT guid, label, name_on_card, expiration_month, expiration_year, " + "SELECT guid, name_on_card, expiration_month, expiration_year, " "card_number_encrypted, date_modified " "FROM credit_cards")); ASSERT_TRUE(s.Step()); - EXPECT_EQ("label", s.ColumnString(1)); - EXPECT_EQ("Jack", s.ColumnString(2)); - EXPECT_EQ(2, s.ColumnInt(3)); - EXPECT_EQ(2012, s.ColumnInt(4)); + EXPECT_EQ("Jack", s.ColumnString(1)); + EXPECT_EQ(2, s.ColumnInt(2)); + EXPECT_EQ(2012, s.ColumnInt(3)); // Column 5 is encrypted credit card number blob. // Column 6 is date_modified. } @@ -2739,24 +2788,35 @@ TEST_F(WebDatabaseMigrationTest, MigrateVersion31ToCurrent) { // Verify data in the database after the migration. sql::Statement s1( connection.GetUniqueStatement( - "SELECT guid, label, first_name, middle_name, last_name, " - "email, company_name, address_line_1, address_line_2, city, state, " - "zipcode, country, phone, fax, date_modified " + "SELECT guid, company_name, address_line_1, address_line_2, " + "city, state, zipcode, country, date_modified " "FROM autofill_profiles")); ASSERT_TRUE(s1.Step()); AutoFillProfile profile_a; - string16 profile_label_a; int64 profile_date_modified_a = 0; - EXPECT_NO_FATAL_FAILURE(AutoFillProfile32FromStatement( - s1, &profile_a, &profile_label_a, &profile_date_modified_a)); - EXPECT_EQ(profile, profile_a); - EXPECT_EQ(profile_label, profile_label_a); + EXPECT_NO_FATAL_FAILURE(AutoFillProfile33FromStatement( + s1, &profile_a, &profile_date_modified_a)); + EXPECT_EQ(profile.guid(), profile_a.guid()); + EXPECT_EQ(profile.GetFieldText(AutoFillType(COMPANY_NAME)), + profile_a.GetFieldText(AutoFillType(COMPANY_NAME))); + EXPECT_EQ(profile.GetFieldText(AutoFillType(ADDRESS_HOME_LINE1)), + profile_a.GetFieldText(AutoFillType(ADDRESS_HOME_LINE1))); + EXPECT_EQ(profile.GetFieldText(AutoFillType(ADDRESS_HOME_LINE2)), + profile_a.GetFieldText(AutoFillType(ADDRESS_HOME_LINE2))); + EXPECT_EQ(profile.GetFieldText(AutoFillType(ADDRESS_HOME_CITY)), + profile_a.GetFieldText(AutoFillType(ADDRESS_HOME_CITY))); + EXPECT_EQ(profile.GetFieldText(AutoFillType(ADDRESS_HOME_STATE)), + profile_a.GetFieldText(AutoFillType(ADDRESS_HOME_STATE))); + EXPECT_EQ(profile.GetFieldText(AutoFillType(ADDRESS_HOME_ZIP)), + profile_a.GetFieldText(AutoFillType(ADDRESS_HOME_ZIP))); + EXPECT_EQ(profile.GetFieldText(AutoFillType(ADDRESS_HOME_COUNTRY)), + profile_a.GetFieldText(AutoFillType(ADDRESS_HOME_COUNTRY))); EXPECT_EQ(profile_date_modified, profile_date_modified_a); sql::Statement s2( connection.GetUniqueStatement( - "SELECT guid, label, name_on_card, expiration_month, " + "SELECT guid, name_on_card, expiration_month, " "expiration_year, card_number_encrypted, date_modified " "FROM credit_cards")); ASSERT_TRUE(s2.Step()); @@ -2767,7 +2827,6 @@ TEST_F(WebDatabaseMigrationTest, MigrateVersion31ToCurrent) { int64 cc_date_modified_a = 0; EXPECT_NO_FATAL_FAILURE(CreditCard32FromStatement(s2, &credit_card_a, - &cc_label_a, &cc_number_encrypted_a, &cc_date_modified_a)); EXPECT_EQ(credit_card, credit_card_a); @@ -2776,3 +2835,299 @@ TEST_F(WebDatabaseMigrationTest, MigrateVersion31ToCurrent) { EXPECT_EQ(cc_date_modified, cc_date_modified_a); } } + +// Factor |autofill_profiles| address information separately from name, email, +// and phone. +TEST_F(WebDatabaseMigrationTest, MigrateVersion32ToCurrent) { + // Initialize the database. + ASSERT_NO_FATAL_FAILURE( + LoadDatabase(FilePath(FILE_PATH_LITERAL("version_32.sql")))); + + // Verify pre-conditions. These are expectations for version 32 of the + // database. + { + sql::Connection connection; + ASSERT_TRUE(connection.Open(GetDatabasePath())); + + // Verify existence of columns we'll be changing. + EXPECT_TRUE(connection.DoesColumnExist("autofill_profiles", "guid")); + EXPECT_TRUE(connection.DoesColumnExist("autofill_profiles", "label")); + EXPECT_TRUE(connection.DoesColumnExist("autofill_profiles", "first_name")); + EXPECT_TRUE(connection.DoesColumnExist("autofill_profiles", "middle_name")); + EXPECT_TRUE(connection.DoesColumnExist("autofill_profiles", "last_name")); + EXPECT_TRUE(connection.DoesColumnExist("autofill_profiles", "email")); + EXPECT_TRUE(connection.DoesColumnExist("autofill_profiles", + "company_name")); + EXPECT_TRUE(connection.DoesColumnExist("autofill_profiles", + "address_line_1")); + EXPECT_TRUE(connection.DoesColumnExist("autofill_profiles", + "address_line_2")); + EXPECT_TRUE(connection.DoesColumnExist("autofill_profiles", "city")); + EXPECT_TRUE(connection.DoesColumnExist("autofill_profiles", "state")); + EXPECT_TRUE(connection.DoesColumnExist("autofill_profiles", "zipcode")); + EXPECT_TRUE(connection.DoesColumnExist("autofill_profiles", "country")); + EXPECT_TRUE(connection.DoesColumnExist("autofill_profiles", "phone")); + EXPECT_TRUE(connection.DoesColumnExist("autofill_profiles", "fax")); + EXPECT_TRUE(connection.DoesColumnExist("autofill_profiles", + "date_modified")); + + EXPECT_FALSE(connection.DoesTableExist("autofill_profile_names")); + EXPECT_FALSE(connection.DoesTableExist("autofill_profile_emails")); + EXPECT_FALSE(connection.DoesTableExist("autofill_profile_phones")); + + EXPECT_TRUE(connection.DoesColumnExist("credit_cards", "label")); + } + + // Load the database via the WebDatabase class and migrate the database to + // the current version. + { + WebDatabase db; + ASSERT_EQ(sql::INIT_OK, db.Init(GetDatabasePath())); + } + + // Verify post-conditions. These are expectations for current version of the + // database. + { + sql::Connection connection; + ASSERT_TRUE(connection.Open(GetDatabasePath())); + + // Check version. + EXPECT_EQ(kCurrentTestedVersionNumber, VersionFromConnection(&connection)); + + // Verify changes to columns. + EXPECT_TRUE(connection.DoesColumnExist("autofill_profiles", "guid")); + EXPECT_FALSE(connection.DoesColumnExist("autofill_profiles", "label")); + EXPECT_FALSE(connection.DoesColumnExist("autofill_profiles", "first_name")); + EXPECT_FALSE(connection.DoesColumnExist("autofill_profiles", + "middle_name")); + EXPECT_FALSE(connection.DoesColumnExist("autofill_profiles", "last_name")); + EXPECT_FALSE(connection.DoesColumnExist("autofill_profiles", "email")); + EXPECT_TRUE(connection.DoesColumnExist("autofill_profiles", + "company_name")); + EXPECT_TRUE(connection.DoesColumnExist("autofill_profiles", + "address_line_1")); + EXPECT_TRUE(connection.DoesColumnExist("autofill_profiles", + "address_line_2")); + EXPECT_TRUE(connection.DoesColumnExist("autofill_profiles", "city")); + EXPECT_TRUE(connection.DoesColumnExist("autofill_profiles", "state")); + EXPECT_TRUE(connection.DoesColumnExist("autofill_profiles", "zipcode")); + EXPECT_TRUE(connection.DoesColumnExist("autofill_profiles", "country")); + EXPECT_FALSE(connection.DoesColumnExist("autofill_profiles", "phone")); + EXPECT_FALSE(connection.DoesColumnExist("autofill_profiles", "fax")); + EXPECT_TRUE(connection.DoesColumnExist("autofill_profiles", + "date_modified")); + + // New "names" table. + EXPECT_TRUE(connection.DoesColumnExist("autofill_profile_names", "guid")); + EXPECT_TRUE(connection.DoesColumnExist("autofill_profile_names", + "first_name")); + EXPECT_TRUE(connection.DoesColumnExist("autofill_profile_names", + "middle_name")); + EXPECT_TRUE(connection.DoesColumnExist("autofill_profile_names", + "last_name")); + + // New "emails" table. + EXPECT_TRUE(connection.DoesColumnExist("autofill_profile_emails", "guid")); + EXPECT_TRUE(connection.DoesColumnExist("autofill_profile_emails", "email")); + + // New "phones" table. + EXPECT_TRUE(connection.DoesColumnExist("autofill_profile_phones", "guid")); + EXPECT_TRUE(connection.DoesColumnExist("autofill_profile_phones", "type")); + EXPECT_TRUE(connection.DoesColumnExist("autofill_profile_phones", + "number")); + + EXPECT_FALSE(connection.DoesColumnExist("credit_cards", "label")); + + // Verify data in the database after the migration. + sql::Statement s1( + connection.GetUniqueStatement( + "SELECT guid, company_name, address_line_1, address_line_2, " + "city, state, zipcode, country, date_modified " + "FROM autofill_profiles")); + + // John Doe. + ASSERT_TRUE(s1.Step()); + EXPECT_EQ("00580526-FF81-EE2A-0546-1AC593A32E2F", s1.ColumnString(0)); + EXPECT_EQ(ASCIIToUTF16("Doe Enterprises"), s1.ColumnString16(1)); + EXPECT_EQ(ASCIIToUTF16("1 Main St"), s1.ColumnString16(2)); + EXPECT_EQ(ASCIIToUTF16("Apt 1"), s1.ColumnString16(3)); + EXPECT_EQ(ASCIIToUTF16("Los Altos"), s1.ColumnString16(4)); + EXPECT_EQ(ASCIIToUTF16("CA"), s1.ColumnString16(5)); + EXPECT_EQ(ASCIIToUTF16("94022"), s1.ColumnString16(6)); + EXPECT_EQ(ASCIIToUTF16("USA"), s1.ColumnString16(7)); + EXPECT_EQ(1297882100UL, s1.ColumnInt64(8)); + + // John P. Doe. + ASSERT_TRUE(s1.Step()); + EXPECT_EQ("589636FD-9037-3053-200C-80ABC97D7344", s1.ColumnString(0)); + EXPECT_EQ(ASCIIToUTF16("Doe Enterprises"), s1.ColumnString16(1)); + EXPECT_EQ(ASCIIToUTF16("1 Main St"), s1.ColumnString16(2)); + EXPECT_EQ(ASCIIToUTF16("Apt 1"), s1.ColumnString16(3)); + EXPECT_EQ(ASCIIToUTF16("Los Altos"), s1.ColumnString16(4)); + EXPECT_EQ(ASCIIToUTF16("CA"), s1.ColumnString16(5)); + EXPECT_EQ(ASCIIToUTF16("94022"), s1.ColumnString16(6)); + EXPECT_EQ(ASCIIToUTF16("USA"), s1.ColumnString16(7)); + EXPECT_EQ(1297882100UL, s1.ColumnInt64(8)); + + // Dave Smith. + ASSERT_TRUE(s1.Step()); + EXPECT_EQ("4C74A9D8-7EEE-423E-F9C2-E7FA70ED1396", s1.ColumnString(0)); + EXPECT_EQ(ASCIIToUTF16(""), s1.ColumnString16(1)); + EXPECT_EQ(ASCIIToUTF16("2 Main Street"), s1.ColumnString16(2)); + EXPECT_EQ(ASCIIToUTF16(""), s1.ColumnString16(3)); + EXPECT_EQ(ASCIIToUTF16("Los Altos"), s1.ColumnString16(4)); + EXPECT_EQ(ASCIIToUTF16("CA"), s1.ColumnString16(5)); + EXPECT_EQ(ASCIIToUTF16("94022"), s1.ColumnString16(6)); + EXPECT_EQ(ASCIIToUTF16("USA"), s1.ColumnString16(7)); + EXPECT_EQ(1297882100UL, s1.ColumnInt64(8)); + + // Dave Smith (Part 2). + ASSERT_TRUE(s1.Step()); + EXPECT_EQ("722DF5C4-F74A-294A-46F0-31FFDED0D635", s1.ColumnString(0)); + EXPECT_EQ(ASCIIToUTF16(""), s1.ColumnString16(1)); + EXPECT_EQ(ASCIIToUTF16("2 Main St"), s1.ColumnString16(2)); + EXPECT_EQ(ASCIIToUTF16(""), s1.ColumnString16(3)); + EXPECT_EQ(ASCIIToUTF16("Los Altos"), s1.ColumnString16(4)); + EXPECT_EQ(ASCIIToUTF16("CA"), s1.ColumnString16(5)); + EXPECT_EQ(ASCIIToUTF16("94022"), s1.ColumnString16(6)); + EXPECT_EQ(ASCIIToUTF16("USA"), s1.ColumnString16(7)); + EXPECT_EQ(1297882100UL, s1.ColumnInt64(8)); + + // Alfred E Newman. + ASSERT_TRUE(s1.Step()); + EXPECT_EQ("584282AC-5D21-8D73-A2DB-4F892EF61F3F", s1.ColumnString(0)); + EXPECT_EQ(ASCIIToUTF16(""), s1.ColumnString16(1)); + EXPECT_EQ(ASCIIToUTF16(""), s1.ColumnString16(2)); + EXPECT_EQ(ASCIIToUTF16(""), s1.ColumnString16(3)); + EXPECT_EQ(ASCIIToUTF16(""), s1.ColumnString16(4)); + EXPECT_EQ(ASCIIToUTF16(""), s1.ColumnString16(5)); + EXPECT_EQ(ASCIIToUTF16(""), s1.ColumnString16(6)); + EXPECT_EQ(ASCIIToUTF16(""), s1.ColumnString16(7)); + EXPECT_EQ(1297882100UL, s1.ColumnInt64(8)); + + // 3 Main St. + ASSERT_TRUE(s1.Step()); + EXPECT_EQ("9E5FE298-62C7-83DF-6293-381BC589183F", s1.ColumnString(0)); + EXPECT_EQ(ASCIIToUTF16(""), s1.ColumnString16(1)); + EXPECT_EQ(ASCIIToUTF16("3 Main St"), s1.ColumnString16(2)); + EXPECT_EQ(ASCIIToUTF16(""), s1.ColumnString16(3)); + EXPECT_EQ(ASCIIToUTF16("Los Altos"), s1.ColumnString16(4)); + EXPECT_EQ(ASCIIToUTF16("CA"), s1.ColumnString16(5)); + EXPECT_EQ(ASCIIToUTF16("94022"), s1.ColumnString16(6)); + EXPECT_EQ(ASCIIToUTF16("USA"), s1.ColumnString16(7)); + EXPECT_EQ(1297882100UL, s1.ColumnInt64(8)); + + // That should be all. + EXPECT_FALSE(s1.Step()); + + sql::Statement s2( + connection.GetUniqueStatement( + "SELECT guid, first_name, middle_name, last_name " + "FROM autofill_profile_names")); + + // John Doe. + ASSERT_TRUE(s2.Step()); + EXPECT_EQ("00580526-FF81-EE2A-0546-1AC593A32E2F", s2.ColumnString(0)); + EXPECT_EQ(ASCIIToUTF16("John"), s2.ColumnString16(1)); + EXPECT_EQ(ASCIIToUTF16(""), s2.ColumnString16(2)); + EXPECT_EQ(ASCIIToUTF16("Doe"), s2.ColumnString16(3)); + + // John P. Doe. + ASSERT_TRUE(s2.Step()); + EXPECT_EQ("589636FD-9037-3053-200C-80ABC97D7344", s2.ColumnString(0)); + EXPECT_EQ(ASCIIToUTF16("John"), s2.ColumnString16(1)); + EXPECT_EQ(ASCIIToUTF16("P."), s2.ColumnString16(2)); + EXPECT_EQ(ASCIIToUTF16("Doe"), s2.ColumnString16(3)); + + // Dave Smith. + ASSERT_TRUE(s2.Step()); + EXPECT_EQ("4C74A9D8-7EEE-423E-F9C2-E7FA70ED1396", s2.ColumnString(0)); + EXPECT_EQ(ASCIIToUTF16("Dave"), s2.ColumnString16(1)); + EXPECT_EQ(ASCIIToUTF16(""), s2.ColumnString16(2)); + EXPECT_EQ(ASCIIToUTF16("Smith"), s2.ColumnString16(3)); + + // Dave Smith (Part 2). + ASSERT_TRUE(s2.Step()); + EXPECT_EQ("722DF5C4-F74A-294A-46F0-31FFDED0D635", s2.ColumnString(0)); + EXPECT_EQ(ASCIIToUTF16("Dave"), s2.ColumnString16(1)); + EXPECT_EQ(ASCIIToUTF16(""), s2.ColumnString16(2)); + EXPECT_EQ(ASCIIToUTF16("Smith"), s2.ColumnString16(3)); + + // Alfred E Newman. + ASSERT_TRUE(s2.Step()); + EXPECT_EQ("584282AC-5D21-8D73-A2DB-4F892EF61F3F", s2.ColumnString(0)); + EXPECT_EQ(ASCIIToUTF16("Alfred"), s2.ColumnString16(1)); + EXPECT_EQ(ASCIIToUTF16("E"), s2.ColumnString16(2)); + EXPECT_EQ(ASCIIToUTF16("Newman"), s2.ColumnString16(3)); + + // Note no name for 3 Main St. + + // Should be all. + EXPECT_FALSE(s2.Step()); + + sql::Statement s3( + connection.GetUniqueStatement( + "SELECT guid, email " + "FROM autofill_profile_emails")); + + // John Doe. + ASSERT_TRUE(s3.Step()); + EXPECT_EQ("00580526-FF81-EE2A-0546-1AC593A32E2F", s3.ColumnString(0)); + EXPECT_EQ(ASCIIToUTF16("john@doe.com"), s3.ColumnString16(1)); + + // John P. Doe. + ASSERT_TRUE(s3.Step()); + EXPECT_EQ("589636FD-9037-3053-200C-80ABC97D7344", s3.ColumnString(0)); + EXPECT_EQ(ASCIIToUTF16("john@doe.com"), s3.ColumnString16(1)); + + // Note no email for 2 Main Street. + // Note no email for 2 Main St. + + // Alfred E Newman. + ASSERT_TRUE(s3.Step()); + EXPECT_EQ("584282AC-5D21-8D73-A2DB-4F892EF61F3F", s3.ColumnString(0)); + EXPECT_EQ(ASCIIToUTF16("a@e.com"), s3.ColumnString16(1)); + + // Note no email for 3 Main St. + + // Should be all. + EXPECT_FALSE(s3.Step()); + + sql::Statement s4( + connection.GetUniqueStatement( + "SELECT guid, type, number " + "FROM autofill_profile_phones")); + + // John Doe phone. + ASSERT_TRUE(s4.Step()); + EXPECT_EQ("00580526-FF81-EE2A-0546-1AC593A32E2F", s4.ColumnString(0)); + EXPECT_EQ(0, s4.ColumnInt(1)); // 0 means phone. + EXPECT_EQ(ASCIIToUTF16("4151112222"), s4.ColumnString16(2)); + + // John Doe fax. + ASSERT_TRUE(s4.Step()); + EXPECT_EQ("00580526-FF81-EE2A-0546-1AC593A32E2F", s4.ColumnString(0)); + EXPECT_EQ(1, s4.ColumnInt(1)); // 1 means phone. + EXPECT_EQ(ASCIIToUTF16("4153334444"), s4.ColumnString16(2)); + + // John P. Doe phone. + ASSERT_TRUE(s4.Step()); + EXPECT_EQ("589636FD-9037-3053-200C-80ABC97D7344", s4.ColumnString(0)); + EXPECT_EQ(0, s4.ColumnInt(1)); // 0 means phone. + EXPECT_EQ(ASCIIToUTF16("4151112222"), s4.ColumnString16(2)); + + // John P. Doe fax. + ASSERT_TRUE(s4.Step()); + EXPECT_EQ("589636FD-9037-3053-200C-80ABC97D7344", s4.ColumnString(0)); + EXPECT_EQ(1, s4.ColumnInt(1)); // 1 means fax. + EXPECT_EQ(ASCIIToUTF16("4153334444"), s4.ColumnString16(2)); + + // Note no phone or fax for 2 Main Street. + // Note no phone or fax for 2 Main St. + // Note no phone or fax for Alfred E Newman. + // Note no phone or fax for 3 Main St. + + // Should be all. + EXPECT_FALSE(s4.Step()); + } +} |