blob: 973a7526cb4561a2e48f328e36b8b8c785b4031f [file] [log] [blame]
// Copyright 2015 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 audio player.
* @type {string}
* @const
*/
var AUDIO_PLAYER_APP_ID = 'cjbfomnbifhcdnihkgipgfcihmgjfhbf';
var remoteCallAudioPlayer = new RemoteCall(AUDIO_PLAYER_APP_ID);
/**
* Launches the audio player with the given entries.
*
* @param {string} testVolumeName Test volume name passed to the addEntries
* function. Either 'drive' or 'local'.
* @param {VolumeManagerCommon.VolumeType} volumeType Volume type.
* @param {Array<TestEntryInfo>} entries Entries to be parepared and passed to
* the application.
* @param {Array<TestEntryInfo>=} opt_selected Entries to be selected. Should
* be a sub-set of the entries argument.
* @return {Promise} Promise to be fulfilled with the audio player element.
*/
function launch(testVolumeName, volumeType, entries, opt_selected) {
var entriesPromise = addEntries([testVolumeName], entries).then(function() {
var selectedEntries = opt_selected || entries;
var selectedEntryNames =
selectedEntries.map(function(entry) { return entry.nameText; });
return remoteCallAudioPlayer.getFilesUnderVolume(
volumeType, selectedEntryNames);
});
var appWindow = null;
return entriesPromise.then(function(urls) {
return remoteCallAudioPlayer.callRemoteTestUtil(
'openAudioPlayer', null, [urls]);
}).then(function(windowId) {
appWindow = windowId;
return remoteCallAudioPlayer.waitForElement(appWindow, 'body');
}).then(function() {
return Promise.all([
remoteCallAudioPlayer.waitForElement(
appWindow, 'audio-player[playing]'),
]);
}).then(function(args) {
return [appWindow, args[0]];
});
}
/**
* Namespace for test cases.
*/
var testcase = {};
/**
* When the FileManagerBrowserTest harness loads this test extension, request
* configuration and other details from that harness, including the test case
* name to run. Use the configuration/details to setup the test ennvironment,
* then run the test case using chrome.test.RunTests.
*/
window.addEventListener('load', function() {
var steps = [
// Request the guest mode state.
function() {
chrome.test.sendMessage(
JSON.stringify({name: 'isInGuestMode'}), steps.shift());
},
// Request the root entry paths.
function(mode) {
if (JSON.parse(mode) != chrome.extension.inIncognitoContext)
return;
chrome.test.sendMessage(
JSON.stringify({name: 'getRootPaths'}), steps.shift());
},
// Request the test case name.
function(paths) {
var roots = JSON.parse(paths);
RootPath.DOWNLOADS = roots.downloads;
RootPath.DRIVE = roots.drive;
chrome.test.sendMessage(
JSON.stringify({name: 'getTestName'}), steps.shift());
},
// Run the test case.
function(testCaseName) {
// Get the test function from testcase namespace testCaseName.
var test = testcase[testCaseName];
// Verify test is an unnamed (aka 'anonymous') Function.
if (!test instanceof Function || test.name) {
chrome.test.fail('[' + testCaseName + '] not found.');
return;
}
// Define the test case and its name for chrome.test logging.
test.generatedName = testCaseName;
var testCaseSymbol = Symbol(testCaseName);
var testCase = {
[testCaseSymbol] :() => {
return testPromiseAndApps(test(), [remoteCallAudioPlayer]);
},
};
// Run the test.
chrome.test.runTests([testCase[testCaseSymbol]]);
}
];
steps.shift()();
});