OLD | NEW |
(Empty) | |
| 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 var mediaGalleries = chrome.mediaGalleries; |
| 6 var expectedGalleryEntryLength = 306; // hard-coded size of ../common/test.jpg |
| 7 |
| 8 // Get's entire listing from directory, then verifies the sorted contents. |
| 9 function verifyDirectoryEntry(directoryEntry, verifyFunction) { |
| 10 var allEntries = []; |
| 11 var reader = directoryEntry.createReader(); |
| 12 |
| 13 function readEntries() { |
| 14 reader.readEntries(readEntriesCallback, chrome.test.fail); |
| 15 } |
| 16 |
| 17 function readEntriesCallback(entries) { |
| 18 if (entries.length == 0) { |
| 19 verifyFunction(directoryEntry, allEntries.sort()); |
| 20 return; |
| 21 } |
| 22 |
| 23 allEntries = allEntries.concat(entries); |
| 24 readEntries(); |
| 25 } |
| 26 |
| 27 readEntries(); |
| 28 } |
| 29 |
| 30 // Verifies a directory itself, then the contents. |
| 31 function getAndVerifyDirectoryEntry(parentEntry, directoryName, |
| 32 verifyFunction) { |
| 33 function getDirectoryCallback(entry) { |
| 34 chrome.test.assertTrue(entry.isDirectory); |
| 35 verifyDirectoryEntry(entry, verifyFunction); |
| 36 } |
| 37 |
| 38 parentEntry.getDirectory(directoryName, {create: false}, |
| 39 getDirectoryCallback, chrome.test.fail); |
| 40 } |
| 41 |
| 42 function verifyJPEG(parentDirectoryEntry, filename, doneCallback) { |
| 43 function verifyFile(file) { |
| 44 var reader = new FileReader(); |
| 45 |
| 46 reader.onload = function(e) { |
| 47 var arraybuffer = e.target.result; |
| 48 chrome.test.assertEq(expectedGalleryEntryLength, |
| 49 arraybuffer.byteLength); |
| 50 doneCallback(); |
| 51 } |
| 52 |
| 53 reader.onerror = |
| 54 chrome.test.fail.bind(null, "Unable to read test image: " + filename); |
| 55 |
| 56 reader.readAsArrayBuffer(file); |
| 57 } |
| 58 |
| 59 function verifyFileEntry(fileEntry) { |
| 60 fileEntry.file(verifyFile, chrome.test.fail) |
| 61 } |
| 62 |
| 63 parentDirectoryEntry.getFile(filename, {create: false}, verifyFileEntry, |
| 64 chrome.test.fail); |
| 65 } |
| 66 |
| 67 function verifyAllJPEGs(parentDirectoryEntry, filenames, doneCallback) { |
| 68 var remaining = filenames; |
| 69 function verifyNextJPEG() { |
| 70 if (remaining.length == 0) { |
| 71 doneCallback(); |
| 72 return; |
| 73 } |
| 74 verifyJPEG(parentDirectoryEntry, remaining.pop(), verifyNextJPEG); |
| 75 } |
| 76 verifyNextJPEG(); |
| 77 } |
| 78 |
| 79 function GalleryPropertiesTest(picasaGallery) { |
| 80 var galleryProperties = |
| 81 mediaGalleries.getMediaFileSystemMetadata(picasaGallery); |
| 82 chrome.test.assertFalse(galleryProperties.isRemovable); |
| 83 chrome.test.succeed(); |
| 84 } |
| 85 |
| 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(); |
| 94 } |
| 95 |
| 96 verifyDirectoryEntry(picasaGallery.root, verify); |
| 97 } |
| 98 |
| 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(); |
| 107 } |
| 108 |
| 109 getAndVerifyDirectoryEntry(picasaGallery.root, "albums", verify); |
| 110 } |
| 111 |
| 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(); |
| 120 } |
| 121 |
| 122 getAndVerifyDirectoryEntry(picasaGallery.root, "folders", verify); |
| 123 } |
| 124 |
| 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); |
| 132 |
| 133 verifyAllJPEGs(directoryEntry, ["InBoth.jpg", "InFirstAlbumOnly.jpg"], |
| 134 chrome.test.succeed); |
| 135 } |
| 136 |
| 137 getAndVerifyDirectoryEntry(picasaGallery.root, |
| 138 "albums/Album 1 Name 1899-12-30", verify); |
| 139 } |
| 140 |
| 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); |
| 148 |
| 149 verifyAllJPEGs(directoryEntry, ["InBoth.jpg", "InSecondAlbumOnly.jpg"], |
| 150 chrome.test.succeed); |
| 151 } |
| 152 |
| 153 getAndVerifyDirectoryEntry(picasaGallery.root, |
| 154 "albums/Album 2 Name 1899-12-30", verify); |
| 155 } |
| 156 |
| 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); |
| 164 |
| 165 verifyAllJPEGs(directoryEntry, ["InBoth.jpg", "InSecondAlbumOnly.jpg"], |
| 166 chrome.test.succeed); |
| 167 } |
| 168 |
| 169 getAndVerifyDirectoryEntry(picasaGallery.root, |
| 170 "folders/folder1 1899-12-30", verify); |
| 171 } |
| 172 |
| 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); |
| 178 |
| 179 verifyAllJPEGs(directoryEntry, ["InFirstAlbumOnly.jpg"], |
| 180 chrome.test.succeed); |
| 181 } |
| 182 |
| 183 getAndVerifyDirectoryEntry(picasaGallery.root, |
| 184 "folders/folder2 1899-12-30", verify); |
| 185 } |
| 186 |
| 187 function getTest(testFunction) { |
| 188 function getMediaFileSystemsList() { |
| 189 mediaGalleries.getMediaFileSystems(getMediaFileSystemsCallback); |
| 190 } |
| 191 |
| 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]); |
| 197 return; |
| 198 } |
| 199 } |
| 200 chrome.test.fail("Picasa gallery not found"); |
| 201 } |
| 202 |
| 203 return function() { |
| 204 getMediaFileSystemsList(); |
| 205 } |
| 206 } |
| 207 |
| 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), |
| 217 ]); |
| 218 |
| 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', { |
| 224 bounds: { |
| 225 width: 800, |
| 226 height: 600, |
| 227 left: 100, |
| 228 top: 100 |
| 229 }, |
| 230 minWidth: 800, |
| 231 minHeight: 600 |
| 232 }); |
| 233 }); |
OLD | NEW |