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.
5 var mediaGalleries = chrome.mediaGalleries;
6 var expectedGalleryEntryLength = 306; // hard-coded size of ../common/test.jpg
8 // Get's entire listing from directory, then verifies the sorted contents.
9 function verifyDirectoryEntry(directoryEntry, verifyFunction) {
11 var reader = directoryEntry.createReader();
13 function readEntries() {
14 reader.readEntries(readEntriesCallback, chrome.test.fail);
17 function readEntriesCallback(entries) {
18 if (entries.length == 0) {
19 verifyFunction(directoryEntry, allEntries.sort());
23 allEntries = allEntries.concat(entries);
30 // Verifies a directory itself, then the contents.
31 function getAndVerifyDirectoryEntry(parentEntry, directoryName,
33 function getDirectoryCallback(entry) {
34 chrome.test.assertTrue(entry.isDirectory);
35 verifyDirectoryEntry(entry, verifyFunction);
38 parentEntry.getDirectory(directoryName, {create: false},
39 getDirectoryCallback, chrome.test.fail);
42 function verifyJPEG(parentDirectoryEntry, filename, doneCallback) {
43 function verifyFile(file) {
44 var reader = new FileReader();
46 reader.onload = function(e) {
47 var arraybuffer = e.target.result;
48 chrome.test.assertEq(expectedGalleryEntryLength,
49 arraybuffer.byteLength);
54 chrome.test.fail.bind(null, "Unable to read test image: " + filename);
56 reader.readAsArrayBuffer(file);
59 function verifyFileEntry(fileEntry) {
60 fileEntry.file(verifyFile, chrome.test.fail)
63 parentDirectoryEntry.getFile(filename, {create: false}, verifyFileEntry,
67 function verifyAllJPEGs(parentDirectoryEntry, filenames, doneCallback) {
68 var remaining = filenames;
69 function verifyNextJPEG() {
70 if (remaining.length == 0) {
74 verifyJPEG(parentDirectoryEntry, remaining.pop(), verifyNextJPEG);
79 function GalleryPropertiesTest(picasaGallery) {
80 var galleryProperties =
81 mediaGalleries.getMediaFileSystemMetadata(picasaGallery);
82 chrome.test.assertFalse(galleryProperties.isRemovable);
83 chrome.test.succeed();
86 function RootListingTest(picasaGallery) {
87 function verify(directoryEntry, entries) {
88 chrome.test.assertEq(2, entries.length);
89 chrome.test.assertTrue(entries[0].isDirectory);
90 chrome.test.assertTrue(entries[1].isDirectory);
91 chrome.test.assertEq("albums", entries[0].name);
92 chrome.test.assertEq("folders", entries[1].name);
93 chrome.test.succeed();
96 verifyDirectoryEntry(picasaGallery.root, verify);
99 function AlbumsListingTest(picasaGallery) {
100 function verify(directoryEntry, entries) {
101 chrome.test.assertEq(2, entries.length);
102 chrome.test.assertTrue(entries[0].isDirectory);
103 chrome.test.assertTrue(entries[1].isDirectory);
104 chrome.test.assertEq("Album 1 Name 1899-12-30", entries[0].name);
105 chrome.test.assertEq("Album 2 Name 1899-12-30", entries[1].name);
106 chrome.test.succeed();
109 getAndVerifyDirectoryEntry(picasaGallery.root, "albums", verify);
112 function FoldersListingTest(picasaGallery) {
113 function verify(directoryEntry, entries) {
114 chrome.test.assertEq(2, entries.length);
115 chrome.test.assertTrue(entries[0].isDirectory);
116 chrome.test.assertTrue(entries[1].isDirectory);
117 chrome.test.assertEq("folder1 1899-12-30", entries[0].name);
118 chrome.test.assertEq("folder2 1899-12-30", entries[1].name);
119 chrome.test.succeed();
122 getAndVerifyDirectoryEntry(picasaGallery.root, "folders", verify);
125 function Album1ListingTest(picasaGallery) {
126 function verify(directoryEntry, entries) {
127 chrome.test.assertEq(2, entries.length);
128 chrome.test.assertTrue(entries[0].isFile);
129 chrome.test.assertTrue(entries[1].isFile);
130 chrome.test.assertEq("InBoth.jpg", entries[0].name);
131 chrome.test.assertEq("InFirstAlbumOnly.jpg", entries[1].name);
133 verifyAllJPEGs(directoryEntry, ["InBoth.jpg", "InFirstAlbumOnly.jpg"],
134 chrome.test.succeed);
137 getAndVerifyDirectoryEntry(picasaGallery.root,
138 "albums/Album 1 Name 1899-12-30", verify);
141 function Album2ListingTest(picasaGallery) {
142 function verify(directoryEntry, entries) {
143 chrome.test.assertEq(2, entries.length);
144 chrome.test.assertTrue(entries[0].isFile);
145 chrome.test.assertTrue(entries[1].isFile);
146 chrome.test.assertEq("InBoth.jpg", entries[0].name);
147 chrome.test.assertEq("InSecondAlbumOnly.jpg", entries[1].name);
149 verifyAllJPEGs(directoryEntry, ["InBoth.jpg", "InSecondAlbumOnly.jpg"],
150 chrome.test.succeed);
153 getAndVerifyDirectoryEntry(picasaGallery.root,
154 "albums/Album 2 Name 1899-12-30", verify);
157 function Folder1ListingTest(picasaGallery) {
158 function verify(directoryEntry, entries) {
159 chrome.test.assertEq(2, entries.length);
160 chrome.test.assertTrue(entries[0].isFile);
161 chrome.test.assertTrue(entries[1].isFile);
162 chrome.test.assertEq("InBoth.jpg", entries[0].name);
163 chrome.test.assertEq("InSecondAlbumOnly.jpg", entries[1].name);
165 verifyAllJPEGs(directoryEntry, ["InBoth.jpg", "InSecondAlbumOnly.jpg"],
166 chrome.test.succeed);
169 getAndVerifyDirectoryEntry(picasaGallery.root,
170 "folders/folder1 1899-12-30", verify);
173 function Folder2ListingTest(picasaGallery) {
174 function verify(directoryEntry, entries) {
175 chrome.test.assertEq(1, entries.length);
176 chrome.test.assertTrue(entries[0].isFile);
177 chrome.test.assertEq("InFirstAlbumOnly.jpg", entries[0].name);
179 verifyAllJPEGs(directoryEntry, ["InFirstAlbumOnly.jpg"],
180 chrome.test.succeed);
183 getAndVerifyDirectoryEntry(picasaGallery.root,
184 "folders/folder2 1899-12-30", verify);
187 function getTest(testFunction) {
188 function getMediaFileSystemsList() {
189 mediaGalleries.getMediaFileSystems(getMediaFileSystemsCallback);
192 function getMediaFileSystemsCallback(results) {
193 for (var i = 0; i < results.length; ++i) {
194 var properties = mediaGalleries.getMediaFileSystemMetadata(results[i]);
195 if (properties.name == "Picasa") {
196 testFunction(results[i]);
200 chrome.test.fail("Picasa gallery not found");
204 getMediaFileSystemsList();
208 chrome.test.runTests([
209 getTest(GalleryPropertiesTest),
210 getTest(RootListingTest),
211 getTest(AlbumsListingTest),
212 getTest(FoldersListingTest),
213 getTest(Album1ListingTest),
214 getTest(Album2ListingTest),
215 getTest(Folder1ListingTest),
216 getTest(Folder2ListingTest),
219 // Create a dummy window to prevent the ExtensionProcessManager from suspending
220 // the chrome-test app. Needed because the FileReader events do not qualify as
221 // pending callbacks, so the app looks dormant.
222 chrome.app.runtime.onLaunched.addListener(function() {
223 chrome.app.window.create('dummy.html', {