OLD | NEW |
1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 /** @fileoverview Suite of tests for settings-change-picture. */ | 5 /** @fileoverview Suite of tests for settings-change-picture. */ |
6 | 6 |
7 GEN_INCLUDE(['settings_page_browsertest.js']); | 7 GEN_INCLUDE(['settings_page_browsertest.js']); |
8 | 8 |
9 /** | 9 /** |
10 * @constructor | 10 * @constructor |
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
48 var basic = this.getPage('basic'); | 48 var basic = this.getPage('basic'); |
49 assertTrue(!!basic); | 49 assertTrue(!!basic); |
50 var peopleSection = this.getSection(basic, 'people'); | 50 var peopleSection = this.getSection(basic, 'people'); |
51 assertTrue(!!peopleSection); | 51 assertTrue(!!peopleSection); |
52 var peoplePage = peopleSection.querySelector('settings-people-page'); | 52 var peoplePage = peopleSection.querySelector('settings-people-page'); |
53 assertTrue(!!peoplePage); | 53 assertTrue(!!peoplePage); |
54 var changePicture = peoplePage.$$('settings-change-picture'); | 54 var changePicture = peoplePage.$$('settings-change-picture'); |
55 assertTrue(!!changePicture); | 55 assertTrue(!!changePicture); |
56 | 56 |
57 /** | 57 /** |
58 * Registers a callback to be called once when the selected image URL changes. | 58 * Returns a promise that resolves once the selected item is updated. |
59 * @param {!function()} callback | 59 * @param {function()} action is executed after the listener is set up. |
| 60 * @return {!Promise} a Promise fulfilled when the selected item changes. |
60 */ | 61 */ |
61 function whenSelectedImageUrlChanged() { | 62 function runAndResolveWhenSelectedItemChanged(action) { |
62 return new Promise(function(resolve, reject) { | 63 return new Promise(function(resolve, reject) { |
63 var handler = function() { | 64 var handler = function() { |
64 changePicture.removeEventListener('selected-image-url_-changed', | 65 changePicture.removeEventListener('selected-item_-changed', handler); |
65 handler); | |
66 resolve(); | 66 resolve(); |
67 }; | 67 }; |
68 changePicture.addEventListener('selected-image-url_-changed', handler); | 68 changePicture.addEventListener('selected-item_-changed', handler); |
| 69 action(); |
69 }); | 70 }); |
70 } | 71 } |
71 | 72 |
72 suite('SettingsChangePicturePage', function() { | 73 suite('SettingsChangePicturePage', function() { |
73 setup(function() { | 74 setup(function() { |
74 // Reset the selected image to nothing. | 75 // Reset the selected image to nothing. |
75 changePicture.selectedImageUrl_ = ''; | 76 changePicture.$.selector.selected = -1; |
76 }); | 77 }); |
77 | 78 |
78 test('select camera image', function() { | 79 test('select camera image', function() { |
79 var cameraImage = changePicture.$$('#camera-image'); | 80 var cameraImage = changePicture.$$('img[data-type="camera"]'); |
80 assertTrue(!!cameraImage); | 81 assertTrue(!!cameraImage); |
81 | 82 |
82 assertFalse(changePicture.cameraActive_); | |
83 expectFalse(changePicture.$.previewImage.hidden); | 83 expectFalse(changePicture.$.previewImage.hidden); |
84 | 84 |
85 MockInteractions.tap(cameraImage); | 85 MockInteractions.tap(cameraImage); |
86 | 86 |
87 Polymer.dom.flush(); | 87 Polymer.dom.flush(); |
88 | 88 |
89 expectTrue(changePicture.cameraActive_); | 89 expectEquals('camera', changePicture.selectedItem_.dataset.type); |
90 expectTrue(changePicture.$.previewImage.hidden); | 90 expectTrue(changePicture.$.previewImage.hidden); |
91 }); | 91 }); |
92 | 92 |
93 test('select profile image', function() { | 93 test('select profile image', function() { |
94 var profileImage = changePicture.$$('#profile-image'); | 94 var profileImage = changePicture.$$('img[data-type="profile"]'); |
95 assertTrue(!!profileImage); | 95 assertTrue(!!profileImage); |
96 | 96 |
97 MockInteractions.tap(profileImage); | 97 return runAndResolveWhenSelectedItemChanged(function() { |
98 | 98 MockInteractions.tap(profileImage); |
99 return whenSelectedImageUrlChanged().then(function() { | 99 }).then(function() { |
100 expectEquals(changePicture.selectedImageUrl_, | |
101 changePicture.profileImageUrl_); | |
102 | |
103 Polymer.dom.flush(); | 100 Polymer.dom.flush(); |
104 expectTrue(profileImage.active); | 101 expectEquals('profile', changePicture.selectedItem_.dataset.type); |
105 expectFalse(changePicture.$.previewImage.hidden); | 102 expectFalse(changePicture.$.previewImage.hidden); |
106 }); | 103 }); |
107 }); | 104 }); |
108 | 105 |
109 test('select old images', function() { | 106 test('select old images', function() { |
110 // By default there is no old image. | 107 // By default there is no old image and the element is hidden. |
111 var oldImage = changePicture.$$('#old-image'); | 108 var oldImage = changePicture.$$('img[data-type="old"]'); |
112 assertFalse(!!oldImage); | 109 assertTrue(!!oldImage); |
| 110 assertTrue(oldImage.hidden); |
113 | 111 |
114 // The promise must start listening for the property change before | 112 return runAndResolveWhenSelectedItemChanged(function() { |
115 // we make the fake API call. | 113 settings.ChangePicturePage.receiveOldImage('fake-old-image.jpg'); |
116 var promise = whenSelectedImageUrlChanged(); | 114 }).then(function() { |
| 115 Polymer.dom.flush(); |
117 | 116 |
118 settings.ChangePicturePage.receiveOldImage('fake-old-image.jpg'); | |
119 | |
120 return promise.then(function() { | |
121 // Expect the old image to be selected once an old image is sent via | 117 // Expect the old image to be selected once an old image is sent via |
122 // the native interface. | 118 // the native interface. |
123 expectEquals(changePicture.selectedImageUrl_, | 119 expectEquals('old', changePicture.selectedItem_.dataset.type); |
124 changePicture.oldImageUrl_); | 120 expectFalse(oldImage.hidden); |
125 | |
126 Polymer.dom.flush(); | |
127 var oldImage = changePicture.$$('#old-image'); | |
128 assertTrue(!!oldImage); | |
129 expectTrue(oldImage.active); | |
130 expectFalse(changePicture.$.previewImage.hidden); | 121 expectFalse(changePicture.$.previewImage.hidden); |
131 }); | 122 }); |
132 }); | 123 }); |
133 | 124 |
134 test('select first default image', function() { | 125 test('select first default image', function() { |
135 var firstDefaultImage = changePicture.$$('.default-image'); | 126 var firstDefaultImage = changePicture.$$('img[data-type="default"]'); |
136 assertTrue(!!firstDefaultImage); | 127 assertTrue(!!firstDefaultImage); |
137 | 128 |
138 MockInteractions.tap(firstDefaultImage); | 129 return runAndResolveWhenSelectedItemChanged(function() { |
139 | 130 MockInteractions.tap(firstDefaultImage); |
140 return whenSelectedImageUrlChanged().then(function() { | 131 }).then(function() { |
141 // Expect the first default image to be selected. | |
142 expectEquals(changePicture.selectedImageUrl_, | |
143 changePicture.defaultImages_[0].url); | |
144 | |
145 Polymer.dom.flush(); | 132 Polymer.dom.flush(); |
146 expectTrue(firstDefaultImage.active); | 133 expectEquals('default', changePicture.selectedItem_.dataset.type); |
| 134 expectEquals(firstDefaultImage, changePicture.selectedItem_); |
147 expectFalse(changePicture.$.previewImage.hidden); | 135 expectFalse(changePicture.$.previewImage.hidden); |
148 }); | 136 }); |
149 }); | 137 }); |
150 }); | 138 }); |
151 | 139 |
152 // Run all registered tests. | 140 // Run all registered tests. |
153 mocha.run(); | 141 mocha.run(); |
154 }); | 142 }); |
OLD | NEW |