| 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 |
| 7 // Get's entire listing from directory, then verifies the sorted contents. |
| 8 function verifyDirectoryEntry(directoryEntry, verifyFunction) { |
| 9 var allEntries = []; |
| 10 var reader = directoryEntry.createReader(); |
| 11 |
| 12 function readEntries() { |
| 13 reader.readEntries(readEntriesCallback, chrome.test.fail); |
| 14 } |
| 15 |
| 16 function readEntriesCallback(entries) { |
| 17 if (entries.length == 0) { |
| 18 verifyFunction(directoryEntry, allEntries.sort()); |
| 19 return; |
| 20 } |
| 21 |
| 22 allEntries = allEntries.concat(entries); |
| 23 readEntries(); |
| 24 } |
| 25 |
| 26 readEntries(); |
| 27 } |
| 28 |
| 29 // Verifies a directory itself, then the contents. |
| 30 function getAndVerifyDirectoryEntry(parentEntry, directoryName, |
| 31 verifyFunction) { |
| 32 function getDirectoryCallback(entry) { |
| 33 chrome.test.assertTrue(entry.isDirectory); |
| 34 verifyDirectoryEntry(entry, verifyFunction); |
| 35 } |
| 36 |
| 37 parentEntry.getDirectory(directoryName, {create: false}, |
| 38 getDirectoryCallback, chrome.test.fail); |
| 39 } |
| 40 |
| 41 function verifyJPEG(parentDirectoryEntry, filename, doneCallback) { |
| 42 function verifyFile(file) { |
| 43 var reader = new FileReader(); |
| 44 |
| 45 reader.onload = function(e) { |
| 46 var arraybuffer = e.target.result; |
| 47 var view = new Uint8Array(arraybuffer); |
| 48 chrome.test.assertEq(0xFF, view[0]); |
| 49 chrome.test.assertEq(0xD8, view[1]); |
| 50 chrome.test.assertEq(0xFF, view[2]); |
| 51 doneCallback(); |
| 52 } |
| 53 |
| 54 reader.onerror = |
| 55 chrome.test.fail.bind(null, "Unable to read test image: " + filename); |
| 56 |
| 57 reader.readAsArrayBuffer(file); |
| 58 } |
| 59 |
| 60 function verifyFileEntry(fileEntry) { |
| 61 fileEntry.file(verifyFile, chrome.test.fail) |
| 62 } |
| 63 |
| 64 parentDirectoryEntry.getFile(filename, {create: false}, verifyFileEntry, |
| 65 chrome.test.fail); |
| 66 } |
| 67 |
| 68 function verifyAllJPEGs(parentDirectoryEntry, filenames, doneCallback) { |
| 69 var remaining = filenames; |
| 70 function verifyNextJPEG() { |
| 71 if (remaining.length == 0) { |
| 72 doneCallback(); |
| 73 return; |
| 74 } |
| 75 verifyJPEG(parentDirectoryEntry, remaining.pop(), verifyNextJPEG); |
| 76 } |
| 77 verifyNextJPEG(); |
| 78 } |
| 79 |
| 80 function GalleryPropertiesTest(picasaGallery) { |
| 81 var galleryProperties = |
| 82 mediaGalleries.getMediaFileSystemMetadata(picasaGallery); |
| 83 chrome.test.assertFalse(galleryProperties.isRemovable); |
| 84 chrome.test.succeed(); |
| 85 } |
| 86 |
| 87 function RootListingTest(picasaGallery) { |
| 88 function verify(directoryEntry, entries) { |
| 89 chrome.test.assertEq(2, entries.length); |
| 90 chrome.test.assertTrue(entries[0].isDirectory); |
| 91 chrome.test.assertTrue(entries[1].isDirectory); |
| 92 chrome.test.assertEq("albums", entries[0].name); |
| 93 chrome.test.assertEq("folders", entries[1].name); |
| 94 chrome.test.succeed(); |
| 95 } |
| 96 |
| 97 verifyDirectoryEntry(picasaGallery.root, verify); |
| 98 } |
| 99 |
| 100 function AlbumsListingTest(picasaGallery) { |
| 101 function verify(directoryEntry, entries) { |
| 102 chrome.test.assertEq(2, entries.length); |
| 103 chrome.test.assertTrue(entries[0].isDirectory); |
| 104 chrome.test.assertTrue(entries[1].isDirectory); |
| 105 chrome.test.assertEq("Album 1 Name 1899-12-30", entries[0].name); |
| 106 chrome.test.assertEq("Album 2 Name 1899-12-30", entries[1].name); |
| 107 chrome.test.succeed(); |
| 108 } |
| 109 |
| 110 getAndVerifyDirectoryEntry(picasaGallery.root, "albums", verify); |
| 111 } |
| 112 |
| 113 function FoldersListingTest(picasaGallery) { |
| 114 function verify(directoryEntry, entries) { |
| 115 chrome.test.assertEq(2, entries.length); |
| 116 chrome.test.assertTrue(entries[0].isDirectory); |
| 117 chrome.test.assertTrue(entries[1].isDirectory); |
| 118 chrome.test.assertEq("folder1 1899-12-30", entries[0].name); |
| 119 chrome.test.assertEq("folder2 1899-12-30", entries[1].name); |
| 120 chrome.test.succeed(); |
| 121 } |
| 122 |
| 123 getAndVerifyDirectoryEntry(picasaGallery.root, "folders", verify); |
| 124 } |
| 125 |
| 126 function Album1ListingTest(picasaGallery) { |
| 127 function verify(directoryEntry, entries) { |
| 128 chrome.test.assertEq(2, entries.length); |
| 129 chrome.test.assertTrue(entries[0].isFile); |
| 130 chrome.test.assertTrue(entries[1].isFile); |
| 131 chrome.test.assertEq("InBoth.jpg", entries[0].name); |
| 132 chrome.test.assertEq("InFirstAlbumOnly.jpg", entries[1].name); |
| 133 |
| 134 verifyAllJPEGs(directoryEntry, ["InBoth.jpg", "InFirstAlbumOnly.jpg"], |
| 135 chrome.test.succeed); |
| 136 } |
| 137 |
| 138 getAndVerifyDirectoryEntry(picasaGallery.root, |
| 139 "albums/Album 1 Name 1899-12-30", verify); |
| 140 } |
| 141 |
| 142 function Album2ListingTest(picasaGallery) { |
| 143 function verify(directoryEntry, entries) { |
| 144 chrome.test.assertEq(2, entries.length); |
| 145 chrome.test.assertTrue(entries[0].isFile); |
| 146 chrome.test.assertTrue(entries[1].isFile); |
| 147 chrome.test.assertEq("InBoth.jpg", entries[0].name); |
| 148 chrome.test.assertEq("InSecondAlbumOnly.jpg", entries[1].name); |
| 149 |
| 150 verifyAllJPEGs(directoryEntry, ["InBoth.jpg", "InSecondAlbumOnly.jpg"], |
| 151 chrome.test.succeed); |
| 152 } |
| 153 |
| 154 getAndVerifyDirectoryEntry(picasaGallery.root, |
| 155 "albums/Album 2 Name 1899-12-30", verify); |
| 156 } |
| 157 |
| 158 function Folder1ListingTest(picasaGallery) { |
| 159 function verify(directoryEntry, entries) { |
| 160 chrome.test.assertEq(2, entries.length); |
| 161 chrome.test.assertTrue(entries[0].isFile); |
| 162 chrome.test.assertTrue(entries[1].isFile); |
| 163 chrome.test.assertEq("InBoth.jpg", entries[0].name); |
| 164 chrome.test.assertEq("InSecondAlbumOnly.jpg", entries[1].name); |
| 165 |
| 166 verifyAllJPEGs(directoryEntry, ["InBoth.jpg", "InSecondAlbumOnly.jpg"], |
| 167 chrome.test.succeed); |
| 168 } |
| 169 |
| 170 getAndVerifyDirectoryEntry(picasaGallery.root, |
| 171 "folders/folder1 1899-12-30", verify); |
| 172 } |
| 173 |
| 174 function Folder2ListingTest(picasaGallery) { |
| 175 function verify(directoryEntry, entries) { |
| 176 chrome.test.assertEq(1, entries.length); |
| 177 chrome.test.assertTrue(entries[0].isFile); |
| 178 chrome.test.assertEq("InFirstAlbumOnly.jpg", entries[0].name); |
| 179 |
| 180 verifyAllJPEGs(directoryEntry, ["InFirstAlbumOnly.jpg"], |
| 181 chrome.test.succeed); |
| 182 } |
| 183 |
| 184 getAndVerifyDirectoryEntry(picasaGallery.root, |
| 185 "folders/folder2 1899-12-30", verify); |
| 186 } |
| 187 |
| 188 function getTest(testFunction) { |
| 189 function getMediaFileSystemsList() { |
| 190 mediaGalleries.getMediaFileSystems(getMediaFileSystemsCallback); |
| 191 } |
| 192 |
| 193 function getMediaFileSystemsCallback(results) { |
| 194 for (var i = 0; i < results.length; ++i) { |
| 195 var properties = mediaGalleries.getMediaFileSystemMetadata(results[i]); |
| 196 if (properties.name == "Picasa") { |
| 197 testFunction(results[i]); |
| 198 return; |
| 199 } |
| 200 } |
| 201 chrome.test.fail("Picasa gallery not found"); |
| 202 } |
| 203 |
| 204 return function() { |
| 205 getMediaFileSystemsList(); |
| 206 } |
| 207 } |
| 208 |
| 209 chrome.test.runTests([ |
| 210 getTest(GalleryPropertiesTest), |
| 211 getTest(RootListingTest), |
| 212 getTest(AlbumsListingTest), |
| 213 getTest(FoldersListingTest), |
| 214 getTest(Album1ListingTest), |
| 215 getTest(Album2ListingTest), |
| 216 getTest(Folder1ListingTest), |
| 217 getTest(Folder2ListingTest), |
| 218 ]); |
| 219 |
| 220 // Create a dummy window to prevent the ExtensionProcessManager from suspending |
| 221 // the chrome-test app. Needed because the FileReader events do not qualify as |
| 222 // pending callbacks, so the app looks dormant. |
| 223 chrome.app.runtime.onLaunched.addListener(function() { |
| 224 chrome.app.window.create('dummy.html', { |
| 225 bounds: { |
| 226 width: 800, |
| 227 height: 600, |
| 228 left: 100, |
| 229 top: 100 |
| 230 }, |
| 231 minWidth: 800, |
| 232 minHeight: 600 |
| 233 }); |
| 234 }); |
| OLD | NEW |