blob: 5a20bf976839a21b6a9bc3a78a0872a9fc947d84 [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.
cr.define('settings_people_page_change_picture', function() {
/**
* @constructor
* @implements {settings.ChangePictureBrowserProxy}
* @extends {settings.TestBrowserProxy}
*/
var TestChangePictureBrowserProxy = function() {
settings.TestBrowserProxy.call(this, [
'initialize',
'selectDefaultImage',
'selectOldImage',
'selectProfileImage',
'photoTaken',
'chooseFile',
]);
};
TestChangePictureBrowserProxy.prototype = {
__proto__: settings.TestBrowserProxy.prototype,
/** @override */
initialize: function() {
cr.webUIListenerCallback('profile-image-changed',
'fake-profile-image-url',
false /* selected */);
var fakeDefaultImages = [
{
author: 'Author1',
title: 'Title1',
url: 'chrome://foo/1.png',
website: 'http://foo1.com',
},
{
author: 'Author2',
title: 'Title2',
url: 'chrome://foo/2.png',
website: 'http://foo2.com',
},
];
cr.webUIListenerCallback('default-images-changed', fakeDefaultImages);
this.methodCalled('initialize');
},
/** @override */
selectDefaultImage: function(imageUrl) {
cr.webUIListenerCallback('selected-image-changed', imageUrl);
this.methodCalled('selectDefaultImage', [imageUrl]);
},
/** @override */
selectOldImage: function() {
cr.webUIListenerCallback('old-image-changed', 'fake-old-image.jpg');
this.methodCalled('selectOldImage');
},
/** @override */
selectProfileImage: function() {
cr.webUIListenerCallback('profile-image-changed',
'fake-profile-image-url',
true /* selected */);
this.methodCalled('selectProfileImage');
},
/** @override */
photoTaken: function() {
this.methodCalled('photoTaken');
},
/** @override */
chooseFile: function() {
this.methodCalled('chooseFile');
},
};
function registerChangePictureTests() {
suite('ChangePictureTests', function() {
var changePicture = null;
var browserProxy = null;
var settingsCamera = null;
var discardControlBar = null;
suiteSetup(function() {
loadTimeData.overrideValues({
profilePhoto: 'Fake Profile Photo description',
});
});
setup(function() {
browserProxy = new TestChangePictureBrowserProxy();
settings.ChangePictureBrowserProxyImpl.instance_ = browserProxy;
PolymerTest.clearBody();
changePicture = document.createElement('settings-change-picture');
document.body.appendChild(changePicture);
settingsCamera = changePicture.$$('settings-camera');
assertTrue(!!settingsCamera);
discardControlBar = changePicture.$.discardControlBar;
assertTrue(!!discardControlBar);
changePicture.currentRouteChanged(settings.Route.CHANGE_PICTURE);
return browserProxy.whenCalled('initialize').then(function() {
Polymer.dom.flush();
});
});
teardown(function() { changePicture.remove(); });
test('ChangePictureSelectCamera', function() {
var cameraIcon = changePicture.$.cameraImage;
assertTrue(!!cameraIcon);
// Force the camera to be absent, even if it's actually present.
cr.webUIListenerCallback('camera-presence-changed', false);
Polymer.dom.flush();
expectTrue(cameraIcon.hidden);
expectFalse(settingsCamera.cameraActive);
cr.webUIListenerCallback('camera-presence-changed', true);
Polymer.dom.flush();
expectFalse(cameraIcon.hidden);
expectFalse(settingsCamera.cameraActive);
MockInteractions.tap(cameraIcon);
Polymer.dom.flush();
expectFalse(cameraIcon.hidden);
expectTrue(settingsCamera.cameraActive);
expectEquals(ChangePictureSelectionTypes.CAMERA,
changePicture.selectedItem_.dataset.type);
expectTrue(discardControlBar.hidden);
// Ensure that the camera is deactivated if user navigates away.
changePicture.currentRouteChanged(settings.Route.BASIC);
expectFalse(settingsCamera.cameraActive);
});
test('ChangePictureProfileImage', function() {
var profileImage = changePicture.$.profileImage;
assertTrue(!!profileImage);
expectEquals(undefined, changePicture.selectedItem_);
MockInteractions.tap(profileImage);
return browserProxy.whenCalled('selectProfileImage').then(function() {
Polymer.dom.flush();
expectEquals(ChangePictureSelectionTypes.PROFILE,
changePicture.selectedItem_.dataset.type);
expectFalse(settingsCamera.cameraActive);
expectTrue(discardControlBar.hidden);
// Ensure that the selection is restored after navigating away and
// then back to the subpage.
changePicture.currentRouteChanged(settings.Route.BASIC);
changePicture.currentRouteChanged(settings.Route.CHANGE_PICTURE);
expectEquals(ChangePictureSelectionTypes.PROFILE,
changePicture.selectedItem_.dataset.type);
});
});
test('ChangePictureOldImage', function() {
// By default there is no old image and the element is hidden.
var oldImage = changePicture.$.oldImage;
assertTrue(!!oldImage);
assertTrue(oldImage.hidden);
cr.webUIListenerCallback('old-image-changed', 'fake-old-image.jpg');
Polymer.dom.flush();
// Expect the old image to be selected once an old image is sent via
// the native interface.
expectEquals(ChangePictureSelectionTypes.OLD,
changePicture.selectedItem_.dataset.type);
expectFalse(oldImage.hidden);
expectFalse(settingsCamera.cameraActive);
expectFalse(discardControlBar.hidden);
});
test('ChangePictureSelectFirstDefaultImage', function() {
var firstDefaultImage = changePicture.$$('img[data-type="default"]');
assertTrue(!!firstDefaultImage);
MockInteractions.tap(firstDefaultImage);
return browserProxy.whenCalled('selectDefaultImage').then(
function(args) {
expectEquals('chrome://foo/1.png', args[0]);
Polymer.dom.flush();
expectEquals(ChangePictureSelectionTypes.DEFAULT,
changePicture.selectedItem_.dataset.type);
expectEquals(firstDefaultImage, changePicture.selectedItem_);
expectFalse(settingsCamera.cameraActive);
expectTrue(discardControlBar.hidden);
// Now verify that arrow keys actually select the new image.
browserProxy.resetResolver('selectDefaultImage');
MockInteractions.pressAndReleaseKeyOn(
changePicture.selectedItem_, 39 /* right */);
return browserProxy.whenCalled('selectDefaultImage');
}).then(function(args) {
expectEquals('chrome://foo/2.png', args[0]);
});
});
test('ChangePictureRestoreImageAfterDiscard', function() {
var firstDefaultImage = changePicture.$$('img[data-type="default"]');
assertTrue(!!firstDefaultImage);
var discardOldImage = changePicture.$.discardOldImage;
assertTrue(!!discardOldImage);
MockInteractions.tap(firstDefaultImage);
return browserProxy.whenCalled('selectDefaultImage').then(function() {
Polymer.dom.flush();
expectEquals(firstDefaultImage, changePicture.selectedItem_);
cr.webUIListenerCallback('old-image-changed', 'fake-old-image.jpg');
Polymer.dom.flush();
expectEquals(ChangePictureSelectionTypes.OLD,
changePicture.selectedItem_.dataset.type);
MockInteractions.tap(discardOldImage);
Polymer.dom.flush();
expectEquals(firstDefaultImage, changePicture.selectedItem_);
});
});
});
}
return {
registerTests: function() {
registerChangePictureTests();
},
};
});