diff options
Diffstat (limited to '')
-rw-r--r-- | browser/extensions/formautofill/test/unit/test_profileAutocompleteResult.js | 450 |
1 files changed, 450 insertions, 0 deletions
diff --git a/browser/extensions/formautofill/test/unit/test_profileAutocompleteResult.js b/browser/extensions/formautofill/test/unit/test_profileAutocompleteResult.js new file mode 100644 index 0000000000..7a28f64634 --- /dev/null +++ b/browser/extensions/formautofill/test/unit/test_profileAutocompleteResult.js @@ -0,0 +1,450 @@ +"use strict"; + +var AddressResult, CreditCardResult; +add_setup(async () => { + ({ AddressResult, CreditCardResult } = ChromeUtils.importESModule( + "resource://autofill/ProfileAutoCompleteResult.sys.mjs" + )); +}); + +let matchingProfiles = [ + { + guid: "test-guid-1", + "given-name": "Timothy", + "family-name": "Berners-Lee", + name: "Timothy Berners-Lee", + organization: "Sesame Street", + "street-address": "123 Sesame Street.", + "address-line1": "123 Sesame Street.", + tel: "1-345-345-3456.", + }, + { + guid: "test-guid-2", + "given-name": "John", + "family-name": "Doe", + name: "John Doe", + organization: "Mozilla", + "street-address": "331 E. Evelyn Avenue", + "address-line1": "331 E. Evelyn Avenue", + tel: "1-650-903-0800", + }, + { + guid: "test-guid-3", + organization: "", + "street-address": "321, No Name St. 2nd line 3rd line", + "-moz-street-address-one-line": "321, No Name St. 2nd line 3rd line", + "address-line1": "321, No Name St.", + "address-line2": "2nd line", + "address-line3": "3rd line", + tel: "1-000-000-0000", + }, +]; + +let allFieldNames = [ + "given-name", + "family-name", + "street-address", + "address-line1", + "address-line2", + "address-line3", + "organization", + "tel", +]; + +let addressTestCases = [ + { + description: "Focus on an `organization` field", + options: {}, + matchingProfiles, + allFieldNames, + searchString: "", + fieldName: "organization", + expected: { + searchResult: Ci.nsIAutoCompleteResult.RESULT_SUCCESS, + defaultIndex: 0, + items: [ + { + value: "", + style: "autofill-profile", + comment: JSON.stringify(matchingProfiles[0]), + label: JSON.stringify({ + primary: "Sesame Street", + secondary: "123 Sesame Street.", + }), + image: "", + }, + { + value: "", + style: "autofill-profile", + comment: JSON.stringify(matchingProfiles[1]), + label: JSON.stringify({ + primary: "Mozilla", + secondary: "331 E. Evelyn Avenue", + }), + image: "", + }, + ], + }, + }, + { + description: "Focus on an `tel` field", + options: {}, + matchingProfiles, + allFieldNames, + searchString: "", + fieldName: "tel", + expected: { + searchResult: Ci.nsIAutoCompleteResult.RESULT_SUCCESS, + defaultIndex: 0, + items: [ + { + value: "", + style: "autofill-profile", + comment: JSON.stringify(matchingProfiles[0]), + label: JSON.stringify({ + primary: "1-345-345-3456.", + secondary: "123 Sesame Street.", + }), + image: "", + }, + { + value: "", + style: "autofill-profile", + comment: JSON.stringify(matchingProfiles[1]), + label: JSON.stringify({ + primary: "1-650-903-0800", + secondary: "331 E. Evelyn Avenue", + }), + image: "", + }, + { + value: "", + style: "autofill-profile", + comment: JSON.stringify(matchingProfiles[2]), + label: JSON.stringify({ + primary: "1-000-000-0000", + secondary: "321, No Name St. 2nd line 3rd line", + }), + image: "", + }, + ], + }, + }, + { + description: "Focus on an `street-address` field", + options: {}, + matchingProfiles, + allFieldNames, + searchString: "", + fieldName: "street-address", + expected: { + searchResult: Ci.nsIAutoCompleteResult.RESULT_SUCCESS, + defaultIndex: 0, + items: [ + { + value: "", + style: "autofill-profile", + comment: JSON.stringify(matchingProfiles[0]), + label: JSON.stringify({ + primary: "123 Sesame Street.", + secondary: "Timothy Berners-Lee", + }), + image: "", + }, + { + value: "", + style: "autofill-profile", + comment: JSON.stringify(matchingProfiles[1]), + label: JSON.stringify({ + primary: "331 E. Evelyn Avenue", + secondary: "John Doe", + }), + image: "", + }, + { + value: "", + style: "autofill-profile", + comment: JSON.stringify(matchingProfiles[2]), + label: JSON.stringify({ + primary: "321, No Name St. 2nd line 3rd line", + secondary: "1-000-000-0000", + }), + image: "", + }, + ], + }, + }, + { + description: "Focus on an `address-line1` field", + options: {}, + matchingProfiles, + allFieldNames, + searchString: "", + fieldName: "address-line1", + expected: { + searchResult: Ci.nsIAutoCompleteResult.RESULT_SUCCESS, + defaultIndex: 0, + items: [ + { + value: "", + style: "autofill-profile", + comment: JSON.stringify(matchingProfiles[0]), + label: JSON.stringify({ + primary: "123 Sesame Street.", + secondary: "Timothy Berners-Lee", + }), + image: "", + }, + { + value: "", + style: "autofill-profile", + comment: JSON.stringify(matchingProfiles[1]), + label: JSON.stringify({ + primary: "331 E. Evelyn Avenue", + secondary: "John Doe", + }), + image: "", + }, + { + value: "", + style: "autofill-profile", + comment: JSON.stringify(matchingProfiles[2]), + label: JSON.stringify({ + primary: "321, No Name St.", + secondary: "1-000-000-0000", + }), + image: "", + }, + ], + }, + }, + { + description: "No matching profiles", + options: {}, + matchingProfiles: [], + allFieldNames, + searchString: "", + fieldName: "", + expected: { + searchResult: Ci.nsIAutoCompleteResult.RESULT_NOMATCH, + defaultIndex: 0, + items: [], + }, + }, + { + description: "Search with failure", + options: { resultCode: Ci.nsIAutoCompleteResult.RESULT_FAILURE }, + matchingProfiles: [], + allFieldNames, + searchString: "", + fieldName: "", + expected: { + searchResult: Ci.nsIAutoCompleteResult.RESULT_FAILURE, + defaultIndex: 0, + items: [], + }, + }, +]; + +matchingProfiles = [ + { + guid: "test-guid-1", + "cc-name": "Timothy Berners-Lee", + "cc-number": "************6785", + "cc-exp-month": 12, + "cc-exp-year": 2014, + "cc-type": "visa", + }, + { + guid: "test-guid-2", + "cc-name": "John Doe", + "cc-number": "************1234", + "cc-exp-month": 4, + "cc-exp-year": 2014, + "cc-type": "amex", + }, + { + guid: "test-guid-3", + "cc-number": "************5678", + "cc-exp-month": 8, + "cc-exp-year": 2018, + }, +]; + +allFieldNames = ["cc-name", "cc-number", "cc-exp-month", "cc-exp-year"]; + +let creditCardTestCases = [ + { + description: "Focus on a `cc-name` field", + options: {}, + matchingProfiles, + allFieldNames, + searchString: "", + fieldName: "cc-name", + expected: { + searchResult: Ci.nsIAutoCompleteResult.RESULT_SUCCESS, + defaultIndex: 0, + items: [ + { + value: "", + style: "autofill-profile", + comment: JSON.stringify(matchingProfiles[0]), + label: JSON.stringify({ + primary: "Timothy Berners-Lee", + secondary: "****6785", + ariaLabel: "Visa Timothy Berners-Lee ****6785", + }), + image: "chrome://formautofill/content/third-party/cc-logo-visa.svg", + }, + { + value: "", + style: "autofill-profile", + comment: JSON.stringify(matchingProfiles[1]), + label: JSON.stringify({ + primary: "John Doe", + secondary: "****1234", + ariaLabel: "American Express John Doe ****1234", + }), + image: "chrome://formautofill/content/third-party/cc-logo-amex.png", + }, + ], + }, + }, + { + description: "Focus on a `cc-number` field", + options: {}, + matchingProfiles, + allFieldNames, + searchString: "", + fieldName: "cc-number", + expected: { + searchResult: Ci.nsIAutoCompleteResult.RESULT_SUCCESS, + defaultIndex: 0, + items: [ + { + value: "", + style: "autofill-profile", + comment: JSON.stringify(matchingProfiles[0]), + label: JSON.stringify({ + primaryAffix: "****", + primary: "6785", + secondary: "Timothy Berners-Lee", + ariaLabel: "Visa **** 6785 Timothy Berners-Lee", + }), + image: "chrome://formautofill/content/third-party/cc-logo-visa.svg", + }, + { + value: "", + style: "autofill-profile", + comment: JSON.stringify(matchingProfiles[1]), + label: JSON.stringify({ + primaryAffix: "****", + primary: "1234", + secondary: "John Doe", + ariaLabel: "American Express **** 1234 John Doe", + }), + image: "chrome://formautofill/content/third-party/cc-logo-amex.png", + }, + { + value: "", + style: "autofill-profile", + comment: JSON.stringify(matchingProfiles[2]), + label: JSON.stringify({ + primaryAffix: "****", + primary: "5678", + secondary: "", + ariaLabel: "**** 5678", + }), + image: "chrome://formautofill/content/icon-credit-card-generic.svg", + }, + ], + }, + }, + { + description: "No matching profiles", + options: {}, + matchingProfiles: [], + allFieldNames, + searchString: "", + fieldName: "", + expected: { + searchResult: Ci.nsIAutoCompleteResult.RESULT_NOMATCH, + defaultIndex: 0, + items: [], + }, + }, + { + description: "Search with failure", + options: { resultCode: Ci.nsIAutoCompleteResult.RESULT_FAILURE }, + matchingProfiles: [], + allFieldNames, + searchString: "", + fieldName: "", + expected: { + searchResult: Ci.nsIAutoCompleteResult.RESULT_FAILURE, + defaultIndex: 0, + items: [], + }, + }, +]; + +add_task(async function test_all_patterns() { + let testSets = [ + { + collectionConstructor: AddressResult, + testCases: addressTestCases, + }, + { + collectionConstructor: CreditCardResult, + testCases: creditCardTestCases, + }, + ]; + + testSets.forEach(({ collectionConstructor, testCases }) => { + testCases.forEach(testCase => { + info("Starting testcase: " + testCase.description); + let actual = new collectionConstructor( + testCase.searchString, + testCase.fieldName, + testCase.allFieldNames, + testCase.matchingProfiles, + testCase.options + ); + let expectedValue = testCase.expected; + let expectedItemLength = expectedValue.items.length; + // If the last item shows up as a footer, we expect one more item + // than expected. + if (actual.getStyleAt(actual.matchCount - 1) == "autofill-footer") { + expectedItemLength++; + } + + equal(actual.searchResult, expectedValue.searchResult); + equal(actual.defaultIndex, expectedValue.defaultIndex); + equal(actual.matchCount, expectedItemLength); + expectedValue.items.forEach((item, index) => { + equal(actual.getValueAt(index), item.value); + equal(actual.getCommentAt(index), item.comment); + equal(actual.getLabelAt(index), item.label); + equal(actual.getStyleAt(index), item.style); + equal(actual.getImageAt(index), item.image); + }); + + if (expectedValue.items.length) { + Assert.throws( + () => actual.getValueAt(expectedItemLength), + /Index out of range\./ + ); + + Assert.throws( + () => actual.getLabelAt(expectedItemLength), + /Index out of range\./ + ); + + Assert.throws( + () => actual.getCommentAt(expectedItemLength), + /Index out of range\./ + ); + } + }); + }); +}); |