mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-28 20:55:39 +00:00
Bug 1303510 - Part 3: Add mochitest-plain for saving submitted form. r=MattN
MozReview-Commit-ID: XJZWEBkCrx --HG-- extra : rebase_source : 463a8101f803cfdc4305d1b1c9d79d3e25c2f279
This commit is contained in:
parent
4a78b88263
commit
f89677c9be
@ -20,6 +20,26 @@ function setInput(selector, value) {
|
||||
return new Promise(resolve => setTimeout(resolve));
|
||||
}
|
||||
|
||||
function clickOnElement(selector) {
|
||||
let element = document.querySelector(selector);
|
||||
|
||||
if (!element) {
|
||||
throw new Error("Can not find the element");
|
||||
}
|
||||
|
||||
element.click();
|
||||
}
|
||||
|
||||
async function onAddressChanged(type) {
|
||||
return new Promise(resolve => {
|
||||
formFillChromeScript.addMessageListener("formautofill-storage-changed", function onChanged(data) {
|
||||
formFillChromeScript.removeMessageListener("formautofill-storage-changed", onChanged);
|
||||
is(data.data, type, `Receive ${type} storage changed event`);
|
||||
resolve();
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
function checkMenuEntries(expectedValues) {
|
||||
let actualValues = getMenuEntries();
|
||||
|
||||
@ -29,7 +49,7 @@ function checkMenuEntries(expectedValues) {
|
||||
}
|
||||
}
|
||||
|
||||
function addAddress(address) {
|
||||
async function addAddress(address) {
|
||||
return new Promise(resolve => {
|
||||
formFillChromeScript.sendAsyncMessage("FormAutofillTest:AddAddress", {address});
|
||||
formFillChromeScript.addMessageListener("FormAutofillTest:AddressAdded", function onAdded(data) {
|
||||
@ -40,7 +60,7 @@ function addAddress(address) {
|
||||
});
|
||||
}
|
||||
|
||||
function removeAddress(guid) {
|
||||
async function removeAddress(guid) {
|
||||
return new Promise(resolve => {
|
||||
formFillChromeScript.sendAsyncMessage("FormAutofillTest:RemoveAddress", {guid});
|
||||
formFillChromeScript.addMessageListener("FormAutofillTest:AddressRemoved", function onDeleted(data) {
|
||||
@ -51,7 +71,7 @@ function removeAddress(guid) {
|
||||
});
|
||||
}
|
||||
|
||||
function updateAddress(guid, address) {
|
||||
async function updateAddress(guid, address) {
|
||||
return new Promise(resolve => {
|
||||
formFillChromeScript.sendAsyncMessage("FormAutofillTest:UpdateAddress", {address, guid});
|
||||
formFillChromeScript.addMessageListener("FormAutofillTest:AddressUpdated", function onUpdated(data) {
|
||||
@ -62,6 +82,17 @@ function updateAddress(guid, address) {
|
||||
});
|
||||
}
|
||||
|
||||
async function checkAddresses(expectedAddresses) {
|
||||
return new Promise(resolve => {
|
||||
formFillChromeScript.sendAsyncMessage("FormAutofillTest:CheckAddresses", {expectedAddresses});
|
||||
formFillChromeScript.addMessageListener("FormAutofillTest:areAddressesMatching", function onChecked(data) {
|
||||
formFillChromeScript.removeMessageListener("FormAutofillTest:areAddressesMatching", onChecked);
|
||||
|
||||
resolve(data);
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
function formAutoFillCommonSetup() {
|
||||
let chromeURL = SimpleTest.getTestFileURL("formautofill_parent_utils.js");
|
||||
formFillChromeScript = SpecialPowers.loadChromeScript(chromeURL);
|
||||
|
@ -7,6 +7,7 @@
|
||||
const {classes: Cc, interfaces: Ci, utils: Cu} = Components;
|
||||
|
||||
Cu.import("resource://gre/modules/Services.jsm");
|
||||
let {profileStorage} = Cu.import("resource://formautofill/ProfileStorage.jsm", {});
|
||||
|
||||
var ParentUtils = {
|
||||
cleanUpAddress() {
|
||||
@ -42,6 +43,41 @@ var ParentUtils = {
|
||||
Services.obs.removeObserver(this, "formautofill-storage-changed");
|
||||
this.cleanUpAddress();
|
||||
},
|
||||
|
||||
areAddressesMatching(addressA, addressB) {
|
||||
for (let field of profileStorage.addresses.VALID_FIELDS) {
|
||||
if (addressA[field] !== addressB[field]) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
},
|
||||
|
||||
checkAddresses({expectedAddresses}) {
|
||||
Services.cpmm.addMessageListener("FormAutofill:Addresses", function getResult(result) {
|
||||
Services.cpmm.removeMessageListener("FormAutofill:Addresses", getResult);
|
||||
let addresses = result.data;
|
||||
if (addresses.length !== expectedAddresses.length) {
|
||||
sendAsyncMessage("FormAutofillTest:areAddressesMatching", false);
|
||||
return;
|
||||
}
|
||||
|
||||
for (let address of addresses) {
|
||||
let matching = expectedAddresses.some((expectedAddress) => {
|
||||
return ParentUtils.areAddressesMatching(address, expectedAddress);
|
||||
});
|
||||
|
||||
if (!matching) {
|
||||
sendAsyncMessage("FormAutofillTest:areAddressesMatching", false);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
sendAsyncMessage("FormAutofillTest:areAddressesMatching", true);
|
||||
});
|
||||
|
||||
Services.cpmm.sendAsyncMessage("FormAutofill:GetAddresses", {searchString: ""});
|
||||
},
|
||||
};
|
||||
|
||||
Services.obs.addObserver(ParentUtils, "formautofill-storage-changed");
|
||||
@ -58,6 +94,10 @@ addMessageListener("FormAutofillTest:UpdateAddress", (msg) => {
|
||||
ParentUtils.updateAddress("update", "FormAutofill:SaveAddress", msg, "FormAutofillTest:AddressUpdated");
|
||||
});
|
||||
|
||||
addMessageListener("FormAutofillTest:CheckAddresses", (msg) => {
|
||||
ParentUtils.checkAddresses(msg);
|
||||
});
|
||||
|
||||
addMessageListener("cleanup", () => {
|
||||
ParentUtils.cleanup();
|
||||
});
|
||||
|
@ -5,5 +5,6 @@ support-files =
|
||||
formautofill_common.js
|
||||
formautofill_parent_utils.js
|
||||
|
||||
[test_address_submission.html]
|
||||
[test_autofocus_form.html]
|
||||
[test_basic_autocomplete_form.html]
|
||||
|
@ -0,0 +1,61 @@
|
||||
<!DOCTYPE HTML>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>Test autofill submit</title>
|
||||
<script type="text/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
|
||||
<script type="text/javascript" src="/tests/SimpleTest/SpawnTask.js"></script>
|
||||
<script type="text/javascript" src="formautofill_common.js"></script>
|
||||
<script type="text/javascript" src="satchel_common.js"></script>
|
||||
<link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" />
|
||||
</head>
|
||||
<body>
|
||||
Form autofill test: check if address is saved/updated correctly
|
||||
|
||||
<script>
|
||||
/* import-globals-from ../../../../../testing/mochitest/tests/SimpleTest/SpawnTask.js */
|
||||
/* import-globals-from ../../../../../toolkit/components/satchel/test/satchel_common.js */
|
||||
/* import-globals-from formautofill_common.js */
|
||||
|
||||
"use strict";
|
||||
|
||||
let TEST_ADDRESSES = [{
|
||||
organization: "Sesame Street",
|
||||
"street-address": "123 Sesame Street.",
|
||||
tel: "1-345-345-3456",
|
||||
}, {
|
||||
organization: "Mozilla",
|
||||
"street-address": "331 E. Evelyn Avenue",
|
||||
tel: "1-650-903-0800",
|
||||
}];
|
||||
|
||||
// Autofill the address from dropdown menu.
|
||||
add_task(async function check_storage_after_form_submitted() {
|
||||
for (let key in TEST_ADDRESSES[0]) {
|
||||
setInput("#" + key, TEST_ADDRESSES[0][key]);
|
||||
}
|
||||
|
||||
clickOnElement("input[type=submit]");
|
||||
|
||||
let expectedAddresses = TEST_ADDRESSES.slice(0, 1);
|
||||
await onAddressChanged("add");
|
||||
let matching = await checkAddresses(expectedAddresses);
|
||||
ok(matching, "Address saved as expected");
|
||||
});
|
||||
|
||||
</script>
|
||||
|
||||
<div>
|
||||
|
||||
<form onsubmit="return false">
|
||||
<p>This is a basic form for submitting test.</p>
|
||||
<p><label>organization: <input id="organization" name="organization" autocomplete="organization" type="text"></label></p>
|
||||
<p><label>streetAddress: <input id="street-address" name="street-address" autocomplete="street-address" type="text"></label></p>
|
||||
<p><label>tel: <input id="tel" name="tel" autocomplete="tel" type="text"></label></p>
|
||||
<p><label>country: <input id="country" name="country" autocomplete="country" type="text"></label></p>
|
||||
<p><input type="submit"></p>
|
||||
</form>
|
||||
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
Loading…
Reference in New Issue
Block a user