Chromium Code Reviews| Index: components/history/core/browser/thumbnail_database_unittest.cc |
| diff --git a/components/history/core/browser/thumbnail_database_unittest.cc b/components/history/core/browser/thumbnail_database_unittest.cc |
| index cd1c83fafcc3d9e84992705ca98c55521be199e4..98f971150de75e12c7fa1dcae064e26a18a18b0b 100644 |
| --- a/components/history/core/browser/thumbnail_database_unittest.cc |
| +++ b/components/history/core/browser/thumbnail_database_unittest.cc |
| @@ -41,10 +41,11 @@ const GURL kPageUrl3 = GURL("http://www.google.com/"); |
| const GURL kPageUrl4 = GURL("http://www.google.com/blank.html"); |
| const GURL kPageUrl5 = GURL("http://www.bing.com/"); |
| -const GURL kIconUrl1 = GURL("http://www.google.com/favicon.ico"); |
| -const GURL kIconUrl2 = GURL("http://www.yahoo.com/favicon.ico"); |
| -const GURL kIconUrl3 = GURL("http://www.google.com/touch.ico"); |
| -const GURL kIconUrl5 = GURL("http://www.bing.com/favicon.ico"); |
| +const GURL kIconUrl1 = GURL("http://www.bing.com/favicon.ico"); |
| +const GURL kIconUrl2 = GURL("http://www.duckduckgo.com/favicon.ico"); |
| +const GURL kIconUrl3 = GURL("http://www.google.com/favicon.ico"); |
| +const GURL kIconUrl4 = GURL("http://www.google.com/touch.ico"); |
| +const GURL kIconUrl5 = GURL("http://www.yahoo.com/favicon.ico"); |
| const gfx::Size kSmallSize = gfx::Size(16, 16); |
| const gfx::Size kLargeSize = gfx::Size(32, 32); |
| @@ -76,6 +77,19 @@ void VerifyTablesAndColumns(sql::Connection* db) { |
| EXPECT_EQ(3u, sql::test::CountTableColumns(db, "icon_mapping")); |
| } |
| +// Adds a favicon at |icon_url| with |icon_type| with default bitmap data and |
| +// maps |page_url| to |icon_url|. |
| +void AddFaviconAndMapSimple(ThumbnailDatabase* db, |
|
mastiz
2017/04/20 08:55:59
Nit: s/Map/Mapping/?
'Map' can otherwise interpre
pkotwicz
2017/04/30 03:49:56
Done.
|
| + const GURL& page_url, |
| + const GURL& icon_url, |
| + favicon_base::IconType icon_type) { |
| + scoped_refptr<base::RefCountedStaticMemory> data( |
| + new base::RefCountedStaticMemory(kBlob1, sizeof(kBlob1))); |
| + favicon_base::FaviconID favicon_id = |
| + db->AddFavicon(icon_url, icon_type, data, base::Time::Now(), gfx::Size()); |
| + db->AddIconMapping(page_url, favicon_id); |
| +} |
| + |
| void VerifyDatabaseEmpty(sql::Connection* db) { |
| size_t rows = 0; |
| EXPECT_TRUE(sql::test::CountTableRows(db, "favicons", &rows)); |
| @@ -147,6 +161,14 @@ WARN_UNUSED_RESULT bool CheckPageHasIcon( |
| return true; |
| } |
| +bool CompareIconMappingIconUrl(const IconMapping& a, const IconMapping& b) { |
| + return a.icon_url < b.icon_url; |
| +} |
| + |
| +void SortMappingsByIconUrl(std::vector<IconMapping>* mappings) { |
| + std::sort(mappings->begin(), mappings->end(), &CompareIconMappingIconUrl); |
| +} |
| + |
| } // namespace |
| class ThumbnailDatabaseTest : public testing::Test { |
| @@ -490,61 +512,31 @@ TEST_F(ThumbnailDatabaseTest, GetIconMappingsForPageURLForReturnOrder) { |
| EXPECT_EQ(icon_url, icon_mappings.front().icon_url); |
| } |
| -// Test result of GetIconMappingsForPageURL when an icon type is passed in. |
| -TEST_F(ThumbnailDatabaseTest, GetIconMappingsForPageURLWithIconType) { |
| +// Test that when multiple icon types are passed to GetIconMappingsForPageURL() |
| +// that the results are filtered according to the passed in types. |
| +TEST_F(ThumbnailDatabaseTest, GetIconMappingsForPageURLWithIconTypes) { |
| ThumbnailDatabase db(NULL); |
| ASSERT_EQ(sql::INIT_OK, db.Init(file_name_)); |
| db.BeginTransaction(); |
| - GURL url("http://google.com"); |
| - std::vector<unsigned char> data(kBlob1, kBlob1 + sizeof(kBlob1)); |
| - scoped_refptr<base::RefCountedBytes> favicon(new base::RefCountedBytes(data)); |
| - base::Time time = base::Time::Now(); |
| - |
| - favicon_base::FaviconID id1 = |
| - db.AddFavicon(url, favicon_base::FAVICON, favicon, time, gfx::Size()); |
| - EXPECT_NE(0, db.AddIconMapping(url, id1)); |
| - |
| - favicon_base::FaviconID id2 = |
| - db.AddFavicon(url, favicon_base::TOUCH_ICON, favicon, time, gfx::Size()); |
| - EXPECT_NE(0, db.AddIconMapping(url, id2)); |
| - |
| - favicon_base::FaviconID id3 = |
| - db.AddFavicon(url, favicon_base::TOUCH_ICON, favicon, time, gfx::Size()); |
| - EXPECT_NE(0, db.AddIconMapping(url, id3)); |
| + GURL page_url("http://www.google.com"); |
| + AddFaviconAndMapSimple(&db, page_url, kIconUrl1, favicon_base::FAVICON); |
| + AddFaviconAndMapSimple(&db, page_url, kIconUrl2, favicon_base::TOUCH_ICON); |
| + AddFaviconAndMapSimple(&db, page_url, kIconUrl3, favicon_base::TOUCH_ICON); |
| + AddFaviconAndMapSimple(&db, page_url, kIconUrl4, |
| + favicon_base::TOUCH_PRECOMPOSED_ICON); |
| - // Only the mappings for favicons of type TOUCH_ICON should be returned as |
| - // TOUCH_ICON is a larger icon type than FAVICON. |
| + // Only the mappings for FAVICON and TOUCH_ICON should be returned. |
| std::vector<IconMapping> icon_mappings; |
| EXPECT_TRUE(db.GetIconMappingsForPageURL( |
| - url, |
| - favicon_base::FAVICON | favicon_base::TOUCH_ICON | |
| - favicon_base::TOUCH_PRECOMPOSED_ICON, |
| + page_url, favicon_base::FAVICON | favicon_base::TOUCH_ICON, |
| &icon_mappings)); |
| + SortMappingsByIconUrl(&icon_mappings); |
| - EXPECT_EQ(2u, icon_mappings.size()); |
| - if (id2 == icon_mappings[0].icon_id) { |
| - EXPECT_EQ(id3, icon_mappings[1].icon_id); |
| - } else { |
| - EXPECT_EQ(id3, icon_mappings[0].icon_id); |
| - EXPECT_EQ(id2, icon_mappings[1].icon_id); |
| - } |
| - |
| - icon_mappings.clear(); |
| - EXPECT_TRUE(db.GetIconMappingsForPageURL( |
| - url, favicon_base::TOUCH_ICON, &icon_mappings)); |
| - if (id2 == icon_mappings[0].icon_id) { |
| - EXPECT_EQ(id3, icon_mappings[1].icon_id); |
| - } else { |
| - EXPECT_EQ(id3, icon_mappings[0].icon_id); |
| - EXPECT_EQ(id2, icon_mappings[1].icon_id); |
| - } |
| - |
| - icon_mappings.clear(); |
| - EXPECT_TRUE( |
| - db.GetIconMappingsForPageURL(url, favicon_base::FAVICON, &icon_mappings)); |
| - EXPECT_EQ(1u, icon_mappings.size()); |
| - EXPECT_EQ(id1, icon_mappings[0].icon_id); |
| + EXPECT_EQ(3u, icon_mappings.size()); |
| + EXPECT_EQ(kIconUrl1, icon_mappings[0].icon_url); |
| + EXPECT_EQ(kIconUrl2, icon_mappings[1].icon_url); |
| + EXPECT_EQ(kIconUrl3, icon_mappings[2].icon_url); |
|
mastiz
2017/04/20 08:55:59
A more natural way to do this would be to get rid
pkotwicz
2017/04/30 03:49:56
I chose to not add a GMock dependency to this test
|
| } |
| TEST_F(ThumbnailDatabaseTest, HasMappingFor) { |
| @@ -646,34 +638,14 @@ TEST_F(ThumbnailDatabaseTest, Version7) { |
| ASSERT_TRUE(db.get() != NULL); |
| VerifyTablesAndColumns(&db->db_); |
| - EXPECT_TRUE(CheckPageHasIcon(db.get(), |
| - kPageUrl1, |
| - favicon_base::FAVICON, |
| - kIconUrl1, |
| - kLargeSize, |
| - sizeof(kBlob1), |
| - kBlob1)); |
| - EXPECT_TRUE(CheckPageHasIcon(db.get(), |
| - kPageUrl2, |
| - favicon_base::FAVICON, |
| - kIconUrl2, |
| - kLargeSize, |
| - sizeof(kBlob2), |
| - kBlob2)); |
| - EXPECT_TRUE(CheckPageHasIcon(db.get(), |
| - kPageUrl3, |
| - favicon_base::FAVICON, |
| - kIconUrl1, |
| - kLargeSize, |
| - sizeof(kBlob1), |
| - kBlob1)); |
| - EXPECT_TRUE(CheckPageHasIcon(db.get(), |
| - kPageUrl3, |
| - favicon_base::TOUCH_ICON, |
| - kIconUrl3, |
| - kLargeSize, |
| - sizeof(kBlob2), |
| - kBlob2)); |
| + EXPECT_TRUE(CheckPageHasIcon(db.get(), kPageUrl1, favicon_base::FAVICON, |
| + kIconUrl3, kLargeSize, sizeof(kBlob1), kBlob1)); |
| + EXPECT_TRUE(CheckPageHasIcon(db.get(), kPageUrl2, favicon_base::FAVICON, |
| + kIconUrl5, kLargeSize, sizeof(kBlob2), kBlob2)); |
| + EXPECT_TRUE(CheckPageHasIcon(db.get(), kPageUrl3, favicon_base::FAVICON, |
| + kIconUrl3, kLargeSize, sizeof(kBlob1), kBlob1)); |
| + EXPECT_TRUE(CheckPageHasIcon(db.get(), kPageUrl3, favicon_base::TOUCH_ICON, |
| + kIconUrl4, kLargeSize, sizeof(kBlob2), kBlob2)); |
| } |
| // Test loading version 8 database. |
| @@ -682,34 +654,14 @@ TEST_F(ThumbnailDatabaseTest, Version8) { |
| ASSERT_TRUE(db.get() != NULL); |
| VerifyTablesAndColumns(&db->db_); |
| - EXPECT_TRUE(CheckPageHasIcon(db.get(), |
| - kPageUrl1, |
| - favicon_base::FAVICON, |
| - kIconUrl1, |
| - kLargeSize, |
| - sizeof(kBlob1), |
| - kBlob1)); |
| - EXPECT_TRUE(CheckPageHasIcon(db.get(), |
| - kPageUrl2, |
| - favicon_base::FAVICON, |
| - kIconUrl2, |
| - kLargeSize, |
| - sizeof(kBlob2), |
| - kBlob2)); |
| - EXPECT_TRUE(CheckPageHasIcon(db.get(), |
| - kPageUrl3, |
| - favicon_base::FAVICON, |
| - kIconUrl1, |
| - kLargeSize, |
| - sizeof(kBlob1), |
| - kBlob1)); |
| - EXPECT_TRUE(CheckPageHasIcon(db.get(), |
| - kPageUrl3, |
| - favicon_base::TOUCH_ICON, |
| - kIconUrl3, |
| - kLargeSize, |
| - sizeof(kBlob2), |
| - kBlob2)); |
| + EXPECT_TRUE(CheckPageHasIcon(db.get(), kPageUrl1, favicon_base::FAVICON, |
| + kIconUrl3, kLargeSize, sizeof(kBlob1), kBlob1)); |
| + EXPECT_TRUE(CheckPageHasIcon(db.get(), kPageUrl2, favicon_base::FAVICON, |
| + kIconUrl5, kLargeSize, sizeof(kBlob2), kBlob2)); |
| + EXPECT_TRUE(CheckPageHasIcon(db.get(), kPageUrl3, favicon_base::FAVICON, |
| + kIconUrl3, kLargeSize, sizeof(kBlob1), kBlob1)); |
| + EXPECT_TRUE(CheckPageHasIcon(db.get(), kPageUrl3, favicon_base::TOUCH_ICON, |
| + kIconUrl4, kLargeSize, sizeof(kBlob2), kBlob2)); |
| } |
| TEST_F(ThumbnailDatabaseTest, Recovery) { |
| @@ -736,19 +688,11 @@ TEST_F(ThumbnailDatabaseTest, Recovery) { |
| ThumbnailDatabase db(NULL); |
| ASSERT_EQ(sql::INIT_OK, db.Init(file_name_)); |
| - EXPECT_TRUE(CheckPageHasIcon(&db, |
| - kPageUrl1, |
| - favicon_base::FAVICON, |
| - kIconUrl1, |
| - kLargeSize, |
| - sizeof(kBlob1), |
| + EXPECT_TRUE(CheckPageHasIcon(&db, kPageUrl1, favicon_base::FAVICON, |
| + kIconUrl3, kLargeSize, sizeof(kBlob1), |
| kBlob1)); |
| - EXPECT_TRUE(CheckPageHasIcon(&db, |
| - kPageUrl2, |
| - favicon_base::FAVICON, |
| - kIconUrl2, |
| - kLargeSize, |
| - sizeof(kBlob2), |
| + EXPECT_TRUE(CheckPageHasIcon(&db, kPageUrl2, favicon_base::FAVICON, |
| + kIconUrl5, kLargeSize, sizeof(kBlob2), |
| kBlob2)); |
| } |
| @@ -807,12 +751,8 @@ TEST_F(ThumbnailDatabaseTest, Recovery) { |
| EXPECT_FALSE(db.GetIconMappingsForPageURL(kPageUrl2, NULL)); |
| // Other data was retained by recovery. |
| - EXPECT_TRUE(CheckPageHasIcon(&db, |
| - kPageUrl1, |
| - favicon_base::FAVICON, |
| - kIconUrl1, |
| - kLargeSize, |
| - sizeof(kBlob1), |
| + EXPECT_TRUE(CheckPageHasIcon(&db, kPageUrl1, favicon_base::FAVICON, |
| + kIconUrl3, kLargeSize, sizeof(kBlob1), |
| kBlob1)); |
| } |
| @@ -837,12 +777,8 @@ TEST_F(ThumbnailDatabaseTest, Recovery) { |
| ASSERT_EQ(sql::INIT_OK, db.Init(file_name_)); |
| EXPECT_FALSE(db.GetIconMappingsForPageURL(kPageUrl2, NULL)); |
| - EXPECT_TRUE(CheckPageHasIcon(&db, |
| - kPageUrl1, |
| - favicon_base::FAVICON, |
| - kIconUrl1, |
| - kLargeSize, |
| - sizeof(kBlob1), |
| + EXPECT_TRUE(CheckPageHasIcon(&db, kPageUrl1, favicon_base::FAVICON, |
| + kIconUrl3, kLargeSize, sizeof(kBlob1), |
| kBlob1)); |
| ASSERT_TRUE(expecter.SawExpectedErrors()); |
| @@ -919,12 +855,8 @@ TEST_F(ThumbnailDatabaseTest, Recovery7) { |
| EXPECT_FALSE(db.GetIconMappingsForPageURL(kPageUrl2, NULL)); |
| // Other data was retained by recovery. |
| - EXPECT_TRUE(CheckPageHasIcon(&db, |
| - kPageUrl1, |
| - favicon_base::FAVICON, |
| - kIconUrl1, |
| - kLargeSize, |
| - sizeof(kBlob1), |
| + EXPECT_TRUE(CheckPageHasIcon(&db, kPageUrl1, favicon_base::FAVICON, |
| + kIconUrl3, kLargeSize, sizeof(kBlob1), |
| kBlob1)); |
| } |
| @@ -949,12 +881,8 @@ TEST_F(ThumbnailDatabaseTest, Recovery7) { |
| ASSERT_EQ(sql::INIT_OK, db.Init(file_name_)); |
| EXPECT_FALSE(db.GetIconMappingsForPageURL(kPageUrl2, NULL)); |
| - EXPECT_TRUE(CheckPageHasIcon(&db, |
| - kPageUrl1, |
| - favicon_base::FAVICON, |
| - kIconUrl1, |
| - kLargeSize, |
| - sizeof(kBlob1), |
| + EXPECT_TRUE(CheckPageHasIcon(&db, kPageUrl1, favicon_base::FAVICON, |
| + kIconUrl3, kLargeSize, sizeof(kBlob1), |
| kBlob1)); |
| ASSERT_TRUE(expecter.SawExpectedErrors()); |