15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch#include <string> 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <vector> 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/bind.h" 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/files/file_path.h" 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/files/file_util.h" 11c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "base/files/scoped_temp_dir.h" 127d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "base/format_macros.h" 13c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "base/logging.h" 14868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/memory/scoped_ptr.h" 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/message_loop/message_loop.h" 16ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch#include "base/run_loop.h" 17ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch#include "base/stl_util.h" 18ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch#include "base/strings/stringprintf.h" 19ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch#include "chrome/browser/media_galleries/fileapi/iphoto_data_provider.h" 20c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch#include "chrome/browser/media_galleries/fileapi/media_file_system_backend.h" 21ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch#include "chrome/browser/media_galleries/imported_media_gallery_registry.h" 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/test/base/in_process_browser_test.h" 237d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "content/public/browser/browser_thread.h" 247d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "url/gurl.h" 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using base::FilePath; 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)namespace iphoto { 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class TestIPhotoDataProvider : public IPhotoDataProvider { 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestIPhotoDataProvider(const base::FilePath& xml_library_path, 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const base::Closure& callback) 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : IPhotoDataProvider(xml_library_path), 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) callback_(callback) { 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~TestIPhotoDataProvider() {} 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void OnLibraryChanged(const base::FilePath& path, 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool error) OVERRIDE { 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IPhotoDataProvider::OnLibraryChanged(path, error); 43ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch callback_.Run(); 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Closure callback_; 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(TestIPhotoDataProvider); 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class IPhotoDataProviderTest : public InProcessBrowserTest { 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IPhotoDataProviderTest() {} 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~IPhotoDataProviderTest() {} 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void SetUp() OVERRIDE { 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(library_dir_.CreateUniqueTempDir()); 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WriteLibraryInternal(); 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The ImportedMediaGalleryRegistry is created on which ever thread calls 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // GetInstance() first. It shouldn't matter what thread creates, however 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // in practice it is always created on the UI thread, so this calls 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // GetInstance here to mirror those real conditions. 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ImportedMediaGalleryRegistry::GetInstance(); 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) InProcessBrowserTest::SetUp(); 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void RunTest() { 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK_CURRENTLY_ON(content::BrowserThread::UI); 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::RunLoop loop; 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) quit_closure_ = loop.QuitClosure(); 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MediaFileSystemBackend::MediaTaskRunner()->PostTask( 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FROM_HERE, 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Bind(&IPhotoDataProviderTest::StartTestOnMediaTaskRunner, 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Unretained(this))); 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) loop.Run(); 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void WriteLibrary(const base::Closure& callback) { 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetLibraryChangeCallback(callback); 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WriteLibraryInternal(); 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void SetLibraryChangeCallback(const base::Closure& callback) { 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(library_changed_callback_.is_null()); 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) library_changed_callback_ = callback; 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IPhotoDataProvider* data_provider() const { 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return ImportedMediaGalleryRegistry::IPhotoDataProvider(); 91868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) } 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const base::FilePath& library_dir() const { 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return library_dir_.path(); 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::FilePath XmlFile() const { 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return library_dir_.path().AppendASCII("library.xml"); 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Start the test. The data provider is refreshed before calling StartTest 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // and the result of the refresh is passed in. 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void StartTest(bool parse_success) = 0; 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void TestDone() { 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(MediaFileSystemBackend::CurrentlyOnMediaTaskRunnerThread()); 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ImportedMediaGalleryRegistry* imported_registry = 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ImportedMediaGalleryRegistry::GetInstance(); 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) imported_registry->iphoto_data_provider_.reset(); 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::BrowserThread::PostTask(content::BrowserThread::UI, FROM_HERE, 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) quit_closure_); 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Override to provide a full library string. 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual std::string GetLibraryString() { 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return "<plist><dict>\n</dict></plist>\n"; 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void StartTestOnMediaTaskRunner() { 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(MediaFileSystemBackend::CurrentlyOnMediaTaskRunnerThread()); 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ImportedMediaGalleryRegistry* imported_registry = 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ImportedMediaGalleryRegistry::GetInstance(); 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) imported_registry->iphoto_data_provider_.reset( 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new TestIPhotoDataProvider( 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) XmlFile(), 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Bind(&IPhotoDataProviderTest::OnLibraryChanged, 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Unretained(this)))); 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) data_provider()->RefreshData(base::Bind(&IPhotoDataProviderTest::StartTest, 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Unretained(this))); 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void OnLibraryChanged() { 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(MediaFileSystemBackend::CurrentlyOnMediaTaskRunnerThread()); 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!library_changed_callback_.is_null()) { 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) library_changed_callback_.Run(); 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) library_changed_callback_.Reset(); 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void WriteLibraryInternal() { 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string xml = GetLibraryString(); 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(static_cast<int>(xml.size()), 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::WriteFile(XmlFile(), xml.c_str(), xml.size())); 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::ScopedTempDir library_dir_; 1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Closure library_changed_callback_; 1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Closure quit_closure_; 1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(IPhotoDataProviderTest); 1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class IPhotoDataProviderBasicTest : public IPhotoDataProviderTest { 1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IPhotoDataProviderBasicTest() {} 1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~IPhotoDataProviderBasicTest() {} 1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual std::string GetLibraryString() OVERRIDE { 1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return "<plist><dict>\n" 1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "<key>List of Albums</key>\n" 1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "<array>" 1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " <dict>\n" 1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " <key>AlbumId</key>" 1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " <integer>14</integer>" 1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " <key>AlbumName</key>" 1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " <string>Album1</string>" 1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " <key>KeyList</key>" 1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " <array>" 1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " <string>1</string>" 1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " <string>3</string>" // [3] and [4] are name dupes 1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " <string>4</string>" 1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " </array>" 1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " </dict>\n" 1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " <dict>\n" 1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " <key>AlbumId</key>" 1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " <integer>15</integer>" 1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " <key>AlbumName</key>" 1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " <string>Album2</string>" 1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " <key>KeyList</key>" 1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " <array>" 1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " <string>2</string>" 1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " </array>" 1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " </dict>\n" 1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " <dict>\n" 1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " <key>AlbumId</key>" 1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " <integer>16</integer>" 1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " <key>AlbumName</key>" 1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " <string>Album5</string>" 1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " <key>KeyList</key>" 1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " <array>" 1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " <string>5</string>" // A name dupe of [2], but in another album. 1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " </array>" 1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " </dict>\n" 1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "</array>\n" 1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "<key>Master Image List</key>\n" 1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "<dict>\n" 2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " <key>1</key>\n" 2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " <dict>\n" 2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " <key>MediaType</key>" 2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " <string>Image</string>" 2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " <key>Caption</key>" 2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " <string>caption</string>" 2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " <key>GUID</key>\n" 2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " <string>guid1</string>" 2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " <key>ImagePath</key>" 2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " <string>/vol/path1.jpg</string>" 2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " <key>ThumbPath</key>" 2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " <string>/vol/thumb1.jpg</string>" 2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " </dict>\n" 2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " <key>2</key>\n" 2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " <dict>\n" 2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " <key>MediaType</key>" 2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " <string>Image</string>" 2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " <key>Caption</key>" 2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " <string>caption2</string>" 2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " <key>GUID</key>\n" 2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " <string>guid2</string>" 2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " <key>ImagePath</key>" 2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " <string>/vol/path2.jpg</string>" 2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " <key>ThumbPath</key>" 2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " <string>/vol/thumb2.jpg</string>" 2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " </dict>\n" 2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " <key>3</key>\n" 2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " <dict>\n" 2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " <key>MediaType</key>" 2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " <string>Image</string>" 2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " <key>Caption</key>" 2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " <string>caption3</string>" 2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " <key>GUID</key>\n" 2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " <string>guid3</string>" 2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " <key>ImagePath</key>" 2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " <string>/vol/path3.jpg</string>" 2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " <key>ThumbPath</key>" 2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " <string>/vol/thumb3.jpg</string>" 2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " </dict>\n" 2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " <key>4</key>\n" // A name duplicate of [3] in another path. 2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " <dict>\n" 2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " <key>MediaType</key>" 2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " <string>Image</string>" 2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " <key>Caption</key>" 2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " <string>caption</string>" 2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " <key>GUID</key>\n" 2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " <string>guid3</string>" 2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " <key>ImagePath</key>" 2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " <string>/vol/dupe/path3.jpg</string>" 2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " <key>ThumbPath</key>" 2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " <string>/vol/dupe/thumb3.jpg</string>" 2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " </dict>\n" 2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " <key>5</key>\n" // A name duplicate of [2] in another path. 2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " <dict>\n" 2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " <key>MediaType</key>" 2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " <string>Image</string>" 2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " <key>Caption</key>" 2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " <string>caption5</string>" 2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " <key>GUID</key>\n" 2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " <string>guid2</string>" 2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " <key>ImagePath</key>" 2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " <string>/vol/dupe/path2.jpg</string>" 2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " <key>ThumbPath</key>" 2635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " <string>/vol/dupe/thumb2.jpg</string>" 2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " <key>OriginalPath</key>" \ 2655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " <string>/original/vol/another2.jpg</string>" \ 2665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " </dict>\n" 2675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "</dict>\n" 2685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "</dict></plist>\n"; 2695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void StartTest(bool parse_success) OVERRIDE { 2725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(parse_success); 2735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<std::string> names = data_provider()->GetAlbumNames(); 2755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(3U, names.size()); 2765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("Album1", names[0]); 2775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(FilePath("/vol/path1.jpg").value(), 2795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) data_provider()->GetPhotoLocationInAlbum( 2805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "Album1", "path1.jpg").value()); 2815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(FilePath("/vol/path3.jpg").value(), 2825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) data_provider()->GetPhotoLocationInAlbum( 2835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "Album1", "path3.jpg").value()); 2845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(FilePath("/vol/dupe/path3.jpg").value(), 2855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) data_provider()->GetPhotoLocationInAlbum( 2865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "Album1", "path3(4).jpg").value()); 2875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(FilePath().value(), 2885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) data_provider()->GetPhotoLocationInAlbum( 2895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "Album1", "path5.jpg").value()); 2905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // path2.jpg is name-duped, but in different albums, and so should not 2925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // be mangled. 2935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(FilePath("/vol/dupe/path2.jpg").value(), 2945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) data_provider()->GetPhotoLocationInAlbum( 2955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "Album5", "path2.jpg").value()); 2965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(FilePath("/vol/path2.jpg").value(), 2975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) data_provider()->GetPhotoLocationInAlbum( 2985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "Album2", "path2.jpg").value()); 2995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::map<std::string, base::FilePath> photos = 301ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch data_provider()->GetAlbumContents("nonexistent"); 3025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(0U, photos.size()); 3035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) photos = data_provider()->GetAlbumContents("Album1"); 3045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(3U, photos.size()); 305ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch EXPECT_TRUE(ContainsKey(photos, "path1.jpg")); 306ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch EXPECT_FALSE(ContainsKey(photos, "path2.jpg")); 307ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch EXPECT_TRUE(ContainsKey(photos, "path3.jpg")); 308ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch EXPECT_TRUE(ContainsKey(photos, "path3(4).jpg")); 3095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(FilePath("/vol/path1.jpg").value(), photos["path1.jpg"].value()); 3105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(FilePath("/vol/path3.jpg").value(), 3115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) photos["path3.jpg"].value()); 3125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(FilePath("/vol/dupe/path3.jpg").value(), 3135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) photos["path3(4).jpg"].value()); 3145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) photos = data_provider()->GetAlbumContents("Album2"); 3165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(1U, photos.size()); 3175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(ContainsKey(photos, "path2.jpg")); 3185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(data_provider()->HasOriginals("Album1")); 3205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(data_provider()->HasOriginals("Album5")); 3215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::map<std::string, base::FilePath> originals = 3225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) data_provider()->GetOriginals("Album1"); 3235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(0U, originals.size()); 3245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) originals = data_provider()->GetOriginals("Album5"); 3255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(1U, originals.size()); 3265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(ContainsKey(originals, "path2.jpg")); 3275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(ContainsKey(originals, "path1.jpg")); 3285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(FilePath("/original/vol/another2.jpg").value(), 3295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) originals["path2.jpg"].value()); 3305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::FilePath original_path = 3315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) data_provider()->GetOriginalPhotoLocation("Album5", "path2.jpg"); 3325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(FilePath("/original/vol/another2.jpg").value(), 3335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) original_path.value()); 3345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestDone(); 3365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 3395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(IPhotoDataProviderBasicTest); 3405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 3415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class IPhotoDataProviderRefreshTest : public IPhotoDataProviderTest { 3435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 344868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) IPhotoDataProviderRefreshTest() {} 3455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~IPhotoDataProviderRefreshTest() {} 3465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string another_album; 3485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual std::string GetLibraryString() OVERRIDE { 3505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return "<plist><dict>\n" 3515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "<key>List of Albums</key>\n" 3525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "<array>" 3535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " <dict>" 3545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " <key>AlbumId</key>" 3555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " <integer>14</integer>" 3565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " <key>AlbumName</key>" 3575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " <string>Album1</string>" 3585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " <key>KeyList</key>" 3595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " <array>" 3605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " <string>1</string>" 361868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) " </array>" 3625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " </dict>\n" + 3635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) another_album + 3645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "</array>\n" 3655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "<key>Master Image List</key>\n" 3665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "<dict>\n" 3675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " <key>1</key>\n" 3685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " <dict>\n" 3695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " <key>MediaType</key>" 3705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " <string>Image</string>" 3715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " <key>Caption1</key>" 3725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " <string>caption</string>" 3735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " <key>GUID</key>\n" 3745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " <string>guid1</string>" 3755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " <key>ImagePath</key>" 3765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " <string>/vol/path1.jpg</string>" 3775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " <key>ThumbPath</key>" 3785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " <string>/vol/thumb1.jpg</string>" 3795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " </dict>\n" 3805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "</dict>\n" 3815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "</dict></plist>\n"; 3825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void StartTest(bool parse_success) OVERRIDE { 3855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(parse_success); 3865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(FilePath("/vol/path1.jpg"), 3885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) data_provider()->GetPhotoLocationInAlbum("Album1", "path1.jpg")); 3895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<std::string> names = data_provider()->GetAlbumNames(); 3905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(1U, names.size()); 3915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("Album1", names[0]); 3925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) another_album = 3945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " <dict>" 3955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " <key>AlbumId</key>" 3965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " <integer>14</integer>" 3975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " <key>AlbumName</key>" 3985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " <string>Another Album</string>" 3995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " <key>KeyList</key>" 4005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " <array>" 4015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " <string>1</string>" 4025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " </array>" 4035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " </dict>\n"; 4045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WriteLibrary(base::Bind(&IPhotoDataProviderRefreshTest::CheckAfterWrite, 4065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Unretained(this))); 4075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void CheckAfterWrite() { 4105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // No change -- data has not been parsed. 4115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(FilePath("/vol/path1.jpg"), 4125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) data_provider()->GetPhotoLocationInAlbum("Album1", "path1.jpg")); 4135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<std::string> names = data_provider()->GetAlbumNames(); 4145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(1U, names.size()); 4155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("Album1", names[0]); 4165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) data_provider()->RefreshData( 4185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Bind(&IPhotoDataProviderRefreshTest::CheckRefresh, 4195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Unretained(this))); 4205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void CheckRefresh(bool is_valid) { 4235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(is_valid); 4245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 425868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_EQ(FilePath("/vol/path1.jpg"), 4265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) data_provider()->GetPhotoLocationInAlbum("Album1", "path1.jpg")); 4275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<std::string> names = data_provider()->GetAlbumNames(); 4285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(2U, names.size()); 4295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (names.size() == 2U) { 4305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("Album1", names[0]); 4315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("Another Album", names[1]); 4325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestDone(); 4355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 4385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(IPhotoDataProviderRefreshTest); 4395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 4405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class IPhotoDataProviderInvalidTest : public IPhotoDataProviderTest { 4425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 4435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IPhotoDataProviderInvalidTest() {} 4445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~IPhotoDataProviderInvalidTest() {} 4455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void StartTest(bool parse_success) OVERRIDE { 4475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(parse_success); 4485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetLibraryChangeCallback( 4505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Bind(&IPhotoDataProvider::RefreshData, 4515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Unretained(data_provider()), 4525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Bind(&IPhotoDataProviderInvalidTest::CheckInvalid, 4535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Unretained(this)))); 4545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(1L, base::WriteFile(XmlFile(), " ", 1)); 4555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void CheckInvalid(bool is_valid) { 4585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(is_valid); 4595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestDone(); 4605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private: 4635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(IPhotoDataProviderInvalidTest); 4645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 4655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(IPhotoDataProviderBasicTest, BasicTest) { 4675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RunTest(); 4685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(IPhotoDataProviderRefreshTest, RefreshTest) { 4715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RunTest(); 4725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(IPhotoDataProviderInvalidTest, InvalidTest) { 4755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RunTest(); 4765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace iphoto 4795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)