OLD | NEW |
1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 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 cr.define('settings_about_page', function() { | 5 cr.define('settings_about_page', function() { |
6 /** | 6 /** |
7 * @constructor | 7 * @constructor |
8 * @implements {settings.AboutPageBrowserProxy} | 8 * @implements {settings.AboutPageBrowserProxy} |
9 * @extends {settings.TestBrowserProxy} | 9 * @extends {settings.TestBrowserProxy} |
10 */ | 10 */ |
11 var TestAboutPageBrowserProxy = function() { | 11 var TestAboutPageBrowserProxy = function() { |
12 settings.TestBrowserProxy.call(this, [ | 12 settings.TestBrowserProxy.call(this, [ |
13 'pageReady', | 13 'pageReady', |
14 'refreshUpdateStatus', | 14 'refreshUpdateStatus', |
15 'openHelpPage', | 15 'openHelpPage', |
16 'openFeedbackDialog', | 16 'openFeedbackDialog', |
17 'getCurrentChannel', | 17 'getCurrentChannel', |
18 'getTargetChannel', | 18 'getTargetChannel', |
19 'getVersionInfo', | 19 'getVersionInfo', |
20 ]); | 20 ]); |
21 | 21 |
22 /** @type {!VersionInfo} */ | 22 /** @type {!VersionInfo} */ |
23 this.versionInfo_ = { | 23 this.versionInfo_ = { |
24 arcVersion: '', | 24 arcVersion: '', |
25 osFirmware: '', | 25 osFirmware: '', |
26 osVersion: '', | 26 osVersion: '', |
27 }; | 27 }; |
| 28 |
| 29 /** @private {!UpdateStatus} */ |
| 30 this.updateStatus_ = UpdateStatus.UPDATED; |
| 31 |
| 32 if (cr.isChromeOS) { |
| 33 /** @private {!BrowserChannel} */ |
| 34 this.currentChannel_ = BrowserChannel.BETA; |
| 35 |
| 36 /** @private {!BrowserChannel} */ |
| 37 this.targetChannel_ = BrowserChannel.BETA; |
| 38 } |
28 }; | 39 }; |
29 | 40 |
30 TestAboutPageBrowserProxy.prototype = { | 41 TestAboutPageBrowserProxy.prototype = { |
31 __proto__: settings.TestBrowserProxy.prototype, | 42 __proto__: settings.TestBrowserProxy.prototype, |
32 | 43 |
33 /** @param {!VersionInfo} */ | 44 /** @param {!VersionInfo} */ |
34 setVersionInfo: function(versionInfo) { | 45 setVersionInfo: function(versionInfo) { |
35 this.versionInfo_ = versionInfo; | 46 this.versionInfo_ = versionInfo; |
36 }, | 47 }, |
37 | 48 |
| 49 /** @param {!UpdateStatus} updateStatus */ |
| 50 setUpdateStatus: function(updateStatus) { |
| 51 this.updateStatus_ = updateStatus; |
| 52 }, |
| 53 |
38 /** @override */ | 54 /** @override */ |
39 pageReady: function() { | 55 pageReady: function() { |
40 this.methodCalled('pageReady'); | 56 this.methodCalled('pageReady'); |
41 }, | 57 }, |
42 | 58 |
43 /** @override */ | 59 /** @override */ |
44 refreshUpdateStatus: function() { | 60 refreshUpdateStatus: function() { |
| 61 cr.webUIListenerCallback( |
| 62 'update-status-changed', {status: this.updateStatus_}); |
45 this.methodCalled('refreshUpdateStatus'); | 63 this.methodCalled('refreshUpdateStatus'); |
46 }, | 64 }, |
47 | 65 |
48 /** @override */ | 66 /** @override */ |
49 getCurrentChannel: function() { | |
50 this.methodCalled('getCurrentChannel'); | |
51 return Promise.resolve(BrowserChannel.BETA); | |
52 }, | |
53 | |
54 /** @override */ | |
55 getTargetChannel: function() { | |
56 this.methodCalled('getTargetChannel'); | |
57 return Promise.resolve(BrowserChannel.BETA); | |
58 }, | |
59 | |
60 /** @override */ | |
61 getVersionInfo: function() { | |
62 this.methodCalled('getVersionInfo'); | |
63 return Promise.resolve(this.versionInfo_); | |
64 }, | |
65 | |
66 /** @override */ | |
67 openFeedbackDialog: function() { | 67 openFeedbackDialog: function() { |
68 this.methodCalled('openFeedbackDialog'); | 68 this.methodCalled('openFeedbackDialog'); |
69 }, | 69 }, |
70 | 70 |
71 /** @override */ | 71 /** @override */ |
72 openHelpPage: function() { | 72 openHelpPage: function() { |
73 this.methodCalled('openHelpPage'); | 73 this.methodCalled('openHelpPage'); |
74 }, | 74 }, |
75 }; | 75 }; |
76 | 76 |
| 77 if (cr.isChromeOS) { |
| 78 /** |
| 79 * @param {!BrowserChannel} current |
| 80 * @param {!BrowserChannel} target |
| 81 */ |
| 82 TestAboutPageBrowserProxy.prototype.setChannels = function( |
| 83 current, target) { |
| 84 this.currentChannel_ = current; |
| 85 this.targetChannel_ = target; |
| 86 }; |
| 87 |
| 88 /** @override */ |
| 89 TestAboutPageBrowserProxy.prototype.getCurrentChannel = function() { |
| 90 this.methodCalled('getCurrentChannel'); |
| 91 return Promise.resolve(this.currentChannel_); |
| 92 }; |
| 93 |
| 94 /** @override */ |
| 95 TestAboutPageBrowserProxy.prototype.getTargetChannel = function() { |
| 96 this.methodCalled('getTargetChannel'); |
| 97 return Promise.resolve(this.targetChannel_); |
| 98 }; |
| 99 |
| 100 /** @override */ |
| 101 TestAboutPageBrowserProxy.prototype.getVersionInfo = function() { |
| 102 this.methodCalled('getVersionInfo'); |
| 103 return Promise.resolve(this.versionInfo_); |
| 104 }; |
| 105 } |
| 106 |
| 107 |
77 function registerAboutPageTests() { | 108 function registerAboutPageTests() { |
| 109 /** @param {!UpdateStatus} status */ |
| 110 function fireStatusChanged(status) { |
| 111 cr.webUIListenerCallback('update-status-changed', {status: status}); |
| 112 } |
| 113 |
78 suite('AboutPageTest', function() { | 114 suite('AboutPageTest', function() { |
79 var page = null; | 115 var page = null; |
80 var browserProxy = null; | 116 var browserProxy = null; |
81 | 117 |
82 setup(function() { | 118 setup(function() { |
83 browserProxy = new TestAboutPageBrowserProxy(); | 119 browserProxy = new TestAboutPageBrowserProxy(); |
84 settings.AboutPageBrowserProxyImpl.instance_ = browserProxy; | 120 settings.AboutPageBrowserProxyImpl.instance_ = browserProxy; |
| 121 return initNewPage(); |
| 122 }); |
| 123 |
| 124 /** @return {!Promise} */ |
| 125 function initNewPage() { |
| 126 browserProxy.resetResolver('refreshUpdateStatus'); |
85 PolymerTest.clearBody(); | 127 PolymerTest.clearBody(); |
86 page = document.createElement('settings-about-page'); | 128 page = document.createElement('settings-about-page'); |
87 document.body.appendChild(page); | 129 document.body.appendChild(page); |
88 return browserProxy.whenCalled('refreshUpdateStatus'); | 130 return browserProxy.whenCalled('refreshUpdateStatus'); |
89 }); | 131 } |
90 | 132 |
91 /** | 133 /** |
92 * Test that the status icon updates according to incoming | 134 * Test that the status icon updates according to incoming |
93 * 'update-status-chanhed' events. | 135 * 'update-status-changed' events. |
94 */ | 136 */ |
95 test('IconUpdates', function() { | 137 test('IconUpdates', function() { |
96 function fireStatusChanged(status) { | |
97 cr.webUIListenerCallback('update-status-changed', { | |
98 status: status, message: '', progress: 0, | |
99 }); | |
100 } | |
101 | |
102 var SPINNER_ICON = 'chrome://resources/images/throbber_small.svg'; | 138 var SPINNER_ICON = 'chrome://resources/images/throbber_small.svg'; |
103 | 139 |
104 var icon = page.$$('iron-icon'); | 140 var icon = page.$$('iron-icon'); |
105 assertTrue(!!icon); | 141 assertTrue(!!icon); |
106 assertEquals(null, icon.getAttribute('icon')); | |
107 | 142 |
108 fireStatusChanged(UpdateStatus.CHECKING); | 143 fireStatusChanged(UpdateStatus.CHECKING); |
109 assertEquals(SPINNER_ICON, icon.src); | 144 assertEquals(SPINNER_ICON, icon.src); |
110 assertEquals(null, icon.getAttribute('icon')); | 145 assertEquals(null, icon.getAttribute('icon')); |
111 | 146 |
112 fireStatusChanged(UpdateStatus.UPDATING); | 147 fireStatusChanged(UpdateStatus.UPDATING); |
113 assertEquals(SPINNER_ICON, icon.src); | 148 assertEquals(SPINNER_ICON, icon.src); |
114 assertEquals(null, icon.getAttribute('icon')); | 149 assertEquals(null, icon.getAttribute('icon')); |
115 | 150 |
116 fireStatusChanged(UpdateStatus.NEARLY_UPDATED); | 151 fireStatusChanged(UpdateStatus.NEARLY_UPDATED); |
(...skipping 10 matching lines...) Expand all Loading... |
127 | 162 |
128 fireStatusChanged(UpdateStatus.FAILED); | 163 fireStatusChanged(UpdateStatus.FAILED); |
129 assertEquals(null, icon.src); | 164 assertEquals(null, icon.src); |
130 assertEquals('settings:error', icon.icon); | 165 assertEquals('settings:error', icon.icon); |
131 | 166 |
132 fireStatusChanged(UpdateStatus.DISABLED); | 167 fireStatusChanged(UpdateStatus.DISABLED); |
133 assertEquals(null, icon.src); | 168 assertEquals(null, icon.src); |
134 assertEquals(null, icon.getAttribute('icon')); | 169 assertEquals(null, icon.getAttribute('icon')); |
135 }); | 170 }); |
136 | 171 |
| 172 if (cr.isChromeOS) { |
| 173 /** |
| 174 * Test that all buttons update according to incoming |
| 175 * 'update-status-changed' events for the case where target and current |
| 176 * channel are the same. |
| 177 */ |
| 178 test('ButtonsUpdate_SameChannel', function() { |
| 179 var relaunch = page.$.relaunch; |
| 180 var checkForUpdates = page.$.checkForUpdates; |
| 181 var relaunchAndPowerwash = page.$.relaunchAndPowerwash; |
| 182 |
| 183 assertTrue(!!relaunch); |
| 184 assertTrue(!!relaunchAndPowerwash); |
| 185 assertTrue(!!checkForUpdates); |
| 186 |
| 187 function assertAllHidden() { |
| 188 assertTrue(checkForUpdates.hidden); |
| 189 assertTrue(relaunch.hidden); |
| 190 assertTrue(relaunchAndPowerwash.hidden); |
| 191 } |
| 192 |
| 193 // Check that |UPDATED| status is ignored if the user has not |
| 194 // explicitly checked for updates yet. |
| 195 fireStatusChanged(UpdateStatus.UPDATED); |
| 196 assertFalse(checkForUpdates.hidden); |
| 197 assertTrue(relaunch.hidden); |
| 198 assertTrue(relaunchAndPowerwash.hidden); |
| 199 |
| 200 fireStatusChanged(UpdateStatus.CHECKING); |
| 201 assertAllHidden(); |
| 202 |
| 203 fireStatusChanged(UpdateStatus.UPDATING); |
| 204 assertAllHidden(); |
| 205 |
| 206 fireStatusChanged(UpdateStatus.NEARLY_UPDATED); |
| 207 assertTrue(checkForUpdates.hidden); |
| 208 assertFalse(relaunch.hidden); |
| 209 assertTrue(relaunchAndPowerwash.hidden); |
| 210 |
| 211 fireStatusChanged(UpdateStatus.UPDATED); |
| 212 assertAllHidden(); |
| 213 |
| 214 fireStatusChanged(UpdateStatus.FAILED); |
| 215 assertFalse(checkForUpdates.hidden); |
| 216 assertTrue(relaunch.hidden); |
| 217 assertTrue(relaunchAndPowerwash.hidden); |
| 218 |
| 219 fireStatusChanged(UpdateStatus.DISABLED); |
| 220 assertAllHidden(); |
| 221 |
| 222 fireStatusChanged(UpdateStatus.DISABLED_BY_ADMIN); |
| 223 assertAllHidden(); |
| 224 }); |
| 225 |
| 226 /** |
| 227 * Test that buttons update according to incoming |
| 228 * 'update-status-changed' events for the case where the target channel |
| 229 * is more stable than current channel. |
| 230 */ |
| 231 test('ButtonsUpdate_BetaToStable', function() { |
| 232 browserProxy.setChannels(BrowserChannel.BETA, BrowserChannel.STABLE); |
| 233 browserProxy.setUpdateStatus(UpdateStatus.NEARLY_UPDATED); |
| 234 |
| 235 return initNewPage().then(function() { |
| 236 assertTrue(!!page.$.relaunch); |
| 237 assertTrue(!!page.$.relaunchAndPowerwash); |
| 238 |
| 239 assertTrue(page.$.relaunch.hidden); |
| 240 assertFalse(page.$.relaunchAndPowerwash.hidden); |
| 241 }); |
| 242 }); |
| 243 |
| 244 /** |
| 245 * Test that buttons update according to incoming |
| 246 * 'update-status-changed' events for the case where the target channel |
| 247 * is less stable than current channel. |
| 248 */ |
| 249 test('ButtonsUpdate_StableToBeta', function() { |
| 250 browserProxy.setChannels(BrowserChannel.STABLE, BrowserChannel.BETA); |
| 251 browserProxy.setUpdateStatus(UpdateStatus.NEARLY_UPDATED); |
| 252 |
| 253 return initNewPage().then(function() { |
| 254 assertTrue(!!page.$.relaunch); |
| 255 assertTrue(!!page.$.relaunchAndPowerwash); |
| 256 |
| 257 assertFalse(page.$.relaunch.hidden); |
| 258 assertTrue(page.$.relaunchAndPowerwash.hidden); |
| 259 }); |
| 260 }); |
| 261 } |
| 262 |
| 263 if (!cr.isChromeOS) { |
| 264 /* |
| 265 * Test that the "Check for updates" button updates according to |
| 266 * incoming 'update-status-changed' events. |
| 267 */ |
| 268 test('ButtonsUpdate', function() { |
| 269 var relaunch = page.$.relaunch; |
| 270 assertTrue(!!relaunch); |
| 271 |
| 272 fireStatusChanged(UpdateStatus.CHECKING); |
| 273 assertTrue(relaunch.hidden); |
| 274 |
| 275 fireStatusChanged(UpdateStatus.UPDATING); |
| 276 assertTrue(relaunch.hidden); |
| 277 |
| 278 fireStatusChanged(UpdateStatus.NEARLY_UPDATED); |
| 279 assertFalse(relaunch.hidden); |
| 280 |
| 281 fireStatusChanged(UpdateStatus.UPDATED); |
| 282 assertTrue(relaunch.hidden); |
| 283 |
| 284 fireStatusChanged(UpdateStatus.FAILED); |
| 285 assertTrue(relaunch.hidden); |
| 286 |
| 287 fireStatusChanged(UpdateStatus.DISABLED); |
| 288 assertTrue(relaunch.hidden); |
| 289 |
| 290 fireStatusChanged(UpdateStatus.DISABLED_BY_ADMIN); |
| 291 assertTrue(relaunch.hidden); |
| 292 }); |
| 293 } |
| 294 |
137 test('GetHelp', function() { | 295 test('GetHelp', function() { |
138 assertTrue(!!page.$.help); | 296 assertTrue(!!page.$.help); |
139 MockInteractions.tap(page.$.help); | 297 MockInteractions.tap(page.$.help); |
140 return browserProxy.whenCalled('openHelpPage'); | 298 return browserProxy.whenCalled('openHelpPage'); |
141 }); | 299 }); |
142 }); | 300 }); |
143 } | 301 } |
144 | 302 |
145 function registerOfficialBuildTests() { | 303 function registerOfficialBuildTests() { |
146 suite('AboutPageTest_OfficialBuild', function() { | 304 suite('AboutPageTest_OfficialBuild', function() { |
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
205 return { | 363 return { |
206 registerTests: function() { | 364 registerTests: function() { |
207 if (cr.isChromeOS) { | 365 if (cr.isChromeOS) { |
208 registerDetailedBuildInfoTests(); | 366 registerDetailedBuildInfoTests(); |
209 } | 367 } |
210 registerAboutPageTests(); | 368 registerAboutPageTests(); |
211 }, | 369 }, |
212 registerOfficialBuildTests: registerOfficialBuildTests, | 370 registerOfficialBuildTests: registerOfficialBuildTests, |
213 }; | 371 }; |
214 }); | 372 }); |
OLD | NEW |