fune/browser/extensions/formautofill/test/unit/test_profileAutocompleteResult.js
Andrew Swan fb72dcb414 Bug 1449055 Convert formautofill to a webextension r=MattN,kmag
--HG--
rename : browser/extensions/formautofill/bootstrap.js => browser/extensions/formautofill/api.js
rename : browser/extensions/formautofill/install.rdf.in => browser/extensions/formautofill/manifest.json
rename : browser/extensions/formautofill/skin/shared/autocomplete-item.css => browser/extensions/formautofill/skin/shared/autocomplete-item-shared.css
rename : browser/extensions/formautofill/skin/shared/editDialog.css => browser/extensions/formautofill/skin/shared/editDialog-shared.css
extra : rebase_source : 233ea805630209a07d347e19f19710d9755f595f
extra : source : ecda6532c852b3f225fce998e3ce83ad157760e6
2018-07-28 14:06:07 -07:00

394 lines
10 KiB
JavaScript

"use strict";
/* global AddressResult, CreditCardResult */
add_task(async function setup() {
// eslint-disable-next-line no-unused-vars
ChromeUtils.import("resource://formautofill/ProfileAutoCompleteResult.jsm");
});
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,
}, {
guid: "test-guid-2",
"cc-name": "John Doe",
"cc-number": "************1234",
"cc-exp-month": 4,
"cc-exp-year": 2014,
}, {
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",
}),
image: "chrome://formautofill/content/icon-credit-card-generic.svg",
}, {
value: "",
style: "autofill-profile",
comment: JSON.stringify(matchingProfiles[1]),
label: JSON.stringify({
primary: "John Doe",
secondary: "****1234",
}),
image: "chrome://formautofill/content/icon-credit-card-generic.svg",
}],
},
}, {
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",
}),
image: "chrome://formautofill/content/icon-credit-card-generic.svg",
}, {
value: "",
style: "autofill-profile",
comment: JSON.stringify(matchingProfiles[1]),
label: JSON.stringify({
primaryAffix: "****",
primary: "1234",
secondary: "John Doe",
}),
image: "chrome://formautofill/content/icon-credit-card-generic.svg",
}, {
value: "",
style: "autofill-profile",
comment: JSON.stringify(matchingProfiles[2]),
label: JSON.stringify({
primaryAffix: "****",
primary: "5678",
secondary: "",
}),
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 != 0) {
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\./);
}
});
});
});