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

Unified Diff: chrome/test/data/extensions/api_test/file_browser/app_file_handler_multi/test.js

Issue 300063006: Files.app: Let Files.app pass mutliple files to file handlers. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fixed Created 6 years, 6 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
« no previous file with comments | « chrome/test/data/extensions/api_test/file_browser/app_file_handler_multi/manifest.json ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/test/data/extensions/api_test/file_browser/app_file_handler_multi/test.js
diff --git a/chrome/test/data/extensions/api_test/file_browser/app_file_handler_multi/test.js b/chrome/test/data/extensions/api_test/file_browser/app_file_handler_multi/test.js
new file mode 100644
index 0000000000000000000000000000000000000000..5af5d734d48126a0d62ed5ac9e6b62e04224ed07
--- /dev/null
+++ b/chrome/test/data/extensions/api_test/file_browser/app_file_handler_multi/test.js
@@ -0,0 +1,183 @@
+// Copyright (c) 2014 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.
+
+'use strict';
+
+/**
+ * Promise of the volume list.
+ * @type {Promise}
+ */
+var volumeListPromise = new Promise(function(fulfill, reject) {
+ chrome.fileBrowserPrivate.getVolumeMetadataList(fulfill);
+});
+
+/**
+ * Obtains file system of the volume type.
+ * @param {string} volumeType VolumeType.
+ * @return {Promise} Promise to be fulfilled with a file system.
+ */
+function getFileSystem(volumeType) {
+ return volumeListPromise.then(function(list) {
+ for (var i = 0; i < list.length; i++) {
+ if (list[i].volumeType == volumeType) {
+ return new Promise(function(fulfill) {
+ chrome.fileBrowserPrivate.requestFileSystem(
+ list[i].volumeId, fulfill);
+ });
+ }
+ }
+ throw new Error('The volume is not found: ' + volumeType + '.');
+ });
+}
+
+/**
+ * Prepares a file on the file system.
+ * @param {FileSystem} filesystem File system.
+ * @param {string} name Name of the file.
+ * @param {Blob} contents Contents of the file.
+ * @return {Promise} Promise to be fulfilled with FileEntry of the new file.
+ */
+function prepareFile(filesystem, name, contents) {
+ return new Promise(function(fulfill, reject) {
+ filesystem.root.getFile(name, {create: true}, function(file) {
+ file.createWriter(function(writer) {
+ writer.write(contents);
+ writer.onwrite = fulfill.bind(null, file);
+ writer.onerror = reject;
+ });
+ fulfill(file);
+ }, reject);
+ });
+}
+
+/**
+ * Prepares two test files on the file system.
+ * @param {FileSystem} filesystem File system.
+ * @return {Promise} Promise to be fullfilled with an object {filesystem:
+ * FileSystem, entries: Array.<FileEntry>} that contains the passed file
+ * system and the created entries.
+ */
+function prepareFiles(filesystem) {
+ var testFileA =
+ prepareFile(filesystem, 'test_file_a.txt', TEST_FILE_CONTENTS);
+ var testFileB =
+ prepareFile(filesystem, 'test_file_b.txt', TEST_FILE_CONTENTS);
+ return Promise.all([testFileA, testFileB]).then(function(entries) {
+ return {filesystem: filesystem, entries: entries};
+ });
+}
+
+/**
+ * Contents of the test file.
+ * @type {Blob}
+ * @const
+ */
+var TEST_FILE_CONTENTS = new Blob(['This is a test file.']);
+
+/**
+ * File system of the drive volume.
+ * @type {Promise}
+ */
+var driveFileSystemPromise = getFileSystem('drive').then(prepareFiles);
+
+/**
+ * File system of the local volume.
+ * @type {Promise}
+ */
+var localFileSystemPromise = getFileSystem('testing').then(prepareFiles);
+
+/**
+ * Calls test functions depends on the result of the promise.
+ * @param {Promise} promise Promise to be fulfilled or to be rejected depends on
+ * the test results.
+ */
+function testPromise(promise) {
+ promise.then(
+ chrome.test.callbackPass(),
+ function(error) {
+ chrome.test.fail(error.stack || error);
+ });
+}
+
+/**
+ * Calls the executeTask API with the entries and checks the launch data passed
+ * to onLaunched events.
+ * @param {entries} entries Entries to be tested.
+ * @return {Promise} Promise to be fulfilled on success.
+ */
+function launchWithEntries(entries) {
+ var urls = entries.map(function(entry) { return entry.toURL(); });
+ var mimeTypes = urls.map(function() { return ''; });
+ var tasksPromise = new Promise(function(fulfill) {
+ chrome.fileBrowserPrivate.getFileTasks(urls, mimeTypes, fulfill);
+ }).then(function(tasks) {
+ chrome.test.assertEq(1, tasks.length);
+ chrome.test.assertEq('kidcpjlbjdmcnmccjhjdckhbngnhnepk|app|textAction',
+ tasks[0].taskId);
+ return tasks[0];
+ });
+ var launchDataPromise = new Promise(function(fulfill) {
+ chrome.app.runtime.onLaunched.addListener(function handler(launchData) {
+ chrome.app.runtime.onLaunched.removeListener(handler);
+ fulfill(launchData);
+ });
+ });
+ var taskExecutedPromise = tasksPromise.then(function(task) {
+ return new Promise(function(fulfill, reject) {
+ chrome.fileBrowserPrivate.executeTask(
+ task.taskId,
+ urls,
+ function(result) {
+ if (result)
+ fulfill();
+ else
+ reject();
+ });
+ });
+ });
+ return Promise.all([taskExecutedPromise, launchDataPromise]).then(
+ function(args) {
+ chrome.test.assertEq(entries.length, args[1].items.length);
+ chrome.test.assertEq(
+ entries.map(function(entry) { return entry.name; }),
+ args[1].items.map(function(item) { return item.entry.name; }));
+ });
+}
+
+/**
+ * Tests the file handler feature with entries on the local volume.
+ */
+function testForLocalFiles() {
+ testPromise(localFileSystemPromise.then(function(volume) {
+ return launchWithEntries(volume.entries);
+ }));
+}
+
+/**
+ * Tests the file handler feature with entries on the drive volume.
+ */
+function testForDriveFiles() {
+ testPromise(driveFileSystemPromise.then(function(volume) {
+ return launchWithEntries(volume.entries);
+ }));
+}
+
+/**
+ * Tests the file handler with entries both on the local and on the drive
+ * volumes.
+ */
+function testForMixedFiles() {
+ testPromise(
+ Promise.all([localFileSystemPromise, driveFileSystemPromise]).then(
+ function(args) {
+ return launchWithEntries(args[0].entries.concat(args[1].entries));
+ }));
+}
+
+// Run the tests.
+chrome.test.runTests([
+ testForLocalFiles,
+ testForDriveFiles,
+ testForMixedFiles
+]);
« no previous file with comments | « chrome/test/data/extensions/api_test/file_browser/app_file_handler_multi/manifest.json ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698