Chromium Code Reviews| 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 Runs the Polymer Password Settings tests. */ | 5 /** @fileoverview Runs the Polymer Password Settings tests. */ |
| 6 | 6 |
| 7 /** @const {string} Path to root from chrome/test/data/webui/settings/. */ | 7 /** @const {string} Path to root from chrome/test/data/webui/settings/. */ |
| 8 var ROOT_PATH = '../../../../../'; | 8 var ROOT_PATH = '../../../../../'; |
| 9 | 9 |
| 10 // Polymer BrowserTest fixture. | 10 // Polymer BrowserTest fixture. |
| (...skipping 17 matching lines...) Expand all Loading... | |
| 28 browsePreload: | 28 browsePreload: |
| 29 'chrome://md-settings/passwords_and_forms_page/passwords_section.html', | 29 'chrome://md-settings/passwords_and_forms_page/passwords_section.html', |
| 30 | 30 |
| 31 /** @override */ | 31 /** @override */ |
| 32 extraLibraries: PolymerTest.getLibraries(ROOT_PATH), | 32 extraLibraries: PolymerTest.getLibraries(ROOT_PATH), |
| 33 | 33 |
| 34 /** @override */ | 34 /** @override */ |
| 35 setUp: function() { | 35 setUp: function() { |
| 36 PolymerTest.prototype.setUp.call(this); | 36 PolymerTest.prototype.setUp.call(this); |
| 37 | 37 |
| 38 // Override the PasswordManagerImpl for testing. | |
| 39 this.passwordManager = new TestPasswordManager(); | |
|
dpapad
2017/01/28 00:10:30
Some drive by questions: Can we use the Mocha suit
hcarmona
2017/02/14 00:59:38
Awesome!
| |
| 40 PasswordManagerImpl.instance_ = this.passwordManager; | |
| 41 | |
| 38 // Test is run on an individual element that won't have a page language. | 42 // Test is run on an individual element that won't have a page language. |
| 39 this.accessibilityAuditConfig.auditRulesToIgnore.push('humanLangMissing'); | 43 this.accessibilityAuditConfig.auditRulesToIgnore.push('humanLangMissing'); |
| 40 }, | 44 }, |
| 41 | 45 |
| 46 tearDown: function() { | |
| 47 PasswordManagerImpl.instance_ = null; | |
|
hcarmona
2017/01/26 21:34:47
Moved this here to clean up after the test.
Dan Beam
2017/01/27 01:11:32
we're just re-creating on setup, why does this mat
hcarmona
2017/01/27 18:28:16
PasswordManagerImpl.instance_ is global. If 2 test
Dan Beam
2017/01/27 23:55:22
i mean, you can leave this in, but nobody else doe
hcarmona
2017/02/14 00:59:38
Going w/ dpapad@'s suggestion for Mocha suite setu
| |
| 48 }, | |
| 49 | |
| 42 /** | 50 /** |
| 43 * Helper method that validates a that elements in the password list match | 51 * Helper method that validates a that elements in the password list match |
| 44 * the expected data. | 52 * the expected data. |
| 45 * @param {!Element} listElement The iron-list element that will be checked. | 53 * @param {!Element} listElement The iron-list element that will be checked. |
| 46 * @param {!Array<!chrome.passwordsPrivate.PasswordUiEntry>} passwordList The | 54 * @param {!Array<!chrome.passwordsPrivate.PasswordUiEntry>} passwordList The |
| 47 * expected data. | 55 * expected data. |
| 48 * @private | 56 * @private |
| 49 */ | 57 */ |
| 50 validatePasswordList: function(listElement, passwordList) { | 58 validatePasswordList: function(listElement, passwordList) { |
|
dpapad
2017/01/28 00:10:30
A lot of the methods on SettingsPasswordSectionBro
| |
| 51 assertEquals(passwordList.length, listElement.items.length); | 59 assertEquals(passwordList.length, listElement.items.length); |
| 52 if (passwordList.length > 0) { | 60 if (passwordList.length > 0) { |
| 53 // The first child is a template, skip and get the real 'first child'. | 61 // The first child is a template, skip and get the real 'first child'. |
| 54 var node = Polymer.dom(listElement).children[1]; | 62 var node = Polymer.dom(listElement).children[1]; |
| 55 assert(node); | 63 assert(node); |
| 56 var passwordInfo = passwordList[0]; | 64 var passwordInfo = passwordList[0]; |
| 57 assertEquals(passwordInfo.loginPair.originUrl, | 65 assertEquals(passwordInfo.loginPair.originUrl, |
| 58 node.querySelector('#originUrl').textContent.trim()); | 66 node.querySelector('#originUrl').textContent.trim()); |
| 59 assertEquals(passwordInfo.linkUrl, | 67 assertEquals(passwordInfo.linkUrl, |
| 60 node.querySelector('#originUrl').href); | 68 node.querySelector('#originUrl').href); |
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 99 }, | 107 }, |
| 100 | 108 |
| 101 /** | 109 /** |
| 102 * Helper method used to create a password section for the given lists. | 110 * Helper method used to create a password section for the given lists. |
| 103 * @param {!Array<!chrome.passwordsPrivate.PasswordUiEntry>} passwordList | 111 * @param {!Array<!chrome.passwordsPrivate.PasswordUiEntry>} passwordList |
| 104 * @param {!Array<!chrome.passwordsPrivate.ExceptionPair>} exceptionList | 112 * @param {!Array<!chrome.passwordsPrivate.ExceptionPair>} exceptionList |
| 105 * @return {!Object} | 113 * @return {!Object} |
| 106 * @private | 114 * @private |
| 107 */ | 115 */ |
| 108 createPasswordsSection_: function(passwordList, exceptionList) { | 116 createPasswordsSection_: function(passwordList, exceptionList) { |
| 117 // Override the PasswordManager data for testing. | |
| 118 this.passwordManager.data.passwords = passwordList; | |
| 119 this.passwordManager.data.exceptions = exceptionList; | |
| 120 | |
| 109 // Create a passwords-section to use for testing. | 121 // Create a passwords-section to use for testing. |
| 110 var passwordsSection = document.createElement('passwords-section'); | 122 var passwordsSection = document.createElement('passwords-section'); |
| 111 passwordsSection.savedPasswords = passwordList; | |
| 112 passwordsSection.passwordExceptions = exceptionList; | |
| 113 document.body.appendChild(passwordsSection); | 123 document.body.appendChild(passwordsSection); |
| 114 this.flushPasswordSection_(passwordsSection); | 124 this.flushPasswordSection_(passwordsSection); |
| 115 return passwordsSection; | 125 return passwordsSection; |
| 116 }, | 126 }, |
| 117 | 127 |
| 118 /** | 128 /** |
| 119 * Helper method used to create a password editing dialog. | 129 * Helper method used to create a password editing dialog. |
| 120 * @param {!chrome.passwordsPrivate.PasswordUiEntry} passwordItem | 130 * @param {!chrome.passwordsPrivate.PasswordUiEntry} passwordItem |
| 121 * @return {!Object} | 131 * @return {!Object} |
| 122 * @private | 132 * @private |
| (...skipping 117 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 240 FakeDataMaker.passwordEntry('six', 'one', 6), | 250 FakeDataMaker.passwordEntry('six', 'one', 6), |
| 241 ]; | 251 ]; |
| 242 | 252 |
| 243 var passwordsSection = self.createPasswordsSection_(passwordList, []); | 253 var passwordsSection = self.createPasswordsSection_(passwordList, []); |
| 244 | 254 |
| 245 // The first child is a template, skip and get the real 'first child'. | 255 // The first child is a template, skip and get the real 'first child'. |
| 246 var firstNode = Polymer.dom(passwordsSection.$.passwordList).children[1]; | 256 var firstNode = Polymer.dom(passwordsSection.$.passwordList).children[1]; |
| 247 assert(firstNode); | 257 assert(firstNode); |
| 248 var firstPassword = passwordList[0]; | 258 var firstPassword = passwordList[0]; |
| 249 | 259 |
| 250 // Listen for the remove event. If this event isn't received, the test | 260 self.passwordManager.onRemoveSavedPassword = function(detail) { |
|
dpapad
2017/01/28 00:10:30
The PasswordManager class seems to be just like an
| |
| 251 // will time out and fail. | |
| 252 passwordsSection.addEventListener('remove-saved-password', | |
| 253 function(event) { | |
| 254 // Verify that the event matches the expected value. | 261 // Verify that the event matches the expected value. |
| 255 assertEquals(firstPassword.loginPair.originUrl, | 262 assertEquals(firstPassword.loginPair.originUrl, detail.originUrl); |
| 256 event.detail.originUrl); | 263 assertEquals(firstPassword.loginPair.username, detail.username); |
| 257 assertEquals(firstPassword.loginPair.username, | 264 |
| 258 event.detail.username); | 265 // Clean up after self. |
| 266 self.passwordManager.onRemoveSavedPassword = null; | |
| 267 | |
| 259 done(); | 268 done(); |
| 260 }); | 269 }; |
| 261 | 270 |
| 262 // Click the remove button on the first password. | 271 // Click the remove button on the first password. |
| 263 MockInteractions.tap(firstNode.querySelector('#passwordMenu')); | 272 MockInteractions.tap(firstNode.querySelector('#passwordMenu')); |
| 264 MockInteractions.tap(passwordsSection.$.menuRemovePassword); | 273 MockInteractions.tap(passwordsSection.$.menuRemovePassword); |
| 265 }); | 274 }); |
| 266 | 275 |
| 267 test('verifyFilterPasswords', function() { | 276 test('verifyFilterPasswords', function() { |
| 268 var passwordList = [ | 277 var passwordList = [ |
| 269 FakeDataMaker.passwordEntry('one.com', 'show', 5), | 278 FakeDataMaker.passwordEntry('one.com', 'show', 5), |
| 270 FakeDataMaker.passwordEntry('two.com', 'shower', 3), | 279 FakeDataMaker.passwordEntry('two.com', 'shower', 3), |
| (...skipping 119 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 390 self.getDomRepeatChildren_(passwordsSection.$.passwordExceptionsList); | 399 self.getDomRepeatChildren_(passwordsSection.$.passwordExceptionsList); |
| 391 | 400 |
| 392 // The index of the button currently being checked. | 401 // The index of the button currently being checked. |
| 393 var index = 0; | 402 var index = 0; |
| 394 | 403 |
| 395 var clickRemoveButton = function() { | 404 var clickRemoveButton = function() { |
| 396 MockInteractions.tap( | 405 MockInteractions.tap( |
| 397 exceptions[index].querySelector('#removeExceptionButton')); | 406 exceptions[index].querySelector('#removeExceptionButton')); |
| 398 }; | 407 }; |
| 399 | 408 |
| 400 // Listen for the remove event. If this event isn't received, the test | 409 self.passwordManager.onRemoveException = function(detail) { |
| 401 // will time out and fail. | |
| 402 passwordsSection.addEventListener('remove-password-exception', | |
|
Dan Beam
2017/01/27 01:11:32
why can't we just use events like we were before?
hcarmona
2017/01/27 18:28:16
The event was fired so the parent element could ha
| |
| 403 function(event) { | |
| 404 // Verify that the event matches the expected value. | 410 // Verify that the event matches the expected value. |
| 405 assertTrue(index < exceptionList.length); | 411 assertTrue(index < exceptionList.length); |
| 406 assertEquals(exceptionList[index].exceptionUrl, event.detail); | 412 assertEquals(exceptionList[index].exceptionUrl, detail); |
| 407 | 413 |
| 408 if (++index < exceptionList.length) | 414 if (++index < exceptionList.length) { |
| 409 clickRemoveButton(); // Click 'remove' on all passwords, one by one. | 415 clickRemoveButton(); // Click 'remove' on all passwords, one by one. |
| 410 else | 416 } else { |
| 417 // Clean up after self. | |
| 418 self.passwordManager.onRemoveException = null; | |
| 419 | |
| 411 done(); | 420 done(); |
| 412 }); | 421 } |
| 422 }; | |
| 413 | 423 |
| 414 // Start removing. | 424 // Start removing. |
| 415 clickRemoveButton(); | 425 clickRemoveButton(); |
| 416 }); | 426 }); |
| 417 | 427 |
| 418 test('showSavedPassword', function() { | 428 test('showSavedPassword', function() { |
| 419 var PASSWORD = 'bAn@n@5'; | 429 var PASSWORD = 'bAn@n@5'; |
| 420 var item = FakeDataMaker.passwordEntry('goo.gl', 'bart', PASSWORD.length); | 430 var item = FakeDataMaker.passwordEntry('goo.gl', 'bart', PASSWORD.length); |
| 421 var passwordDialog = self.createPasswordDialog_(item); | 431 var passwordDialog = self.createPasswordDialog_(item); |
| 422 | 432 |
| (...skipping 19 matching lines...) Expand all Loading... | |
| 442 assertEquals(item.loginPair.username, event.detail.username); | 452 assertEquals(item.loginPair.username, event.detail.username); |
| 443 done(); | 453 done(); |
| 444 }); | 454 }); |
| 445 | 455 |
| 446 MockInteractions.tap(passwordDialog.$.showPasswordButton); | 456 MockInteractions.tap(passwordDialog.$.showPasswordButton); |
| 447 }); | 457 }); |
| 448 }); | 458 }); |
| 449 | 459 |
| 450 mocha.run(); | 460 mocha.run(); |
| 451 }); | 461 }); |
| OLD | NEW |