OLD | NEW |
---|---|
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include <set> | 5 #include <set> |
6 #include <string> | 6 #include <string> |
7 #include <vector> | 7 #include <vector> |
8 | 8 |
9 #include "base/bind_helpers.h" | 9 #include "base/bind_helpers.h" |
10 #include "base/file_util.h" | 10 #include "base/file_util.h" |
11 #include "base/files/file_path.h" | |
11 #include "base/files/scoped_temp_dir.h" | 12 #include "base/files/scoped_temp_dir.h" |
12 #include "base/memory/scoped_vector.h" | 13 #include "base/memory/scoped_vector.h" |
13 #include "base/message_loop/message_loop.h" | 14 #include "base/message_loop/message_loop.h" |
14 #include "base/message_loop/message_loop_proxy.h" | 15 #include "base/message_loop/message_loop_proxy.h" |
15 #include "base/run_loop.h" | 16 #include "base/run_loop.h" |
16 #include "base/strings/stringprintf.h" | 17 #include "base/strings/stringprintf.h" |
18 #include "base/synchronization/waitable_event.h" | |
17 #include "base/time/time.h" | 19 #include "base/time/time.h" |
18 #include "chrome/browser/media_galleries/fileapi/media_file_system_backend.h" | 20 #include "chrome/browser/media_galleries/fileapi/media_file_system_backend.h" |
19 #include "chrome/browser/media_galleries/fileapi/media_path_filter.h" | 21 #include "chrome/browser/media_galleries/fileapi/media_path_filter.h" |
20 #include "chrome/browser/media_galleries/fileapi/picasa/picasa_data_provider.h" | 22 #include "chrome/browser/media_galleries/fileapi/picasa/picasa_data_provider.h" |
21 #include "chrome/browser/media_galleries/fileapi/picasa/picasa_file_util.h" | 23 #include "chrome/browser/media_galleries/fileapi/picasa/picasa_file_util.h" |
22 #include "chrome/common/media_galleries/picasa_types.h" | 24 #include "chrome/common/media_galleries/picasa_types.h" |
23 #include "chrome/common/media_galleries/pmp_constants.h" | 25 #include "chrome/common/media_galleries/pmp_constants.h" |
24 #include "content/public/browser/browser_thread.h" | 26 #include "content/public/browser/browser_thread.h" |
25 #include "content/public/test/test_browser_thread.h" | 27 #include "content/public/test/test_browser_thread.h" |
26 #include "testing/gtest/include/gtest/gtest.h" | 28 #include "testing/gtest/include/gtest/gtest.h" |
(...skipping 117 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
144 DCHECK(completed); | 146 DCHECK(completed); |
145 base::RunLoop run_loop; | 147 base::RunLoop run_loop; |
146 runner->ReadDirectory( | 148 runner->ReadDirectory( |
147 url, base::Bind(&ReadDirectoryTestHelperCallback, &run_loop, contents, | 149 url, base::Bind(&ReadDirectoryTestHelperCallback, &run_loop, contents, |
148 completed)); | 150 completed)); |
149 run_loop.Run(); | 151 run_loop.Run(); |
150 } | 152 } |
151 | 153 |
152 } // namespace | 154 } // namespace |
153 | 155 |
154 class TestPicasaDataProvider : public PicasaDataProvider { | |
155 public: | |
156 TestPicasaDataProvider() | |
157 : PicasaDataProvider(base::FilePath(FILE_PATH_LITERAL("Fake"))), | |
158 initialized_(false) { | |
159 } | |
160 | |
161 virtual ~TestPicasaDataProvider() {} | |
162 | |
163 virtual void RefreshData(const base::Closure& ready_callback) OVERRIDE { | |
164 DCHECK(initialized_); | |
165 ready_callback.Run(); | |
166 } | |
167 | |
168 void Init(const std::vector<AlbumInfo>& albums, | |
169 const std::vector<AlbumInfo>& folders) { | |
170 UniquifyNames(albums, &album_map_); | |
171 UniquifyNames(folders, &folder_map_); | |
172 initialized_ = true; | |
173 } | |
174 | |
175 private: | |
176 bool initialized_; | |
177 }; | |
178 | |
179 class TestPicasaFileUtil : public PicasaFileUtil { | 156 class TestPicasaFileUtil : public PicasaFileUtil { |
180 public: | 157 public: |
181 TestPicasaFileUtil(chrome::MediaPathFilter* media_path_filter, | 158 TestPicasaFileUtil(chrome::MediaPathFilter* media_path_filter, |
182 PicasaDataProvider* data_provider) | 159 PicasaDataProvider* data_provider) |
183 : PicasaFileUtil(media_path_filter), | 160 : PicasaFileUtil(media_path_filter), |
184 data_provider_(data_provider) { | 161 data_provider_(data_provider) { |
185 } | 162 } |
186 virtual ~TestPicasaFileUtil() {} | 163 virtual ~TestPicasaFileUtil() {} |
187 private: | 164 private: |
188 virtual PicasaDataProvider* GetDataProvider() OVERRIDE { | 165 virtual PicasaDataProvider* GetDataProvider() OVERRIDE { |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
220 : io_thread_(content::BrowserThread::IO, &message_loop_) { | 197 : io_thread_(content::BrowserThread::IO, &message_loop_) { |
221 } | 198 } |
222 virtual ~PicasaFileUtilTest() {} | 199 virtual ~PicasaFileUtilTest() {} |
223 | 200 |
224 virtual void SetUp() OVERRIDE { | 201 virtual void SetUp() OVERRIDE { |
225 ASSERT_TRUE(profile_dir_.CreateUniqueTempDir()); | 202 ASSERT_TRUE(profile_dir_.CreateUniqueTempDir()); |
226 | 203 |
227 scoped_refptr<quota::SpecialStoragePolicy> storage_policy = | 204 scoped_refptr<quota::SpecialStoragePolicy> storage_policy = |
228 new quota::MockSpecialStoragePolicy(); | 205 new quota::MockSpecialStoragePolicy(); |
229 | 206 |
207 base::WaitableEvent event(true, false); | |
vandebo (ex-Chrome)
2013/08/22 17:48:02
Abstract this into void RunOnMediaTaskRunner(const
tommycli
2013/08/22 22:32:51
Done.
| |
208 chrome::MediaFileSystemBackend::MediaTaskRunner()->PostTask( | |
209 FROM_HERE, | |
210 base::Bind(&PicasaFileUtilTest::SetUpOnMediaTaskRunner, | |
211 base::Unretained(this), | |
212 &event)); | |
213 event.Wait(); | |
214 | |
230 media_path_filter_.reset(new chrome::MediaPathFilter()); | 215 media_path_filter_.reset(new chrome::MediaPathFilter()); |
231 picasa_data_provider_.reset(new TestPicasaDataProvider()); | |
232 | 216 |
233 ScopedVector<fileapi::FileSystemBackend> additional_providers; | 217 ScopedVector<fileapi::FileSystemBackend> additional_providers; |
234 additional_providers.push_back(new TestMediaFileSystemBackend( | 218 additional_providers.push_back(new TestMediaFileSystemBackend( |
235 profile_dir_.path(), | 219 profile_dir_.path(), |
236 new TestPicasaFileUtil(media_path_filter_.get(), | 220 new TestPicasaFileUtil(media_path_filter_.get(), |
237 picasa_data_provider_.get()))); | 221 picasa_data_provider_.get()))); |
238 | 222 |
239 file_system_context_ = new fileapi::FileSystemContext( | 223 file_system_context_ = new fileapi::FileSystemContext( |
240 base::MessageLoopProxy::current().get(), | 224 base::MessageLoopProxy::current().get(), |
241 base::MessageLoopProxy::current().get(), | 225 base::MessageLoopProxy::current().get(), |
242 fileapi::ExternalMountPoints::CreateRefCounted().get(), | 226 fileapi::ExternalMountPoints::CreateRefCounted().get(), |
243 storage_policy.get(), | 227 storage_policy.get(), |
244 NULL, | 228 NULL, |
245 additional_providers.Pass(), | 229 additional_providers.Pass(), |
246 profile_dir_.path(), | 230 profile_dir_.path(), |
247 fileapi::CreateAllowFileAccessOptions()); | 231 fileapi::CreateAllowFileAccessOptions()); |
248 } | 232 } |
249 | 233 |
234 virtual void TearDown() OVERRIDE { | |
235 base::WaitableEvent event(true, false); | |
vandebo (ex-Chrome)
2013/08/22 17:48:02
Why not use a runloop like in the browser test?
tommycli
2013/08/22 22:32:51
I believe this was because Runloops can only be us
vandebo (ex-Chrome)
2013/08/23 16:42:41
If calling on the wrong thread is the only issue,
tommycli
2013/08/26 22:06:17
Done.
| |
236 chrome::MediaFileSystemBackend::MediaTaskRunner()->PostTask( | |
237 FROM_HERE, | |
238 base::Bind(&PicasaFileUtilTest::TearDownOnMediaTaskRunner, | |
239 base::Unretained(this), | |
240 &event)); | |
241 event.Wait(); | |
242 } | |
243 | |
250 protected: | 244 protected: |
245 void SetUpOnMediaTaskRunner(base::WaitableEvent* event) { | |
246 picasa_data_provider_.reset(new PicasaDataProvider(base::FilePath())); | |
247 event->Signal(); | |
248 } | |
249 | |
250 void TearDownOnMediaTaskRunner(base::WaitableEvent* event) { | |
251 picasa_data_provider_.reset(); | |
252 event->Signal(); | |
253 } | |
254 | |
255 void SetupDataProvider(PicasaDataProvider* picasa_data_provider, | |
256 const std::vector<AlbumInfo>& albums, | |
257 const std::vector<AlbumInfo>& folders) { | |
258 PicasaDataProvider::UniquifyNames(albums, | |
259 &picasa_data_provider->album_map_); | |
260 PicasaDataProvider::UniquifyNames(folders, | |
261 &picasa_data_provider->folder_map_); | |
262 picasa_data_provider->state_ = | |
263 PicasaDataProvider::ALBUMS_IMAGES_FRESH_STATE; | |
264 } | |
265 | |
251 // |test_folders| must be in alphabetical order for easy verification | 266 // |test_folders| must be in alphabetical order for easy verification |
252 void SetupFolders(ScopedVector<TestFolder>* test_folders) { | 267 void SetupFolders(ScopedVector<TestFolder>* test_folders) { |
253 std::vector<AlbumInfo> folders; | 268 std::vector<AlbumInfo> folders; |
254 for (ScopedVector<TestFolder>::iterator it = test_folders->begin(); | 269 for (ScopedVector<TestFolder>::iterator it = test_folders->begin(); |
255 it != test_folders->end(); ++it) { | 270 it != test_folders->end(); ++it) { |
256 TestFolder* test_folder = *it; | 271 TestFolder* test_folder = *it; |
257 ASSERT_TRUE(test_folder->Init()); | 272 ASSERT_TRUE(test_folder->Init()); |
258 folders.push_back(test_folder->folder_info()); | 273 folders.push_back(test_folder->folder_info()); |
259 } | 274 } |
260 picasa_data_provider_->Init(std::vector<AlbumInfo>(), folders); | 275 |
276 SetupDataProvider( | |
277 picasa_data_provider_.get(), std::vector<AlbumInfo>(), folders); | |
261 } | 278 } |
262 | 279 |
263 void VerifyFolderDirectoryList(const ScopedVector<TestFolder>& test_folders) { | 280 void VerifyFolderDirectoryList(const ScopedVector<TestFolder>& test_folders) { |
264 FileSystemOperation::FileEntryList contents; | 281 FileSystemOperation::FileEntryList contents; |
265 FileSystemURL url = CreateURL(kPicasaDirFolders); | 282 FileSystemURL url = CreateURL(kPicasaDirFolders); |
266 bool completed = false; | 283 bool completed = false; |
267 ReadDirectoryTestHelper(operation_runner(), url, &contents, &completed); | 284 ReadDirectoryTestHelper(operation_runner(), url, &contents, &completed); |
268 | 285 |
269 ASSERT_TRUE(completed); | 286 ASSERT_TRUE(completed); |
270 ASSERT_EQ(test_folders.size(), contents.size()); | 287 ASSERT_EQ(test_folders.size(), contents.size()); |
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
330 return file_system_context_; | 347 return file_system_context_; |
331 } | 348 } |
332 | 349 |
333 private: | 350 private: |
334 base::MessageLoop message_loop_; | 351 base::MessageLoop message_loop_; |
335 content::TestBrowserThread io_thread_; | 352 content::TestBrowserThread io_thread_; |
336 | 353 |
337 base::ScopedTempDir profile_dir_; | 354 base::ScopedTempDir profile_dir_; |
338 | 355 |
339 scoped_refptr<fileapi::FileSystemContext> file_system_context_; | 356 scoped_refptr<fileapi::FileSystemContext> file_system_context_; |
357 scoped_ptr<PicasaDataProvider> picasa_data_provider_; | |
340 scoped_ptr<chrome::MediaPathFilter> media_path_filter_; | 358 scoped_ptr<chrome::MediaPathFilter> media_path_filter_; |
341 scoped_ptr<TestPicasaDataProvider> picasa_data_provider_; | |
342 | 359 |
343 DISALLOW_COPY_AND_ASSIGN(PicasaFileUtilTest); | 360 DISALLOW_COPY_AND_ASSIGN(PicasaFileUtilTest); |
344 }; | 361 }; |
345 | 362 |
346 TEST_F(PicasaFileUtilTest, DateFormat) { | 363 TEST_F(PicasaFileUtilTest, DateFormat) { |
347 base::Time::Exploded exploded_shortmonth = { 2013, 4, 0, 16, 0, 0, 0, 0 }; | 364 base::Time::Exploded exploded_shortmonth = { 2013, 4, 0, 16, 0, 0, 0, 0 }; |
348 base::Time shortmonth = base::Time::FromLocalExploded(exploded_shortmonth); | 365 base::Time shortmonth = base::Time::FromLocalExploded(exploded_shortmonth); |
349 | 366 |
350 base::Time::Exploded exploded_shortday = { 2013, 11, 0, 3, 0, 0, 0, 0 }; | 367 base::Time::Exploded exploded_shortday = { 2013, 11, 0, 3, 0, 0, 0, 0 }; |
351 base::Time shortday = base::Time::FromLocalExploded(exploded_shortday); | 368 base::Time shortday = base::Time::FromLocalExploded(exploded_shortday); |
(...skipping 121 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
473 new TestFolder(base::StringPrintf("folder-%05d", i), | 490 new TestFolder(base::StringPrintf("folder-%05d", i), |
474 date, | 491 date, |
475 base::StringPrintf("uid%05d", i), i % 5, i % 3)); | 492 base::StringPrintf("uid%05d", i), i % 5, i % 3)); |
476 } | 493 } |
477 | 494 |
478 SetupFolders(&test_folders); | 495 SetupFolders(&test_folders); |
479 VerifyFolderDirectoryList(test_folders); | 496 VerifyFolderDirectoryList(test_folders); |
480 } | 497 } |
481 | 498 |
482 } // namespace picasa | 499 } // namespace picasa |
OLD | NEW |