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 parentDirectoryEntry.getFile( | |
61 filename, | |
62 {create: false}, | |
63 function(fileEntry) { fileEntry.file(verifyFile, chrome.test.fail) }, | |
vandebo (ex-Chrome)
2013/09/17 21:18:06
nit: name this function instead of making it inlin
tommycli
2013/09/18 15:25:37
Done.
| |
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 runPicasaTest() { | |
80 var picasaGallery; | |
81 var rootReadEntriesTotalReturned = 0; | |
82 | |
83 function getMediaFileSystemsList() { | |
84 mediaGalleries.getMediaFileSystems(getMediaFileSystemsCallback); | |
85 } | |
86 | |
87 function getMediaFileSystemsCallback(results) { | |
88 chrome.test.assertEq(1, results.length); | |
89 picasaGallery = results[0]; | |
90 | |
91 var galleryProperties = | |
92 mediaGalleries.getMediaFileSystemMetadata(picasaGallery); | |
93 chrome.test.assertFalse(galleryProperties.isRemovable); | |
94 | |
95 function verify(directoryEntry, entries) { | |
96 chrome.test.assertEq(2, entries.length); | |
97 chrome.test.assertTrue(entries[0].isDirectory); | |
98 chrome.test.assertTrue(entries[1].isDirectory); | |
99 chrome.test.assertEq("albums", entries[0].name); | |
100 chrome.test.assertEq("folders", entries[1].name); | |
101 | |
102 testAlbumsListing(); | |
vandebo (ex-Chrome)
2013/09/17 21:18:06
Instead of chaining between the tests, can you lis
tommycli
2013/09/18 15:25:37
Done.
| |
103 } | |
104 | |
105 verifyDirectoryEntry(picasaGallery.root, verify); | |
106 } | |
107 | |
108 function testAlbumsListing() { | |
109 function verify(directoryEntry, entries) { | |
110 chrome.test.assertEq(2, entries.length); | |
111 chrome.test.assertTrue(entries[0].isDirectory); | |
112 chrome.test.assertTrue(entries[1].isDirectory); | |
113 chrome.test.assertEq("Album 1 Name 1899-12-30", entries[0].name); | |
114 chrome.test.assertEq("Album 2 Name 1899-12-30", entries[1].name); | |
115 | |
116 testFoldersListing(); | |
117 } | |
118 | |
119 getAndVerifyDirectoryEntry(picasaGallery.root, "albums", verify); | |
120 } | |
121 | |
122 function testFoldersListing() { | |
123 function verify(directoryEntry, entries) { | |
124 chrome.test.assertEq(2, entries.length); | |
125 chrome.test.assertTrue(entries[0].isDirectory); | |
126 chrome.test.assertTrue(entries[1].isDirectory); | |
127 chrome.test.assertEq("folder1 1899-12-30", entries[0].name); | |
128 chrome.test.assertEq("folder2 1899-12-30", entries[1].name); | |
129 | |
130 testAlbum1Listing(); | |
131 } | |
132 | |
133 getAndVerifyDirectoryEntry(picasaGallery.root, "folders", verify); | |
134 } | |
135 | |
136 function testAlbum1Listing() { | |
137 function verify(directoryEntry, entries) { | |
138 chrome.test.assertEq(2, entries.length); | |
139 chrome.test.assertTrue(entries[0].isFile); | |
140 chrome.test.assertTrue(entries[1].isFile); | |
141 chrome.test.assertEq("InBoth.jpg", entries[0].name); | |
142 chrome.test.assertEq("InFirstAlbumOnly.jpg", entries[1].name); | |
143 | |
144 verifyAllJPEGs(directoryEntry, ["InBoth.jpg", "InFirstAlbumOnly.jpg"], | |
145 testAlbum2Listing); | |
146 } | |
147 | |
148 getAndVerifyDirectoryEntry(picasaGallery.root, | |
149 "albums/Album 1 Name 1899-12-30", verify); | |
150 } | |
151 | |
152 function testAlbum2Listing() { | |
153 function verify(directoryEntry, entries) { | |
154 chrome.test.assertEq(2, entries.length); | |
155 chrome.test.assertTrue(entries[0].isFile); | |
156 chrome.test.assertTrue(entries[1].isFile); | |
157 chrome.test.assertEq("InBoth.jpg", entries[0].name); | |
158 chrome.test.assertEq("InSecondAlbumOnly.jpg", entries[1].name); | |
159 | |
160 verifyAllJPEGs(directoryEntry, ["InBoth.jpg", "InSecondAlbumOnly.jpg"], | |
161 chrome.test.succeed); | |
162 } | |
163 | |
164 getAndVerifyDirectoryEntry(picasaGallery.root, | |
165 "albums/Album 2 Name 1899-12-30", verify); | |
166 } | |
167 | |
168 function testAlbum2Listing() { | |
vandebo (ex-Chrome)
2013/09/17 21:18:06
repeated function?
tommycli
2013/09/18 15:25:37
Done.
| |
169 function verify(directoryEntry, entries) { | |
170 chrome.test.assertEq(2, entries.length); | |
171 chrome.test.assertTrue(entries[0].isFile); | |
172 chrome.test.assertTrue(entries[1].isFile); | |
173 chrome.test.assertEq("InBoth.jpg", entries[0].name); | |
174 chrome.test.assertEq("InSecondAlbumOnly.jpg", entries[1].name); | |
175 | |
176 verifyAllJPEGs(directoryEntry, ["InBoth.jpg", "InSecondAlbumOnly.jpg"], | |
177 testFolder1Listing); | |
178 } | |
179 | |
180 getAndVerifyDirectoryEntry(picasaGallery.root, | |
181 "albums/Album 2 Name 1899-12-30", verify); | |
182 } | |
183 | |
184 function testFolder1Listing() { | |
185 function verify(directoryEntry, entries) { | |
186 chrome.test.assertEq(2, entries.length); | |
187 chrome.test.assertTrue(entries[0].isFile); | |
188 chrome.test.assertTrue(entries[1].isFile); | |
189 chrome.test.assertEq("InBoth.jpg", entries[0].name); | |
190 chrome.test.assertEq("InSecondAlbumOnly.jpg", entries[1].name); | |
191 | |
192 verifyAllJPEGs(directoryEntry, ["InBoth.jpg", "InSecondAlbumOnly.jpg"], | |
193 testFolder2Listing); | |
194 } | |
195 | |
196 getAndVerifyDirectoryEntry(picasaGallery.root, | |
197 "folders/folder1 1899-12-30", verify); | |
198 } | |
199 | |
200 function testFolder2Listing() { | |
201 function verify(directoryEntry, entries) { | |
202 chrome.test.assertEq(1, entries.length); | |
203 chrome.test.assertTrue(entries[0].isFile); | |
204 chrome.test.assertEq("InFirstAlbumOnly.jpg", entries[0].name); | |
205 | |
206 verifyAllJPEGs(directoryEntry, ["InFirstAlbumOnly.jpg"], | |
207 chrome.test.succeed); | |
208 } | |
209 | |
210 getAndVerifyDirectoryEntry(picasaGallery.root, | |
211 "folders/folder2 1899-12-30", verify); | |
212 } | |
213 | |
214 getMediaFileSystemsList(); | |
215 } | |
216 | |
217 chrome.test.runTests([ | |
218 runPicasaTest | |
219 ]); | |
220 | |
221 // Create a dummy window to prevent the ExtensionProcessManager from suspending | |
222 // the chrome-test app. Needed because the FileReader events do not qualify as | |
223 // pending callbacks, so the app looks dormant. | |
224 chrome.app.runtime.onLaunched.addListener(function() { | |
225 chrome.app.window.create('dummy.html', { | |
226 bounds: { | |
227 width: 800, | |
228 height: 600, | |
229 left: 100, | |
230 top: 100 | |
231 }, | |
232 minWidth: 800, | |
233 minHeight: 600 | |
234 }); | |
235 }); | |
OLD | NEW |