Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(6099)

Unified Diff: chrome/test/data/webui/settings/passwords_and_forms_browsertest.js

Issue 1957043002: Separate the listeners and getters for the Autofill Private API. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@autofill-lists.gitbr
Patch Set: update histogram.xml and test Created 4 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/test/data/webui/settings/passwords_and_forms_browsertest.js
diff --git a/chrome/test/data/webui/settings/passwords_and_forms_browsertest.js b/chrome/test/data/webui/settings/passwords_and_forms_browsertest.js
new file mode 100644
index 0000000000000000000000000000000000000000..b983bc103f6ffa95d17fb4daf0dc479a84f87e73
--- /dev/null
+++ b/chrome/test/data/webui/settings/passwords_and_forms_browsertest.js
@@ -0,0 +1,378 @@
+// Copyright 2016 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.
+
+/** @fileoverview Runs the Polymer Passwords and Forms tests. */
+
+/** @const {string} Path to root from chrome/test/data/webui/settings/. */
+var ROOT_PATH = '../../../../../';
+
+// Polymer BrowserTest fixture.
+GEN_INCLUDE(
+ [ROOT_PATH + 'chrome/test/data/webui/polymer_browser_test_base.js']);
+
+// Fake data generator.
+GEN_INCLUDE([ROOT_PATH +
+ 'chrome/test/data/webui/settings/passwords_and_autofill_fake_data.js']);
+
+function PasswordManagerExpectations() {};
+PasswordManagerExpectations.prototype = {
+ requested: {
+ passwords: 0,
+ exceptions: 0,
+ plaintextPassword: 0,
+ },
+
+ removed: {
+ passwords: 0,
+ exceptions: 0,
+ },
+
+ listening: {
+ passwords: 0,
+ exceptions: 0,
+ },
+};
+
+/**
+ * Test implementation
+ * @implements {PasswordManager}
+ * @constructor
+ */
+function TestPasswordManager() {
+ this.actual_ = new PasswordManagerExpectations();
+};
+TestPasswordManager.prototype = {
+ /** @override */
+ addSavedPasswordListChangedListener: function(listener) {
+ this.actual_.listening.passwords++;
+ this.lastCallback.addSavedPasswordListChangedListener = listener;
+ },
+
+ /** @override */
+ removeSavedPasswordListChangedListener: function(listener) {
+ this.actual_.listening.passwords--;
+ },
+
+ /** @override */
+ getSavedPasswordList: function(callback) {
+ this.actual_.requested.passwords++;
+ callback(this.data.passwords);
+ },
+
+ /** @override */
+ removeSavedPassword: function(loginPair) {
+ this.actual_.removed.passwords++;
+ },
+
+ /** @override */
+ addExceptionListChangedListener: function(listener) {
+ this.actual_.listening.exceptions++;
+ this.lastCallback.addExceptionListChangedListener = listener;
+ },
+
+ /** @override */
+ removeExceptionListChangedListener: function(listener) {
+ this.actual_.listening.exceptions--;
+ },
+
+ /** @override */
+ getExceptionList: function(callback) {
+ this.actual_.requested.exceptions++;
+ callback(this.data.exceptions);
+ },
+
+ /** @override */
+ removeException: function(exception) {
+ this.actual_.removed.exceptions++;
+ },
+
+ /** @override */
+ getPlaintextPassword: function(loginPair, callback) {
+ this.actual_.requested.plaintextPassword++;
+ this.lastCallback.getPlaintextPassword = callback;
+ },
+
+ /**
+ * Verifies expectations.
+ * @param {!PasswordManagerExpectations} expected
+ */
+ assertExpectations: function(expected) {
+ var actual = this.actual_;
+
+ assertEquals(expected.requested.passwords, actual.requested.passwords);
+ assertEquals(expected.requested.exceptions, actual.requested.exceptions);
+ assertEquals(expected.requested.plaintextPassword,
+ actual.requested.plaintextPassword);
+
+ assertEquals(expected.removed.passwords, actual.removed.passwords);
+ assertEquals(expected.removed.exceptions, actual.removed.exceptions);
+
+ assertEquals(expected.listening.passwords, actual.listening.passwords);
+ assertEquals(expected.listening.exceptions, actual.listening.exceptions);
+ },
+
+ // Set these to have non-empty data.
+ data: {
+ passwords: [],
+ exceptions: [],
+ },
+
+ // Holds the last callbacks so they can be called when needed/
+ lastCallback: {
+ addSavedPasswordListChangedListener: null,
+ addExceptionListChangedListener: null,
+ getPlaintextPassword: null,
+ },
+};
+
+function AutofillManagerExpectations() {};
+AutofillManagerExpectations.prototype = {
+ requested: {
+ addresses: 0,
+ creditCards: 0,
+ },
+
+ listening: {
+ addresses: 0,
+ creditCards: 0,
+ },
+};
+
+/**
+ * Test implementation
+ * @implements {AutofillManager}
+ * @constructor
+ */
+function TestAutofillManager() {
+ this.actual_ = new AutofillManagerExpectations();
+};
+TestAutofillManager.prototype = {
+ /** @override */
+ addAddressListChangedListener: function(listener) {
+ this.actual_.listening.addresses++;
+ this.lastCallback.addAddressListChangedListener = listener;
+ },
+
+ /** @override */
+ removeAddressListChangedListener: function(listener) {
+ this.actual_.listening.addresses--;
+ },
+
+ /** @override */
+ getAddressList: function(callback) {
+ this.actual_.requested.addresses++;
+ callback(this.data.addresses);
+ },
+
+ /** @override */
+ addCreditCardListChangedListener: function(listener) {
+ this.actual_.listening.creditCards++;
+ this.lastCallback.addCreditCardListChangedListener = listener;
+ },
+
+ /** @override */
+ removeCreditCardListChangedListener: function(listener) {
+ this.actual_.listening.creditCards--;
+ },
+
+ /** @override */
+ getCreditCardList: function(callback) {
+ this.actual_.requested.creditCards++;
+ callback(this.data.creditCards);
+ },
+
+ /**
+ * Verifies expectations.
+ * @param {!AutofillManagerExpectations} expected
+ */
+ assertExpectations: function(expected) {
+ var actual = this.actual_;
+
+ assertEquals(expected.requested.addresses, actual.requested.addresses);
+ assertEquals(expected.requested.creditCards, actual.requested.creditCards);
+
+ assertEquals(expected.listening.addresses, actual.listening.addresses);
+ assertEquals(expected.listening.creditCards, actual.listening.creditCards);
+ },
+
+ // Set these to have non-empty data.
+ data: {
+ addresses: [],
+ creditCards: [],
+ },
+
+ // Holds the last callbacks so they can be called when needed/
+ lastCallback: {
+ addAddressListChangedListener: null,
+ addCreditCardListChangedListener: null,
+ },
+};
+
+/**
+ * @constructor
+ * @extends {PolymerTest}
+ */
+function PasswordsAndFormsBrowserTest() {}
+
+PasswordsAndFormsBrowserTest.prototype = {
+ __proto__: PolymerTest.prototype,
+
+ /** @override */
+ browsePreload: 'chrome://md-settings/passwords_and_forms_page/' +
+ 'passwords_and_forms_page.html',
+
+ /** @override */
+ extraLibraries: PolymerTest.getLibraries(ROOT_PATH),
+
+ /** @override */
+ setUp: function() {
+ PolymerTest.prototype.setUp.call(this);
+
+ // Test is run on an individual element that won't have a page language.
+ this.accessibilityAuditConfig.auditRulesToIgnore.push('humanLangMissing');
+
+ // Override the PasswordManagerImpl for testing.
+ this.passwordManager = new TestPasswordManager();
+ PasswordManagerImpl.instance_ = this.passwordManager;
+
+ // Override the AutofillManagerImpl for testing.
+ this.autofillManager = new TestAutofillManager();
+ AutofillManagerImpl.instance_ = this.autofillManager;
+ },
+
+ /**
+ * Creates a new passwords and forms element.
+ * @return {!Object}
+ */
+ createPasswordsAndFormsElement: function() {
+ var element = document.createElement('settings-passwords-and-forms-page');
+ document.body.appendChild(element);
+ Polymer.dom.flush();
+ return element;
+ },
+
+ /**
+ * Creates PasswordManagerExpectations with the values expected after first
+ * creating the element.
+ * @return {!PasswordManagerExpectations}
+ */
+ basePasswordExpectations: function() {
+ var expected = new PasswordManagerExpectations();
+ expected.requested.passwords = 1;
+ expected.requested.exceptions = 1;
+ expected.listening.passwords = 1;
+ expected.listening.exceptions = 1;
+ return expected;
+ },
+
+ /**
+ * Creates AutofillManagerExpectations with the values expected after first
+ * creating the element.
+ * @return {!AutofillManagerExpectations}
+ */
+ baseAutofillExpectations: function() {
+ var expected = new AutofillManagerExpectations();
+ expected.requested.addresses = 1;
+ expected.requested.creditCards = 1;
+ expected.listening.addresses = 1;
+ expected.listening.creditCards = 1;
+ return expected;
+ },
+};
+
+/**
+ * This test will validate that the section is loaded with data.
+ */
+TEST_F('PasswordsAndFormsBrowserTest', 'uiTests', function() {
+ var self = this;
+
+ suite('PasswordsAndForms', function() {
+ test('baseLoadAndRemove', function() {
+ var element = self.createPasswordsAndFormsElement();
+
+ var passwordsExpectations = self.basePasswordExpectations();
+ self.passwordManager.assertExpectations(passwordsExpectations);
+
+ var autofillExpectations = self.baseAutofillExpectations();
+ self.autofillManager.assertExpectations(autofillExpectations);
+
+ element.remove();
+ Polymer.dom.flush();
+
+ passwordsExpectations.listening.passwords = 0;
+ passwordsExpectations.listening.exceptions = 0;
+ self.passwordManager.assertExpectations(passwordsExpectations);
+
+ autofillExpectations.listening.addresses = 0;
+ autofillExpectations.listening.creditCards = 0;
+ self.autofillManager.assertExpectations(autofillExpectations);
+ });
+
+ test('loadPasswordsAsync', function() {
+ var element = self.createPasswordsAndFormsElement();
+
+ var list = [FakeDataMaker.passwordEntry(), FakeDataMaker.passwordEntry()];
+ self.passwordManager.lastCallback.addSavedPasswordListChangedListener(
+ list);
+ Polymer.dom.flush();
+
+ assertEquals(list, element.savedPasswords);
+
+ // The callback is coming from the manager, so the element shouldn't have
+ // additional calls to the manager after the base expectations.
+ self.passwordManager.assertExpectations(self.basePasswordExpectations());
+ self.autofillManager.assertExpectations(self.baseAutofillExpectations());
+ });
+
+ test('loadExceptionsAsync', function() {
+ var element = self.createPasswordsAndFormsElement();
+
+ var list = [FakeDataMaker.exceptionEntry(),
+ FakeDataMaker.exceptionEntry()];
+ self.passwordManager.lastCallback.addExceptionListChangedListener(
+ list);
+ Polymer.dom.flush();
+
+ assertEquals(list, element.passwordExceptions);
+
+ // The callback is coming from the manager, so the element shouldn't have
+ // additional calls to the manager after the base expectations.
+ self.passwordManager.assertExpectations(self.basePasswordExpectations());
+ self.autofillManager.assertExpectations(self.baseAutofillExpectations());
+ });
+
+ test('loadAddressesAsync', function() {
+ var element = self.createPasswordsAndFormsElement();
+
+ var list = [FakeDataMaker.addressEntry(), FakeDataMaker.addressEntry()];
+ self.autofillManager.lastCallback.addAddressListChangedListener(list);
+ Polymer.dom.flush();
+
+ assertEquals(list, element.addresses);
+
+ // The callback is coming from the manager, so the element shouldn't have
+ // additional calls to the manager after the base expectations.
+ self.passwordManager.assertExpectations(self.basePasswordExpectations());
+ self.autofillManager.assertExpectations(self.baseAutofillExpectations());
+ });
+
+ test('loadCreditCardsAsync', function() {
+ var element = self.createPasswordsAndFormsElement();
+
+ var list = [FakeDataMaker.creditCardEntry(),
+ FakeDataMaker.creditCardEntry()];
+ self.autofillManager.lastCallback.addCreditCardListChangedListener(list);
+ Polymer.dom.flush();
+
+ assertEquals(list, element.creditCards);
+
+ // The callback is coming from the manager, so the element shouldn't have
+ // additional calls to the manager after the base expectations.
+ self.passwordManager.assertExpectations(self.basePasswordExpectations());
+ self.autofillManager.assertExpectations(self.baseAutofillExpectations());
+ });
+ });
+
+ mocha.run();
+});

Powered by Google App Engine
This is Rietveld 408576698