Index: chrome/test/data/extensions/api_test/file_manager_browsertest/background.js |
diff --git a/chrome/test/data/extensions/api_test/file_manager_browsertest/background.js b/chrome/test/data/extensions/api_test/file_manager_browsertest/background.js |
deleted file mode 100644 |
index 8d78e13f9f3f76d552435d5fdc5bb866e9dfe695..0000000000000000000000000000000000000000 |
--- a/chrome/test/data/extensions/api_test/file_manager_browsertest/background.js |
+++ /dev/null |
@@ -1,814 +0,0 @@ |
-// 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'; |
- |
-/** |
- * Extension ID of Files.app. |
- * @type {string} |
- * @const |
- */ |
-var FILE_MANAGER_EXTENSIONS_ID = 'hhaomjibdihmijegdhdafkllkbggdgoj'; |
- |
-/** |
- * Calls a remote test util in Files.app's extension. See: test_util.js. |
- * |
- * @param {string} func Function name. |
- * @param {?string} appId Target window's App ID or null for functions |
- * not requiring a window. |
- * @param {Array.<*>} args Array of arguments. |
- * @param {function(*)=} opt_callback Callback handling the function's result. |
- * @return {Promise} Promise to be fulfilled with the result of the remote |
- * utility. |
- */ |
-function callRemoteTestUtil(func, appId, args, opt_callback) { |
- return new Promise(function(onFulfilled) { |
- chrome.runtime.sendMessage( |
- FILE_MANAGER_EXTENSIONS_ID, { |
- func: func, |
- appId: appId, |
- args: args |
- }, |
- function() { |
- if (opt_callback) |
- opt_callback.apply(null, arguments); |
- onFulfilled(arguments[0]); |
- }); |
- }); |
-} |
- |
-/** |
- * Returns promise to be fulfilled after the given milliseconds. |
- * @param {number} time Time in milliseconds. |
- */ |
-function wait(time) { |
- return new Promise(function(callback) { |
- setTimeout(callback, time); |
- }); |
-} |
- |
-/** |
- * Interval milliseconds between checks of repeatUntil. |
- * @type {number} |
- * @const |
- */ |
-var REPEAT_UNTIL_INTERVAL = 200; |
- |
-/** |
- * Interval milliseconds between log output of repeatUntil. |
- * @type {number} |
- * @const |
- */ |
-var LOG_INTERVAL = 3000; |
- |
-/** |
- * Returns a pending marker. See also the repeatUntil function. |
- * @param {string} message Pending reason including %s, %d, or %j markers. %j |
- * format an object as JSON. |
- * @param {Array.<*>} var_args Values to be assigined to %x markers. |
- * @return {Object} Object which returns true for the expression: obj instanceof |
- * pending. |
- */ |
-function pending(message, var_args) { |
- var index = 1; |
- var args = arguments; |
- var formattedMessage = message.replace(/%[sdj]/g, function(pattern) { |
- var arg = args[index++]; |
- switch(pattern) { |
- case '%s': return String(arg); |
- case '%d': return Number(arg); |
- case '%j': return JSON.stringify(arg); |
- default: return pattern; |
- } |
- }); |
- var pendingMarker = Object.create(pending.prototype); |
- pendingMarker.message = formattedMessage; |
- return pendingMarker; |
-}; |
- |
-/** |
- * Waits until the checkFunction returns a value but a pending marker. |
- * @param {function():*} checkFunction Function to check a condition. It can |
- * return a pending marker created by a pending function. |
- * @return {Promise} Promise to be fulfilled with the return value of |
- * checkFunction when the checkFunction reutrns a value but a pending |
- * marker. |
- */ |
-function repeatUntil(checkFunction) { |
- var logTime = Date.now() + LOG_INTERVAL; |
- var step = function() { |
- return checkFunction().then(function(result) { |
- if (result instanceof pending) { |
- if (Date.now() > logTime) { |
- console.log(result.message); |
- logTime += LOG_INTERVAL; |
- } |
- return wait(REPEAT_UNTIL_INTERVAL).then(step); |
- } else { |
- return result; |
- } |
- }); |
- }; |
- return step(); |
-}; |
- |
-/** |
- * Waits until a window having the given ID prefix appears. |
- * @param {string} windowIdPrefix ID prefix of the requested window. |
- * @return {Promise} promise Promise to be fulfilled with a found window's ID. |
- */ |
-function waitForWindow(windowIdPrefix) { |
- return repeatUntil(function() { |
- return callRemoteTestUtil('getWindows', null, []).then(function(windows) { |
- for (var id in windows) { |
- if (id.indexOf(windowIdPrefix) === 0) |
- return id; |
- } |
- return pending('Window with the prefix %s is not found.', windowIdPrefix); |
- }); |
- }); |
-} |
- |
-/** |
- * Closes a window and waits until the window is closed. |
- * |
- * @param {string} windowId ID of the window to close. |
- * @return {Promise} promise Promise to be fulfilled with the result (true: |
- * success, false: failed). |
- */ |
-function closeWindowAndWait(windowId) { |
- // Closes the window. |
- return callRemoteTestUtil('closeWindow', null, [windowId]).then( |
- function(result) { |
- // Returns false when the closing is failed. |
- if (!result) |
- return false; |
- |
- return repeatUntil(function() { |
- return callRemoteTestUtil('getWindows', null, []).then( |
- function(windows) { |
- for (var id in windows) { |
- if (id === windowId) { |
- // Window is still available. Continues waiting. |
- return pending('Window with the prefix %s is not found.', |
- windowId); |
- } |
- } |
- // Window is not available. Closing is done successfully. |
- return true; |
- } |
- ); |
- }); |
- } |
- ); |
-} |
- |
-/** |
- * Waits until the window turns to the given size. |
- * @param {string} windowId Target window ID. |
- * @param {number} width Requested width in pixels. |
- * @param {number} height Requested height in pixels. |
- */ |
-function waitForWindowGeometry(windowId, width, height) { |
- return repeatUntil(function() { |
- return callRemoteTestUtil('getWindows', null, []).then(function(windows) { |
- if (!windows[windowId]) |
- return pending('Window %s is not found.', windowId); |
- if (windows[windowId].innerWidth !== width || |
- windows[windowId].innerHeight !== height) { |
- return pending('Expected window size is %j, but it is %j', |
- {width: width, height: height}, |
- windows[windowId]); |
- } |
- }); |
- }); |
-} |
- |
-/** |
- * Waits for the specified element appearing in the DOM. |
- * @param {string} windowId Target window ID. |
- * @param {string} query Query string for the element. |
- * @param {string=} opt_iframeQuery Query string for the iframe containing the |
- * element. |
- * @return {Promise} Promise to be fulfilled when the element appears. |
- */ |
-function waitForElement(windowId, query, opt_iframeQuery) { |
- return repeatUntil(function() { |
- return callRemoteTestUtil( |
- 'queryAllElements', |
- windowId, |
- [query, opt_iframeQuery] |
- ).then(function(elements) { |
- if (elements.length > 0) |
- return elements[0]; |
- else |
- return pending( |
- 'Element %s (maybe in iframe %s) is not found.', |
- query, |
- opt_iframeQuery); |
- }); |
- }); |
-} |
- |
-/** |
- * Waits for the specified element leaving from the DOM. |
- * @param {string} windowId Target window ID. |
- * @param {string} query Query string for the element. |
- * @param {string=} opt_iframeQuery Query string for the iframe containing the |
- * element. |
- * @return {Promise} Promise to be fulfilled when the element is lost. |
- */ |
-function waitForElementLost(windowId, query, opt_iframeQuery) { |
- return repeatUntil(function() { |
- return callRemoteTestUtil( |
- 'queryAllElements', |
- windowId, |
- [query, opt_iframeQuery] |
- ).then(function(elements) { |
- if (elements.length > 0) |
- return pending('Elements %j is still exists.', elements); |
- return true; |
- }); |
- }); |
-} |
- |
-/** |
-/** |
- * Waits for the file list turns to the given contents. |
- * @param {string} windowId Target window ID. |
- * @param {Array.<Array.<string>>} expected Expected contents of file list. |
- * @param {{orderCheck:boolean=, ignoreLastModifiedTime:boolean=}=} opt_options |
- * Options of the comparison. If orderCheck is true, it also compares the |
- * order of files. If ignoreLastModifiedTime is true, it compares the file |
- * without its last modified time. |
- * @return {Promise} Promise to be fulfilled when the file list turns to the |
- * given contents. |
- */ |
-function waitForFiles(windowId, expected, opt_options) { |
- var options = opt_options || {}; |
- return repeatUntil(function() { |
- return callRemoteTestUtil( |
- 'getFileList', windowId, []).then(function(files) { |
- if (!options.orderCheck) { |
- files.sort(); |
- expected.sort(); |
- } |
- for (var i = 0; i < Math.min(files.length, expected.length); i++) { |
- if (options.ignoreFileSize) { |
- files[i][1] = ''; |
- expected[i][1] = ''; |
- } |
- if (options.ignoreLastModifiedTime) { |
- files[i][3] = ''; |
- expected[i][3] = ''; |
- } |
- } |
- if (!chrome.test.checkDeepEq(expected, files)) { |
- return pending('waitForFiles: expected: %j actual %j.', |
- expected, |
- files); |
- } |
- }); |
- }); |
-} |
- |
-/** |
- * Waits until the number of files in the file list is changed from the given |
- * number. |
- * TODO(hirono): Remove the function. |
- * |
- * @param {string} windowId Target window ID. |
- * @param {number} lengthBefore Number of items visible before. |
- * @return {Promise} Promise to be fulfilled with the contents of files. |
- */ |
-function waitForFileListChange(windowId, lengthBefore) { |
- return repeatUntil(function() { |
- return callRemoteTestUtil( |
- 'getFileList', windowId, []).then(function(files) { |
- files.sort(); |
- var notReadyRows = files.filter(function(row) { |
- return row.filter(function(cell) { return cell == '...'; }).length; |
- }); |
- if (notReadyRows.length === 0 && |
- files.length !== lengthBefore && |
- files.length !== 0) { |
- return files; |
- } else { |
- return pending('The number of file is %d. Not changed.', lengthBefore); |
- } |
- }); |
- }); |
-}; |
- |
-/** |
- * Waits until the given taskId appears in the executed task list. |
- * @param {string} windowId Target window ID. |
- * @param {string} taskId Task ID to watch. |
- * @return {Promise} Promise to be fulfilled when the task appears in the |
- * executed task list. |
- */ |
-function waitUntilTaskExecutes(windowId, taskId) { |
- return repeatUntil(function() { |
- return callRemoteTestUtil('getExecutedTasks', windowId, []). |
- then(function(executedTasks) { |
- if (executedTasks.indexOf(taskId) === -1) |
- return pending('Executed task is %j', executedTasks); |
- }); |
- }); |
-} |
- |
-/** |
- * Adds check of chrome.test to the end of the given promise. |
- * @param {Promise} promise Promise. |
- */ |
-function testPromise(promise) { |
- promise.then(function() { |
- return new Promise(checkIfNoErrorsOccured); |
- }).then(chrome.test.callbackPass(function() { |
- // The callbacPass is necessary to avoid prematurely finishing tests. |
- // Don't put chrome.test.succeed() here to avoid doubled success log. |
- }), function(error) { |
- chrome.test.fail(error.stack || error); |
- }); |
-}; |
- |
-/** |
- * Sends a fake key down event. |
- * @param {string} windowId Window ID. |
- * @param {string} query Query for the target element. |
- * @param {string} keyIdentifer Key identifier. |
- * @param {boolean} ctrlKey Control key flag. |
- * @return {Promise} Promise to be fulfilled or rejected depending on the |
- * result. |
- */ |
-function fakeKeyDown(windowId, query, keyIdentifer, ctrlKey) { |
- return new Promise(function(fulfill, reject) { |
- callRemoteTestUtil('fakeKeyDown', |
- windowId, |
- [query, keyIdentifer, ctrlKey], |
- function(result) { |
- if (result) |
- fulfill(); |
- else |
- reject(new Error('Fail to fake key down.')); |
- }); |
- }); |
-} |
- |
-/** |
- * Executes a sequence of test steps. |
- * @constructor |
- */ |
-function StepsRunner() { |
- /** |
- * List of steps. |
- * @type {Array.<function>} |
- * @private |
- */ |
- this.steps_ = []; |
-} |
- |
-/** |
- * Creates a StepsRunner instance and runs the passed steps. |
- */ |
-StepsRunner.run = function(steps) { |
- var stepsRunner = new StepsRunner(); |
- stepsRunner.run_(steps); |
-}; |
- |
-StepsRunner.prototype = { |
- /** |
- * @return {function} The next closure. |
- */ |
- get next() { |
- return this.steps_[0]; |
- } |
-}; |
- |
-/** |
- * Runs a sequence of the added test steps. |
- * @type {Array.<function>} List of the sequential steps. |
- */ |
-StepsRunner.prototype.run_ = function(steps) { |
- this.steps_ = steps.slice(0); |
- |
- // An extra step which acts as an empty callback for optional asynchronous |
- // calls in the last provided step. |
- this.steps_.push(function() {}); |
- |
- this.steps_ = this.steps_.map(function(f) { |
- return chrome.test.callbackPass(function() { |
- this.steps_.shift(); |
- f.apply(this, arguments); |
- }.bind(this)); |
- }.bind(this)); |
- |
- this.next(); |
-}; |
- |
-/** |
- * Adds the givin entries to the target volume(s). |
- * @param {Array.<string>} volumeNames Names of target volumes. |
- * @param {Array.<TestEntryInfo>} entries List of entries to be added. |
- * @param {function(boolean)} callback Callback function to be passed the result |
- * of function. The argument is true on success. |
- */ |
-function addEntries(volumeNames, entries, callback) { |
- if (volumeNames.length == 0) { |
- callback(true); |
- return; |
- } |
- chrome.test.sendMessage(JSON.stringify({ |
- name: 'addEntries', |
- volume: volumeNames.shift(), |
- entries: entries |
- }), chrome.test.callbackPass(function(result) { |
- if (result == "onEntryAdded") |
- addEntries(volumeNames, entries, callback); |
- else |
- callback(false); |
- })); |
-}; |
- |
-/** |
- * @enum {string} |
- * @const |
- */ |
-var EntryType = Object.freeze({ |
- FILE: 'file', |
- DIRECTORY: 'directory' |
-}); |
- |
-/** |
- * @enum {string} |
- * @const |
- */ |
-var SharedOption = Object.freeze({ |
- NONE: 'none', |
- SHARED: 'shared' |
-}); |
- |
-/** |
- * @enum {string} |
- */ |
-var RootPath = Object.seal({ |
- DOWNLOADS: '/must-be-filled-in-test-setup', |
- DRIVE: '/must-be-filled-in-test-setup', |
-}); |
- |
-/** |
- * File system entry information for tests. |
- * |
- * @param {EntryType} type Entry type. |
- * @param {string} sourceFileName Source file name that provides file contents. |
- * @param {string} targetName Name of entry on the test file system. |
- * @param {string} mimeType Mime type. |
- * @param {SharedOption} sharedOption Shared option. |
- * @param {string} lastModifiedTime Last modified time as a text to be shown in |
- * the last modified column. |
- * @param {string} nameText File name to be shown in the name column. |
- * @param {string} sizeText Size text to be shown in the size column. |
- * @param {string} typeText Type name to be shown in the type column. |
- * @constructor |
- */ |
-function TestEntryInfo(type, |
- sourceFileName, |
- targetPath, |
- mimeType, |
- sharedOption, |
- lastModifiedTime, |
- nameText, |
- sizeText, |
- typeText) { |
- this.type = type; |
- this.sourceFileName = sourceFileName || ''; |
- this.targetPath = targetPath; |
- this.mimeType = mimeType || ''; |
- this.sharedOption = sharedOption; |
- this.lastModifiedTime = lastModifiedTime; |
- this.nameText = nameText; |
- this.sizeText = sizeText; |
- this.typeText = typeText; |
- Object.freeze(this); |
-}; |
- |
-TestEntryInfo.getExpectedRows = function(entries) { |
- return entries.map(function(entry) { return entry.getExpectedRow(); }); |
-}; |
- |
-/** |
- * Obtains a expected row contents of the file in the file list. |
- */ |
-TestEntryInfo.prototype.getExpectedRow = function() { |
- return [this.nameText, this.sizeText, this.typeText, this.lastModifiedTime]; |
-}; |
- |
-/** |
- * Filesystem entries used by the test cases. |
- * @type {Object.<string, TestEntryInfo>} |
- * @const |
- */ |
-var ENTRIES = { |
- hello: new TestEntryInfo( |
- EntryType.FILE, 'text.txt', 'hello.txt', |
- 'text/plain', SharedOption.NONE, 'Sep 4, 1998 12:34 PM', |
- 'hello.txt', '51 bytes', 'Plain text'), |
- |
- world: new TestEntryInfo( |
- EntryType.FILE, 'video.ogv', 'world.ogv', |
- 'text/plain', SharedOption.NONE, 'Jul 4, 2012 10:35 AM', |
- 'world.ogv', '59 KB', 'OGG video'), |
- |
- unsupported: new TestEntryInfo( |
- EntryType.FILE, 'random.bin', 'unsupported.foo', |
- 'application/x-foo', SharedOption.NONE, 'Jul 4, 2012 10:36 AM', |
- 'unsupported.foo', '8 KB', 'FOO file'), |
- |
- desktop: new TestEntryInfo( |
- EntryType.FILE, 'image.png', 'My Desktop Background.png', |
- 'text/plain', SharedOption.NONE, 'Jan 18, 2038 1:02 AM', |
- 'My Desktop Background.png', '272 bytes', 'PNG image'), |
- |
- beautiful: new TestEntryInfo( |
- EntryType.FILE, 'music.ogg', 'Beautiful Song.ogg', |
- 'text/plain', SharedOption.NONE, 'Nov 12, 2086 12:00 PM', |
- 'Beautiful Song.ogg', '14 KB', 'OGG audio'), |
- |
- photos: new TestEntryInfo( |
- EntryType.DIRECTORY, null, 'photos', |
- null, SharedOption.NONE, 'Jan 1, 1980 11:59 PM', |
- 'photos', '--', 'Folder'), |
- |
- testDocument: new TestEntryInfo( |
- EntryType.FILE, null, 'Test Document', |
- 'application/vnd.google-apps.document', |
- SharedOption.NONE, 'Apr 10, 2013 4:20 PM', |
- 'Test Document.gdoc', '--', 'Google document'), |
- |
- testSharedDocument: new TestEntryInfo( |
- EntryType.FILE, null, 'Test Shared Document', |
- 'application/vnd.google-apps.document', |
- SharedOption.SHARED, 'Mar 20, 2013 10:40 PM', |
- 'Test Shared Document.gdoc', '--', 'Google document'), |
- |
- newlyAdded: new TestEntryInfo( |
- EntryType.FILE, 'music.ogg', 'newly added file.ogg', |
- 'audio/ogg', SharedOption.NONE, 'Sep 4, 1998 12:00 AM', |
- 'newly added file.ogg', '14 KB', 'OGG audio'), |
- |
- directoryA: new TestEntryInfo( |
- EntryType.DIRECTORY, null, 'A', |
- null, SharedOption.NONE, 'Jan 1, 2000 1:00 AM', |
- 'A', '--', 'Folder'), |
- |
- directoryB: new TestEntryInfo( |
- EntryType.DIRECTORY, null, 'A/B', |
- null, SharedOption.NONE, 'Jan 1, 2000 1:00 AM', |
- 'B', '--', 'Folder'), |
- |
- directoryC: new TestEntryInfo( |
- EntryType.DIRECTORY, null, 'A/B/C', |
- null, SharedOption.NONE, 'Jan 1, 2000 1:00 AM', |
- 'C', '--', 'Folder'), |
- |
- zipArchive: new TestEntryInfo( |
- EntryType.FILE, 'archive.zip', 'archive.zip', |
- 'application/x-zip', SharedOption.NONE, 'Jan 1, 2014 1:00 AM', |
- 'archive.zip', '533 bytes', 'Zip archive') |
-}; |
- |
-/** |
- * Basic entry set for the local volume. |
- * @type {Array.<TestEntryInfo>} |
- * @const |
- */ |
-var BASIC_LOCAL_ENTRY_SET = [ |
- ENTRIES.hello, |
- ENTRIES.world, |
- ENTRIES.desktop, |
- ENTRIES.beautiful, |
- ENTRIES.photos |
-]; |
- |
-/** |
- * Basic entry set for the drive volume. |
- * |
- * TODO(hirono): Add a case for an entry cached by FileCache. For testing |
- * Drive, create more entries with Drive specific attributes. |
- * |
- * @type {Array.<TestEntryInfo>} |
- * @const |
- */ |
-var BASIC_DRIVE_ENTRY_SET = [ |
- ENTRIES.hello, |
- ENTRIES.world, |
- ENTRIES.desktop, |
- ENTRIES.beautiful, |
- ENTRIES.photos, |
- ENTRIES.unsupported, |
- ENTRIES.testDocument, |
- ENTRIES.testSharedDocument |
-]; |
- |
-var NESTED_ENTRY_SET = [ |
- ENTRIES.directoryA, |
- ENTRIES.directoryB, |
- ENTRIES.directoryC |
-]; |
- |
-/** |
- * Expected files shown in "Recent". Directories (e.g. 'photos') are not in this |
- * list as they are not expected in "Recent". |
- * |
- * @type {Array.<TestEntryInfo>} |
- * @const |
- */ |
-var RECENT_ENTRY_SET = [ |
- ENTRIES.hello, |
- ENTRIES.world, |
- ENTRIES.desktop, |
- ENTRIES.beautiful, |
- ENTRIES.unsupported, |
- ENTRIES.testDocument, |
- ENTRIES.testSharedDocument |
-]; |
- |
-/** |
- * Expected files shown in "Offline", which should have the files |
- * "available offline". Google Documents, Google Spreadsheets, and the files |
- * cached locally are "available offline". |
- * |
- * @type {Array.<TestEntryInfo>} |
- * @const |
- */ |
-var OFFLINE_ENTRY_SET = [ |
- ENTRIES.testDocument, |
- ENTRIES.testSharedDocument |
-]; |
- |
-/** |
- * Expected files shown in "Shared with me", which should be the entries labeled |
- * with "shared-with-me". |
- * |
- * @type {Array.<TestEntryInfo>} |
- * @const |
- */ |
-var SHARED_WITH_ME_ENTRY_SET = [ |
- ENTRIES.testSharedDocument |
-]; |
- |
-/** |
- * Opens a Files.app's main window. |
- * |
- * TODO(mtomasz): Pass a volumeId or an enum value instead of full paths. |
- * |
- * @param {Object} appState App state to be passed with on opening Files.app. |
- * Can be null. |
- * @param {?string} initialRoot Root path to be used as a default current |
- * directory during initialization. Can be null, for no default path. |
- * @param {function(string)} Callback with the app id. |
- * @return {Promise} Promise to be fulfilled after window creating. |
- */ |
-function openNewWindow(appState, initialRoot, callback) { |
- var appId; |
- |
- // TODO(mtomasz): Migrate from full paths to a pair of a volumeId and a |
- // relative path. To compose the URL communicate via messages with |
- // file_manager_browser_test.cc. |
- var processedAppState = appState || {}; |
- if (initialRoot) { |
- processedAppState.currentDirectoryURL = |
- 'filesystem:chrome-extension://' + FILE_MANAGER_EXTENSIONS_ID + |
- '/external' + initialRoot; |
- } |
- |
- return callRemoteTestUtil('openMainWindow', |
- null, |
- [processedAppState], |
- callback); |
-} |
- |
-/** |
- * Opens a Files.app's main window and waits until it is initialized. Fills |
- * the window with initial files. Should be called for the first window only. |
- * |
- * TODO(hirono): Add parameters to specify the entry set to be prepared. |
- * TODO(mtomasz): Pass a volumeId or an enum value instead of full paths. |
- * |
- * @param {Object} appState App state to be passed with on opening Files.app. |
- * Can be null. |
- * @param {?string} initialRoot Root path to be used as a default current |
- * directory during initialization. Can be null, for no default path. |
- * @param {function(string, Array.<Array.<string>>)} Callback with the app id |
- * and with the file list. |
- */ |
-function setupAndWaitUntilReady(appState, initialRoot, callback) { |
- var appId; |
- |
- StepsRunner.run([ |
- function() { |
- openNewWindow(appState, initialRoot, this.next); |
- }, |
- function(inAppId) { |
- appId = inAppId; |
- addEntries(['local'], BASIC_LOCAL_ENTRY_SET, this.next); |
- }, |
- function(success) { |
- chrome.test.assertTrue(success); |
- addEntries(['drive'], BASIC_DRIVE_ENTRY_SET, this.next); |
- }, |
- function(success) { |
- chrome.test.assertTrue(success); |
- waitForElement(appId, '#detail-table').then(this.next); |
- }, |
- function(success) { |
- waitForFileListChange(appId, 0).then(this.next); |
- }, |
- function(fileList) { |
- callback(appId, fileList); |
- this.next(); |
- } |
- ]); |
-} |
- |
-/** |
- * Verifies if there are no Javascript errors in any of the app windows. |
- * @param {function()} Completion callback. |
- */ |
-function checkIfNoErrorsOccured(callback) { |
- callRemoteTestUtil('getErrorCount', null, [], function(count) { |
- chrome.test.assertEq(0, count, 'The error count is not 0.'); |
- callback(); |
- }); |
-} |
- |
-/** |
- * Returns the name of the given file list entry. |
- * @param {Array.<string>} file An entry in a file list. |
- * @return {string} Name of the file. |
- */ |
-function getFileName(fileListEntry) { |
- return fileListEntry[0]; |
-} |
- |
-/** |
- * Returns the size of the given file list entry. |
- * @param {Array.<string>} An entry in a file list. |
- * @return {string} Size of the file. |
- */ |
-function getFileSize(fileListEntry) { |
- return fileListEntry[1]; |
-} |
- |
-/** |
- * Returns the type of the given file list entry. |
- * @param {Array.<string>} An entry in a file list. |
- * @return {string} Type of the file. |
- */ |
-function getFileType(fileListEntry) { |
- return fileListEntry[2]; |
-} |
- |
-/** |
- * Namespace for test cases. |
- */ |
-var testcase = {}; |
- |
-// Ensure the test cases are loaded. |
-window.addEventListener('load', function() { |
- var steps = [ |
- // Check for the guest mode. |
- function() { |
- chrome.test.sendMessage( |
- JSON.stringify({name: 'isInGuestMode'}), steps.shift()); |
- }, |
- // Obtain the test case name. |
- function(result) { |
- if (JSON.parse(result) != chrome.extension.inIncognitoContext) |
- return; |
- chrome.test.sendMessage( |
- JSON.stringify({name: 'getRootPaths'}), steps.shift()); |
- }, |
- // Obtain the root entry paths. |
- function(result) { |
- var roots = JSON.parse(result); |
- RootPath.DOWNLOADS = roots.downloads; |
- RootPath.DRIVE = roots.drive; |
- chrome.test.sendMessage( |
- JSON.stringify({name: 'getTestName'}), steps.shift()); |
- }, |
- // Run the test case. |
- function(testCaseName) { |
- var targetTest = testcase[testCaseName]; |
- if (!targetTest) { |
- chrome.test.fail(testCaseName + ' is not found.'); |
- return; |
- } |
- // Specify the name of test to the test system. |
- targetTest.generatedName = testCaseName; |
- chrome.test.runTests([targetTest]); |
- } |
- ]; |
- steps.shift()(); |
-}); |