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) { ...@@ -1450,5 +1450,24 @@ IN_PROC_BROWSER_TEST_F(GalleryBrowserTest, CropImageOnDrive) {
StartTest(); 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
} // namespace file_manager } // namespace file_manager
...@@ -4,6 +4,20 @@ ...@@ -4,6 +4,20 @@
'use strict'; '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. * Prepares the photo editor.
* *
...@@ -89,14 +103,10 @@ function cropImage(testVolumeName, volumeType) { ...@@ -89,14 +103,10 @@ function cropImage(testVolumeName, volumeType) {
var appWindow = args.appWindow; var appWindow = args.appWindow;
return waitAndClickElement(appWindow, '.gallery:not([locked]) button.crop'). return waitAndClickElement(appWindow, '.gallery:not([locked]) button.crop').
then(function() { then(function() {
var promptPromise = return Promise.all([
waitForElement(appWindow, '.prompt-wrapper .prompt'). waitForPressEnterMessage(appWindow),
then(function(element) { waitForElement(appWindow, '.crop-overlay')
chrome.test.assertEq( ]);
'Press Enter when done', element.innerText.trim());
});
var cropOverlay = waitForElement(appWindow, '.crop-overlay');
return Promise.all([promptPromise, cropOverlay]);
}). }).
then(function() { then(function() {
chrome.test.assertTrue(sendKeyDown(appWindow, 'body', 'Enter')); chrome.test.assertTrue(sendKeyDown(appWindow, 'body', 'Enter'));
...@@ -117,6 +127,77 @@ function cropImage(testVolumeName, volumeType) { ...@@ -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. * The rotateImage test for Downloads.
* @return {Promise} Promise to be fulfilled with on success. * @return {Promise} Promise to be fulfilled with on success.
...@@ -148,3 +229,19 @@ function cropImageOnDownloads() { ...@@ -148,3 +229,19 @@ function cropImageOnDownloads() {
function cropImageOnDrive() { function cropImageOnDrive() {
return cropImage('drive', VolumeManagerCommon.VolumeType.DRIVE); 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( ...@@ -83,8 +83,9 @@ function launchWithTestEntries(
selectedEntries.map(function(entry) { return entry.nameText; })); selectedEntries.map(function(entry) { return entry.nameText; }));
}); });
return launch(entriesPromise).then(function() { return launch(entriesPromise).then(function() {
return appWindowPromise.then(function(appWindow) { var launchedPromise = Promise.all([appWindowPromise, entriesPromise]);
return {appWindow: appWindow, entries: entries}; 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