Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(10882)

Unified Diff: chrome/test/data/extensions/api_test/media_galleries/picasa/test.js

Issue 23513059: Media Galleries API Picasa: End-to-end browsertest. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: self review Created 7 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/test/data/extensions/api_test/media_galleries/picasa/test.js
diff --git a/chrome/test/data/extensions/api_test/media_galleries/picasa/test.js b/chrome/test/data/extensions/api_test/media_galleries/picasa/test.js
new file mode 100644
index 0000000000000000000000000000000000000000..eaaca38efd6539040e6cd0384840427f0b817fc5
--- /dev/null
+++ b/chrome/test/data/extensions/api_test/media_galleries/picasa/test.js
@@ -0,0 +1,235 @@
+// Copyright 2013 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+var mediaGalleries = chrome.mediaGalleries;
+
+// Get's entire listing from directory, then verifies the sorted contents.
+function verifyDirectoryEntry(directoryEntry, verifyFunction) {
+ var allEntries = [];
+ var reader = directoryEntry.createReader();
+
+ function readEntries() {
+ reader.readEntries(readEntriesCallback, chrome.test.fail);
+ }
+
+ function readEntriesCallback(entries) {
+ if (entries.length == 0) {
+ verifyFunction(directoryEntry, allEntries.sort());
+ return;
+ }
+
+ allEntries = allEntries.concat(entries);
+ readEntries();
+ }
+
+ readEntries();
+}
+
+// Verifies a directory itself, then the contents.
+function getAndVerifyDirectoryEntry(parentEntry, directoryName,
+ verifyFunction) {
+ function getDirectoryCallback(entry) {
+ chrome.test.assertTrue(entry.isDirectory);
+ verifyDirectoryEntry(entry, verifyFunction);
+ }
+
+ parentEntry.getDirectory(directoryName, {create: false},
+ getDirectoryCallback, chrome.test.fail);
+}
+
+function verifyJPEG(parentDirectoryEntry, filename, doneCallback) {
+ function verifyFile(file) {
+ var reader = new FileReader();
+
+ reader.onload = function(e) {
+ var arraybuffer = e.target.result;
+ var view = new Uint8Array(arraybuffer);
+ chrome.test.assertEq(0xFF, view[0]);
+ chrome.test.assertEq(0xD8, view[1]);
+ chrome.test.assertEq(0xFF, view[2]);
+ doneCallback();
+ }
+
+ reader.onerror =
+ chrome.test.fail.bind(null, "Unable to read test image: " + filename);
+
+ reader.readAsArrayBuffer(file);
+ }
+
+ parentDirectoryEntry.getFile(
+ filename,
+ {create: false},
+ 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.
+ chrome.test.fail);
+}
+
+function verifyAllJPEGs(parentDirectoryEntry, filenames, doneCallback) {
+ var remaining = filenames;
+ function verifyNextJPEG() {
+ if (remaining.length == 0) {
+ doneCallback();
+ return;
+ }
+ verifyJPEG(parentDirectoryEntry, remaining.pop(), verifyNextJPEG);
+ }
+ verifyNextJPEG();
+}
+
+function runPicasaTest() {
+ var picasaGallery;
+ var rootReadEntriesTotalReturned = 0;
+
+ function getMediaFileSystemsList() {
+ mediaGalleries.getMediaFileSystems(getMediaFileSystemsCallback);
+ }
+
+ function getMediaFileSystemsCallback(results) {
+ chrome.test.assertEq(1, results.length);
+ picasaGallery = results[0];
+
+ var galleryProperties =
+ mediaGalleries.getMediaFileSystemMetadata(picasaGallery);
+ chrome.test.assertFalse(galleryProperties.isRemovable);
+
+ function verify(directoryEntry, entries) {
+ chrome.test.assertEq(2, entries.length);
+ chrome.test.assertTrue(entries[0].isDirectory);
+ chrome.test.assertTrue(entries[1].isDirectory);
+ chrome.test.assertEq("albums", entries[0].name);
+ chrome.test.assertEq("folders", entries[1].name);
+
+ 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.
+ }
+
+ verifyDirectoryEntry(picasaGallery.root, verify);
+ }
+
+ function testAlbumsListing() {
+ function verify(directoryEntry, entries) {
+ chrome.test.assertEq(2, entries.length);
+ chrome.test.assertTrue(entries[0].isDirectory);
+ chrome.test.assertTrue(entries[1].isDirectory);
+ chrome.test.assertEq("Album 1 Name 1899-12-30", entries[0].name);
+ chrome.test.assertEq("Album 2 Name 1899-12-30", entries[1].name);
+
+ testFoldersListing();
+ }
+
+ getAndVerifyDirectoryEntry(picasaGallery.root, "albums", verify);
+ }
+
+ function testFoldersListing() {
+ function verify(directoryEntry, entries) {
+ chrome.test.assertEq(2, entries.length);
+ chrome.test.assertTrue(entries[0].isDirectory);
+ chrome.test.assertTrue(entries[1].isDirectory);
+ chrome.test.assertEq("folder1 1899-12-30", entries[0].name);
+ chrome.test.assertEq("folder2 1899-12-30", entries[1].name);
+
+ testAlbum1Listing();
+ }
+
+ getAndVerifyDirectoryEntry(picasaGallery.root, "folders", verify);
+ }
+
+ function testAlbum1Listing() {
+ function verify(directoryEntry, entries) {
+ chrome.test.assertEq(2, entries.length);
+ chrome.test.assertTrue(entries[0].isFile);
+ chrome.test.assertTrue(entries[1].isFile);
+ chrome.test.assertEq("InBoth.jpg", entries[0].name);
+ chrome.test.assertEq("InFirstAlbumOnly.jpg", entries[1].name);
+
+ verifyAllJPEGs(directoryEntry, ["InBoth.jpg", "InFirstAlbumOnly.jpg"],
+ testAlbum2Listing);
+ }
+
+ getAndVerifyDirectoryEntry(picasaGallery.root,
+ "albums/Album 1 Name 1899-12-30", verify);
+ }
+
+ function testAlbum2Listing() {
+ function verify(directoryEntry, entries) {
+ chrome.test.assertEq(2, entries.length);
+ chrome.test.assertTrue(entries[0].isFile);
+ chrome.test.assertTrue(entries[1].isFile);
+ chrome.test.assertEq("InBoth.jpg", entries[0].name);
+ chrome.test.assertEq("InSecondAlbumOnly.jpg", entries[1].name);
+
+ verifyAllJPEGs(directoryEntry, ["InBoth.jpg", "InSecondAlbumOnly.jpg"],
+ chrome.test.succeed);
+ }
+
+ getAndVerifyDirectoryEntry(picasaGallery.root,
+ "albums/Album 2 Name 1899-12-30", verify);
+ }
+
+ function testAlbum2Listing() {
vandebo (ex-Chrome) 2013/09/17 21:18:06 repeated function?
tommycli 2013/09/18 15:25:37 Done.
+ function verify(directoryEntry, entries) {
+ chrome.test.assertEq(2, entries.length);
+ chrome.test.assertTrue(entries[0].isFile);
+ chrome.test.assertTrue(entries[1].isFile);
+ chrome.test.assertEq("InBoth.jpg", entries[0].name);
+ chrome.test.assertEq("InSecondAlbumOnly.jpg", entries[1].name);
+
+ verifyAllJPEGs(directoryEntry, ["InBoth.jpg", "InSecondAlbumOnly.jpg"],
+ testFolder1Listing);
+ }
+
+ getAndVerifyDirectoryEntry(picasaGallery.root,
+ "albums/Album 2 Name 1899-12-30", verify);
+ }
+
+ function testFolder1Listing() {
+ function verify(directoryEntry, entries) {
+ chrome.test.assertEq(2, entries.length);
+ chrome.test.assertTrue(entries[0].isFile);
+ chrome.test.assertTrue(entries[1].isFile);
+ chrome.test.assertEq("InBoth.jpg", entries[0].name);
+ chrome.test.assertEq("InSecondAlbumOnly.jpg", entries[1].name);
+
+ verifyAllJPEGs(directoryEntry, ["InBoth.jpg", "InSecondAlbumOnly.jpg"],
+ testFolder2Listing);
+ }
+
+ getAndVerifyDirectoryEntry(picasaGallery.root,
+ "folders/folder1 1899-12-30", verify);
+ }
+
+ function testFolder2Listing() {
+ function verify(directoryEntry, entries) {
+ chrome.test.assertEq(1, entries.length);
+ chrome.test.assertTrue(entries[0].isFile);
+ chrome.test.assertEq("InFirstAlbumOnly.jpg", entries[0].name);
+
+ verifyAllJPEGs(directoryEntry, ["InFirstAlbumOnly.jpg"],
+ chrome.test.succeed);
+ }
+
+ getAndVerifyDirectoryEntry(picasaGallery.root,
+ "folders/folder2 1899-12-30", verify);
+ }
+
+ getMediaFileSystemsList();
+}
+
+chrome.test.runTests([
+ runPicasaTest
+]);
+
+// Create a dummy window to prevent the ExtensionProcessManager from suspending
+// the chrome-test app. Needed because the FileReader events do not qualify as
+// pending callbacks, so the app looks dormant.
+chrome.app.runtime.onLaunched.addListener(function() {
+ chrome.app.window.create('dummy.html', {
+ bounds: {
+ width: 800,
+ height: 600,
+ left: 100,
+ top: 100
+ },
+ minWidth: 800,
+ minHeight: 600
+ });
+});

Powered by Google App Engine
This is Rietveld 408576698