1 // Copyright 2013 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #include "base/files/file_path.h" 6 #include "chrome/common/media_galleries/picasa_types.h" 7 #include "chrome/utility/media_galleries/picasa_albums_indexer.h" 8 #include "testing/gtest/include/gtest/gtest.h" 9 10 namespace picasa { 11 12 namespace { 13 14 const char test_ini_string[] = 15 "[.album:e66fb059001aabcc69b262b7009fad90]\n" 16 "name=CustomAlbum1\n" 17 "token=e66fb059001aabcc69b262b7009fad90\n" 18 "date=2013-03-15T14:53:21-07:00\n" 19 "[InBoth.jpg]\n" 20 "albums=e66fb059001aabcc69b262b7009fad90,18cb2df48aaa98e1c276b45cfcd81c95\n" 21 "[.album:18cb2df48aaa98e1c276b45cfcd81c95]\n" 22 "name=CustomAlbum2\n" 23 "token=18cb2df48aaa98e1c276b45cfcd81c95\n" 24 "date=2013-04-01T16:37:34-07:00\n" 25 "[InFirst.jpg]\n" 26 "albums=e66fb059001aabcc69b262b7009fad90\n" 27 "[InSecond.jpg]\n" 28 "albums=18cb2df48aaa98e1c276b45cfcd81c95\n"; 29 30 TEST(PicasaAlbumsIndexerTest, ValidCase) { 31 std::set<std::string> valid_album_uuids; 32 valid_album_uuids.insert("e66fb059001aabcc69b262b7009fad90"); 33 valid_album_uuids.insert("18cb2df48aaa98e1c276b45cfcd81c95"); 34 PicasaAlbumsIndexer indexer(valid_album_uuids); 35 36 std::vector<FolderINIContents> folders_inis; 37 FolderINIContents folder_ini; 38 folder_ini.folder_path = base::FilePath(FILE_PATH_LITERAL("/foo/baz")); 39 folder_ini.ini_contents = test_ini_string; 40 folders_inis.push_back(folder_ini); 41 indexer.ParseFolderINI(folders_inis); 42 43 const AlbumImagesMap& albums_images = indexer.albums_images(); 44 AlbumImagesMap::const_iterator it; 45 46 it = albums_images.find("e66fb059001aabcc69b262b7009fad90"); 47 ASSERT_NE(albums_images.end(), it); 48 EXPECT_EQ(2u, it->second.size()); 49 EXPECT_EQ(1u, it->second.count("InBoth.jpg")); 50 EXPECT_EQ(1u, it->second.count("InFirst.jpg")); 51 52 it = albums_images.find("18cb2df48aaa98e1c276b45cfcd81c95"); 53 ASSERT_NE(albums_images.end(), it); 54 EXPECT_EQ(2u, it->second.size()); 55 EXPECT_EQ(1u, it->second.count("InBoth.jpg")); 56 EXPECT_EQ(1u, it->second.count("InSecond.jpg")); 57 } 58 59 TEST(PicasaAlbumsIndexerTest, DedupeNames) { 60 std::set<std::string> valid_album_uuids; 61 valid_album_uuids.insert("e66fb059001aabcc69b262b7009fad90"); 62 valid_album_uuids.insert("18cb2df48aaa98e1c276b45cfcd81c95"); 63 PicasaAlbumsIndexer indexer(valid_album_uuids); 64 65 std::vector<FolderINIContents> folders_inis; 66 FolderINIContents folder_ini; 67 folder_ini.folder_path = base::FilePath(FILE_PATH_LITERAL("/foo/baz")); 68 folder_ini.ini_contents = test_ini_string; 69 folders_inis.push_back(folder_ini); 70 71 // Add a second folder with just a duplicate InFirst.jpg. 72 folder_ini.folder_path = base::FilePath(FILE_PATH_LITERAL("/foo/second")); 73 folder_ini.ini_contents = 74 "[.album:e66fb059001aabcc69b262b7009fad90]\n" 75 "name=CustomAlbum1\n" 76 "token=e66fb059001aabcc69b262b7009fad90\n" 77 "date=2013-03-15T14:53:21-07:00\n" 78 "[InFirst.jpg]\n" 79 "albums=e66fb059001aabcc69b262b7009fad90\n"; 80 folders_inis.push_back(folder_ini); 81 82 // Add a third folder with just a duplicate InFirst.jpg and InSecond.jpg. 83 folder_ini.folder_path = base::FilePath(FILE_PATH_LITERAL("/foo/third")); 84 folder_ini.ini_contents = 85 "[.album:e66fb059001aabcc69b262b7009fad90]\n" 86 "name=CustomAlbum1\n" 87 "token=e66fb059001aabcc69b262b7009fad90\n" 88 "date=2013-03-15T14:53:21-07:00\n" 89 "[.album:18cb2df48aaa98e1c276b45cfcd81c95]\n" 90 "name=CustomAlbum2\n" 91 "token=18cb2df48aaa98e1c276b45cfcd81c95\n" 92 "date=2013-04-01T16:37:34-07:00\n" 93 "[InFirst.jpg]\n" 94 "albums=e66fb059001aabcc69b262b7009fad90\n" 95 "[InSecond.jpg]\n" 96 "albums=18cb2df48aaa98e1c276b45cfcd81c95\n"; 97 folders_inis.push_back(folder_ini); 98 99 indexer.ParseFolderINI(folders_inis); 100 101 const AlbumImagesMap& albums_images = indexer.albums_images(); 102 AlbumImagesMap::const_iterator it; 103 104 it = albums_images.find("e66fb059001aabcc69b262b7009fad90"); 105 ASSERT_NE(albums_images.end(), it); 106 EXPECT_EQ(4u, it->second.size()); 107 EXPECT_EQ(1u, it->second.count("InBoth.jpg")); 108 EXPECT_EQ(1u, it->second.count("InFirst.jpg")); 109 EXPECT_EQ(1u, it->second.count("InFirst (1).jpg")); 110 EXPECT_EQ(1u, it->second.count("InFirst (2).jpg")); 111 112 it = albums_images.find("18cb2df48aaa98e1c276b45cfcd81c95"); 113 ASSERT_NE(albums_images.end(), it); 114 EXPECT_EQ(3u, it->second.size()); 115 EXPECT_EQ(1u, it->second.count("InBoth.jpg")); 116 EXPECT_EQ(1u, it->second.count("InSecond.jpg")); 117 EXPECT_EQ(1u, it->second.count("InSecond (1).jpg")); 118 } 119 120 TEST(PicasaAlbumsIndexerTest, EdgeCases) { 121 std::set<std::string> valid_album_uuids; 122 valid_album_uuids.insert("album-uuid-with-no-images"); 123 valid_album_uuids.insert("18cb2df48aaa98e1c276b45cfcd81c95"); 124 PicasaAlbumsIndexer indexer(valid_album_uuids); 125 126 std::vector<FolderINIContents> folders_inis; 127 FolderINIContents folder_ini; 128 folder_ini.folder_path = base::FilePath(FILE_PATH_LITERAL("/foo/baz")); 129 folder_ini.ini_contents = test_ini_string; 130 folders_inis.push_back(folder_ini); 131 indexer.ParseFolderINI(folders_inis); 132 133 const AlbumImagesMap& albums_images = indexer.albums_images(); 134 AlbumImagesMap::const_iterator it; 135 136 // UUID that exists in INI that isn't in |valid_album_uuids|. 137 EXPECT_EQ(albums_images.end(), 138 albums_images.find("e66fb059001aabcc69b262b7009fad90")); 139 140 // UUID that exists in INI and |valid_album_uuids| but no images. 141 it = albums_images.find("album-uuid-with-no-images"); 142 EXPECT_NE(albums_images.end(), it); 143 EXPECT_EQ(0u, it->second.size()); 144 145 // Should still parse normal albums correctly. 146 it = albums_images.find("18cb2df48aaa98e1c276b45cfcd81c95"); 147 EXPECT_NE(albums_images.end(), it); 148 EXPECT_EQ(2u, it->second.size()); 149 EXPECT_EQ(1u, it->second.count("InBoth.jpg")); 150 EXPECT_EQ(1u, it->second.count("InSecond.jpg")); 151 } 152 153 } // namespace 154 155 } // namespace picasa 156