- add sources.
[platform/framework/web/crosswalk.git] / src / chrome / test / data / extensions / api_test / media_galleries / picasa / test.js
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 });