From 36d22d82aa202bb199967e9512281e9a53db42c9 Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Sun, 7 Apr 2024 21:33:14 +0200 Subject: Adding upstream version 115.7.0esr. Signed-off-by: Daniel Baumann --- .../test/unit/test_getFormInputDetails.js | 204 +++++++++++++++++++++ 1 file changed, 204 insertions(+) create mode 100644 browser/extensions/formautofill/test/unit/test_getFormInputDetails.js (limited to 'browser/extensions/formautofill/test/unit/test_getFormInputDetails.js') diff --git a/browser/extensions/formautofill/test/unit/test_getFormInputDetails.js b/browser/extensions/formautofill/test/unit/test_getFormInputDetails.js new file mode 100644 index 0000000000..0ca9def464 --- /dev/null +++ b/browser/extensions/formautofill/test/unit/test_getFormInputDetails.js @@ -0,0 +1,204 @@ +"use strict"; + +var FormAutofillContent; +add_task(async function () { + ({ FormAutofillContent } = ChromeUtils.importESModule( + "resource://autofill/FormAutofillContent.sys.mjs" + )); +}); + +const TESTCASES = [ + { + description: "Form containing 5 fields with autocomplete attribute.", + document: `
+ + + + + +
`, + targetInput: ["street-addr", "email"], + expectedResult: [ + { + input: { + section: "", + addressType: "", + contactType: "", + fieldName: "street-address", + }, + formId: "form1", + form: [ + { + section: "", + addressType: "", + contactType: "", + fieldName: "street-address", + }, + { + section: "", + addressType: "", + contactType: "", + fieldName: "address-level2", + }, + { + section: "", + addressType: "", + contactType: "", + fieldName: "country", + }, + { section: "", addressType: "", contactType: "", fieldName: "email" }, + { section: "", addressType: "", contactType: "", fieldName: "tel" }, + ], + }, + { + input: { + section: "", + addressType: "", + contactType: "", + fieldName: "email", + }, + formId: "form1", + form: [ + { + section: "", + addressType: "", + contactType: "", + fieldName: "street-address", + }, + { + section: "", + addressType: "", + contactType: "", + fieldName: "address-level2", + }, + { + section: "", + addressType: "", + contactType: "", + fieldName: "country", + }, + { section: "", addressType: "", contactType: "", fieldName: "email" }, + { section: "", addressType: "", contactType: "", fieldName: "tel" }, + ], + }, + ], + }, + { + description: "2 forms that are able to be auto filled", + document: `
+ + + +
+
+ + + +
`, + targetInput: ["home-addr", "office-addr"], + expectedResult: [ + { + input: { + section: "", + addressType: "", + contactType: "", + fieldName: "street-address", + }, + formId: "form2", + form: [ + { + section: "", + addressType: "", + contactType: "", + fieldName: "street-address", + }, + { + section: "", + addressType: "", + contactType: "", + fieldName: "address-level2", + }, + { + section: "", + addressType: "", + contactType: "", + fieldName: "country", + }, + ], + }, + { + input: { + section: "", + addressType: "", + contactType: "", + fieldName: "street-address", + }, + formId: "form3", + form: [ + { + section: "", + addressType: "", + contactType: "", + fieldName: "street-address", + }, + { section: "", addressType: "", contactType: "", fieldName: "email" }, + { section: "", addressType: "", contactType: "", fieldName: "tel" }, + ], + }, + ], + }, +]; + +function inputDetailAssertion(detail, expected) { + Assert.equal(detail.section, expected.section); + Assert.equal(detail.addressType, expected.addressType); + Assert.equal(detail.contactType, expected.contactType); + Assert.equal(detail.fieldName, expected.fieldName); + Assert.equal(detail.elementWeakRef.get(), expected.elementWeakRef.get()); +} + +TESTCASES.forEach(testcase => { + add_task(async function () { + info("Starting testcase: " + testcase.description); + + let doc = MockDocument.createTestDocument( + "http://localhost:8080/test/", + testcase.document + ); + + for (let i in testcase.targetInput) { + let input = doc.getElementById(testcase.targetInput[i]); + FormAutofillContent.identifyAutofillFields(input); + FormAutofillContent.updateActiveInput(input); + + // Put the input element reference to `element` to make sure the result of + // `activeFieldDetail` contains the same input element. + testcase.expectedResult[i].input.elementWeakRef = + Cu.getWeakReference(input); + + inputDetailAssertion( + FormAutofillContent.activeFieldDetail, + testcase.expectedResult[i].input + ); + + let formDetails = testcase.expectedResult[i].form; + for (let formDetail of formDetails) { + // Compose a query string to get the exact reference of /