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..0ece892cfe4f636598149b10c95caa3af283da1e 100644 |
--- a/components/history/core/browser/thumbnail_database_unittest.cc |
+++ b/components/history/core/browser/thumbnail_database_unittest.cc |
@@ -76,6 +76,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 AddAndMapFaviconSimple(ThumbnailDatabase* db, |
+ 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 +160,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 +511,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)); |
+ const GURL kPageUrl("http://www.google.com"); |
+ AddAndMapFaviconSimple(&db, kPageUrl, kIconUrl1, favicon_base::FAVICON); |
+ AddAndMapFaviconSimple(&db, kPageUrl, kIconUrl2, favicon_base::TOUCH_ICON); |
+ AddAndMapFaviconSimple(&db, kPageUrl, kIconUrl3, favicon_base::TOUCH_ICON); |
+ AddAndMapFaviconSimple(&db, kPageUrl, kIconUrl5, |
+ 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, |
+ kPageUrl, 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); |
+ ASSERT_EQ(3u, icon_mappings.size()); |
+ EXPECT_EQ(kIconUrl1, icon_mappings[0].icon_url); |
+ EXPECT_EQ(kIconUrl3, icon_mappings[1].icon_url); |
+ EXPECT_EQ(kIconUrl2, icon_mappings[2].icon_url); |
} |
TEST_F(ThumbnailDatabaseTest, HasMappingFor) { |