Commit a03cf54a authored by hirono@chromium.org's avatar hirono@chromium.org

Gallery: Add browser tests to apply the exposure effect for an image.

BUG=386522
TEST=run the test

Review URL: https://codereview.chromium.org/348553002

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@278408 0039d316-1c4b-4281-b951-d872f2087c98
parent f125e1e5
......@@ -1450,5 +1450,24 @@ IN_PROC_BROWSER_TEST_F(GalleryBrowserTest, CropImageOnDrive) {
StartTest();
}
IN_PROC_BROWSER_TEST_F(GalleryBrowserTest, ExposureImageOnDownloads) {
AddScript("gallery/photo_editor.js");
set_test_case_name("exposureImageOnDownloads");
StartTest();
}
IN_PROC_BROWSER_TEST_F(GalleryBrowserTestInGuestMode,
ExposureImageOnDownloads) {
AddScript("gallery/photo_editor.js");
set_test_case_name("exposureImageOnDownloads");
StartTest();
}
IN_PROC_BROWSER_TEST_F(GalleryBrowserTest, ExposureImageOnDrive) {
AddScript("gallery/photo_editor.js");
set_test_case_name("exposureImageOnDrive");
StartTest();
}
} // namespace
} // namespace file_manager
......@@ -4,6 +4,20 @@
'use strict';
/**
* Waits for the "Press Enter" message.
*
* @param {AppWindow} appWindow App window.
* @return {Promise} Promise to be fulfilled when the element appears.
*/
function waitForPressEnterMessage(appWindow) {
return waitForElement(appWindow, '.prompt-wrapper .prompt').
then(function(element) {
chrome.test.assertEq(
'Press Enter when done', element.innerText.trim());
});
}
/**
* Prepares the photo editor.
*
......@@ -89,14 +103,10 @@ function cropImage(testVolumeName, volumeType) {
var appWindow = args.appWindow;
return waitAndClickElement(appWindow, '.gallery:not([locked]) button.crop').
then(function() {
var promptPromise =
waitForElement(appWindow, '.prompt-wrapper .prompt').
then(function(element) {
chrome.test.assertEq(
'Press Enter when done', element.innerText.trim());
});
var cropOverlay = waitForElement(appWindow, '.crop-overlay');
return Promise.all([promptPromise, cropOverlay]);
return Promise.all([
waitForPressEnterMessage(appWindow),
waitForElement(appWindow, '.crop-overlay')
]);
}).
then(function() {
chrome.test.assertTrue(sendKeyDown(appWindow, 'body', 'Enter'));
......@@ -117,6 +127,77 @@ function cropImage(testVolumeName, volumeType) {
});
}
/**
* Obtains metadata from an entry.
*
* @param {Entry} entry Entry.
* @return {Promise} Promise to be fulfilled with the result metadata.
*/
function getMetadata(entry) {
return new Promise(entry.getMetadata.bind(entry));
}
/**
* Tests to exposure an image.
*
* @param {string} testVolumeName Test volume name passed to the addEntries
* function. Either 'drive' or 'local'.
* @param {VolumeManagerCommon.VolumeType} volumeType Volume type.
* @return {Promise} Promise to be fulfilled with on success.
*/
function exposureImage(testVolumeName, volumeType) {
var launchedPromise = setupPhotoEditor(testVolumeName, volumeType);
return launchedPromise.then(function(args) {
var appWindow = args.appWindow;
var entry = args.entries[0];
var buttonQuery = '.gallery:not([locked]) button.exposure';
// Click the exposure button.
return waitAndClickElement(appWindow, buttonQuery).then(function() {
// Wait until the edit controls appear.
return Promise.all([
waitForPressEnterMessage(appWindow),
waitForElement(appWindow, 'input.range[name="brightness"]'),
waitForElement(appWindow, 'input.range[name="contrast"]'),
]);
}).then(function(results) {
// Update bright.
var brightnessRange = results[1];
brightnessRange.value = 20;
chrome.test.assertTrue(
brightnessRange.dispatchEvent(new Event('change')));
// Update contrast.
var contrastRange = results[2];
contrastRange.value = -20;
chrome.test.assertTrue(
contrastRange.dispatchEvent(new Event('change')));
return getMetadata(entry).then(function(firstMetadata) {
// Push the Enter key.
chrome.test.assertTrue(sendKeyDown(appWindow, 'body', 'Enter'));
// Wait until the image is updated.
return repeatUntil(function() {
return getMetadata(entry).then(function(secondMetadata) {
if (firstMetadata.modificationTime !=
secondMetadata.modificationTime) {
return true;
} else {
return pending(
'%s is not updated. ' +
'First last modified: %s, Second last modified: %s.',
entry.name,
firstMetadata.modificationTime.toString(),
secondMetadata.modificationTime.toString());
}
});
});
});
});
});
}
/**
* The rotateImage test for Downloads.
* @return {Promise} Promise to be fulfilled with on success.
......@@ -148,3 +229,19 @@ function cropImageOnDownloads() {
function cropImageOnDrive() {
return cropImage('drive', VolumeManagerCommon.VolumeType.DRIVE);
}
/**
* The exposureImage test for Downloads.
* @return {Promise} Promise to be fulfilled with on success.
*/
function exposureImageOnDownloads() {
return exposureImage('local', VolumeManagerCommon.VolumeType.DOWNLOADS);
}
/**
* The exposureImage test for Google Drive.
* @return {Promise} Promise to be fulfilled with on success.
*/
function exposureImageOnDrive() {
return exposureImage('drive', VolumeManagerCommon.VolumeType.DRIVE);
}
......@@ -83,8 +83,9 @@ function launchWithTestEntries(
selectedEntries.map(function(entry) { return entry.nameText; }));
});
return launch(entriesPromise).then(function() {
return appWindowPromise.then(function(appWindow) {
return {appWindow: appWindow, entries: entries};
var launchedPromise = Promise.all([appWindowPromise, entriesPromise]);
return launchedPromise.then(function(results) {
return {appWindow: results[0], entries: results[1]};
});
});
}
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment