Bug 1498310 - Mochitest updation. r=baku

--HG--
extra : rebase_source : 71eb72dad95ae458a3adfe0d43255bd475b1bb6a
This commit is contained in:
Eden Chuang 2018-12-05 15:38:33 -05:00
parent 4f622b5882
commit 0f214b6b1d
2 changed files with 178 additions and 60 deletions

View File

@ -8,10 +8,10 @@ const { XPCOMUtils } = ChromeUtils.import("resource://gre/modules/XPCOMUtils.jsm
const paymentSrv = Cc["@mozilla.org/dom/payments/payment-request-service;1"].getService(Ci.nsIPaymentRequestService);
function emitTestFail(message) {
sendAsyncMessage("test-fail", message);
sendAsyncMessage("test-fail", `${DummyUIService.testName}: ${message}`);
}
function emitTestPass(message) {
sendAsyncMessage("test-pass", message);
sendAsyncMessage("test-pass", `${DummyUIService.testName}: ${message}`);
}
const shippingAddress = Cc["@mozilla.org/dom/payments/payment-address;1"].
@ -32,22 +32,6 @@ shippingAddress.init("USA", // country
"Bill A. Pacheco", // recipient
"+1-434-441-3879"); // phone
function acceptShow(requestId) {
const responseData = Cc["@mozilla.org/dom/payments/general-response-data;1"].
createInstance(Ci.nsIGeneralResponseData);
responseData.initData({ paymentToken: "6880281f-0df3-4b8e-916f-66575e2457c1",});
let showResponse = Cc["@mozilla.org/dom/payments/payment-show-action-response;1"].
createInstance(Ci.nsIPaymentShowActionResponse);
showResponse.init(requestId,
Ci.nsIPaymentActionResponse.PAYMENT_ACCEPTED,
"testing-payment-method", // payment method
responseData, // payment method data
"Bill A. Pacheco", // payer name
"", // payer email
""); // payer phone
paymentSrv.respondPayment(showResponse.QueryInterface(Ci.nsIPaymentActionResponse));
}
function rejectShow(requestId) {
const responseData = Cc["@mozilla.org/dom/payments/general-response-data;1"].
createInstance(Ci.nsIGeneralResponseData);
@ -64,12 +48,19 @@ function rejectShow(requestId) {
paymentSrv.respondPayment(showResponse.QueryInterface(Ci.nsIPaymentActionResponse));
}
function updateShow(requestId) {
paymentSrv.changeShippingAddress(requestId, shippingAddress);
}
function showRequest(requestId) {
updateShow(requestId);
if (DummyUIService.showAction === "update-shipping-address") {
paymentSrv.changeShippingAddress(requestId, shippingAddress);
return;
}
if (DummyUIService.showAction === "update-shipping-option") {
paymentSrv.changeShippingOption(requestId, "FastShipping");
return;
}
if (DummyUIService.showAction === "") {
return;
}
emitTestFail(`Unknown showAction(${DummyUIService.showAction}) for UI service.`);
}
function abortRequest(requestId) {
@ -92,56 +83,65 @@ function checkAddressErrors(errors) {
emitTestFail("Expect non-null shippingAddressErrors, but got null.");
}
if (errors.addressLine != "addressLine error") {
emitTestFail("Expect shippingAddressErrors.addressLine as 'addressLine error', but got" +
emitTestFail("Expect shippingAddressErrors.addressLine as 'addressLine error', but got " +
errors.addressLine);
}
if (errors.city != "city error") {
emitTestFail("Expect shippingAddressErrors.city as 'city error', but got" +
emitTestFail("Expect shippingAddressErrors.city as 'city error', but got " +
errors.city);
}
if (errors.dependentLocality != "dependentLocality error") {
emitTestFail("Expect shippingAddressErrors.dependentLocality as 'dependentLocality error', but got" +
emitTestFail("Expect shippingAddressErrors.dependentLocality as 'dependentLocality error', but got " +
errors.dependentLocality);
}
if (errors.organization != "organization error") {
emitTestFail("Expect shippingAddressErrors.organization as 'organization error', but got" +
emitTestFail("Expect shippingAddressErrors.organization as 'organization error', but got " +
errors.organization);
}
if (errors.phone != "phone error") {
emitTestFail("Expect shippingAddressErrors.phone as 'phone error', but got" +
emitTestFail("Expect shippingAddressErrors.phone as 'phone error', but got " +
errors.phone);
}
if (errors.postalCode != "postalCode error") {
emitTestFail("Expect shippingAddressErrors.postalCode as 'postalCode error', but got" +
emitTestFail("Expect shippingAddressErrors.postalCode as 'postalCode error', but got " +
errors.postalCode);
}
if (errors.recipient != "recipient error") {
emitTestFail("Expect shippingAddressErrors.recipient as 'recipient error', but got" +
emitTestFail("Expect shippingAddressErrors.recipient as 'recipient error', but got " +
errors.recipient);
}
if (errors.region != "region error") {
emitTestFail("Expect shippingAddressErrors.region as 'region error', but got" +
emitTestFail("Expect shippingAddressErrors.region as 'region error', but got " +
errors.region);
}
if (errors.regionCode != "regionCode error") {
emitTestFail("Expect shippingAddressErrors.regionCode as 'regionCode error', but got" +
emitTestFail("Expect shippingAddressErrors.regionCode as 'regionCode error', but got " +
errors.region);
}
if (errors.sortingCode != "sortingCode error") {
emitTestFail("Expect shippingAddressErrors.sortingCode as 'sortingCode error', but got" +
emitTestFail("Expect shippingAddressErrors.sortingCode as 'sortingCode error', but got " +
errors.sortingCode);
}
}
function updateRequest(requestId) {
let request = paymentSrv.getPaymentRequestById(requestId);
const addressErrors = request.paymentDetails.shippingAddressErrors;
const payerErrors = request.paymentDetails.payerErrors;
checkAddressErrors(addressErrors);
if (DummyUIService.expectedCompleteStatus === "") {
const addressErrors = request.paymentDetails.shippingAddressErrors;
const payerErrors = request.paymentDetails.payerErrors;
checkAddressErrors(addressErrors);
} else {
if (request.completeStatus !== DummyUIService.expectedCompleteStatus) {
emitTestFail(`request.completeStatus should be '${DummyUIService.expectedCompleteStatus}', but got '${request.completeStatus}'.`);
}
}
rejectShow(requestId);
}
const DummyUIService = {
testName: "",
showAction: "",
expectedCompleteStatus: "",
showPayment: showRequest,
abortPayment: abortRequest,
completePayment: completeRequest,
@ -152,6 +152,41 @@ const DummyUIService = {
paymentSrv.setTestingUIService(DummyUIService.QueryInterface(Ci.nsIPaymentUIService));
addMessageListener("setup-update-with-errors", (testName) => {
DummyUIService.testName = testName;
DummyUIService.showAction = "update-shipping-address";
DummyUIService.expectedCompleteStatus = "";
sendAsyncMessage("setup-update-with-errors-complete");
});
addMessageListener("setup-no-onshippingaddresschange", (testName) => {
DummyUIService.testName = testName;
DummyUIService.showAction = "update-shipping-address";
DummyUIService.expectedCompleteStatus = "noeventhandler";
sendAsyncMessage("setup-no-onshippingaddresschange-complete");
});
addMessageListener("setup-no-onshippingoptionchange", (testName) => {
DummyUIService.testName = testName;
DummyUIService.showAction = "update-shipping-option";
DummyUIService.expectedCompleteStatus = "noeventhandler";
sendAsyncMessage("setup-no-onshippingoptionchange-complete");
});
addMessageListener("setup-show-wiht-pending-promise", (testName) => {
DummyUIService.testName = testName;
DummyUIService.showAction = "";
DummyUIService.expectedCompleteStatus = "timeout";
sendAsyncMessage("setup-show-wiht-pending-promise-complete");
});
addMessageListener("setup-timeout-handling", (testName) => {
DummyUIService.testName = testName;
DummyUIService.showAction = "update-shipping-address";
DummyUIService.expectedCompleteStatus = "timeout";
sendAsyncMessage("setup-timeout-handling-complete");
});
addMessageListener("teardown", function() {
paymentSrv.setTestingUIService(null);
sendAsyncMessage('teardown-complete');

View File

@ -26,6 +26,16 @@ https://bugzilla.mozilla.org/show_bug.cgi?id=1435157
gScript.addMessageListener("test-fail", testFailHandler);
gScript.addMessageListener("test-pass", testPassHandler);
async function requestChromeAction(action, params) {
await new Promise(resolve => {
gScript.addMessageListener(`${action}-complete`, function completeListener() {
gScript.removeMessageListener(`${action}-complete`, completeListener);
resolve();
});
gScript.sendAsyncMessage(action, params);
});
}
const addressErrors = {
addressLine: "addressLine error",
city: "city error",
@ -54,37 +64,104 @@ https://bugzilla.mozilla.org/show_bug.cgi?id=1435157
value: "1.00",
},
},
erros: "shipping address error",
error: "shipping address error",
shippingAddressErrors: addressErrors,
payerErrors: payErrors,
}
// testing functions
function testUpdateErrors() {
return new Promise((resolve, reject) => {
const payRequest = new PaymentRequest(defaultMethods, defaultDetails, defaultOptions);
payRequest.addEventListener("shippingaddresschange", event => {
async function testUpdateErrors() {
const testName = "testUpdateErrors";
await requestChromeAction("setup-update-with-errors", testName);
return new Promise(async (resolve) => {
const request = new PaymentRequest(defaultMethods, defaultDetails, defaultOptions);
await request.addEventListener("shippingaddresschange", event => {
event.updateWith(updateDetails);
});
payRequest.addEventListener("shippingoptionchange", event => {
event.updateWith(updatedDetails);
await request.addEventListener("shippingoptionchange", event => {
event.updateWith(updateDetails);
});
const handler = SpecialPowers.getDOMWindowUtils(window).setHandlingUserInput(true);
payRequest.show().then(response => {
ok(false, "Expected AbortError, but got pass");
resolve();
}, error => {
is(error.name, "AbortError", "Expect AbortError, but got " + error.name);
resolve();
}).catch( e => {
ok(false, "Unexpected error: " + e.name);
resolve();
}).finally(handler.destruct);
try {
const response = await request.show();
ok(false, `${testName}: expected 'AbortError', but got resolved.`);
} catch (error) {
is(error.name, "AbortError", `${testName}: expected 'AbortError'.`);
}
await handler.destruct();
resolve();
});
}
async function testNoEventHandler(testName, eventName) {
await requestChromeAction(`setup-no-${eventName}`, testName);
return new Promise(async (resolve) => {
const request = new PaymentRequest(defaultMethods, defaultDetails, defaultOptions);
const handler = SpecialPowers.getDOMWindowUtils(window).setHandlingUserInput(true);
try {
const response = await request.show();
ok(false, `${testName}: expected 'AbortError', but got resolved.`);
} catch (error) {
is(error.name, "AbortError", `${testName}: expected 'AbortError'.`);
}
await handler.destruct();
resolve();
});
}
async function testNoOnshippingaddresschange() {
const testName = "testNoOnshippingaddresschange";
return testNoEventHandler(testName, "onshippingaddresschange");
}
async function testNoOnshippingoptionchange() {
const testName = "testNoOnshippingoptionchange";
return testNoEventHandler(testName, "onshippingoptionchange");
}
async function pendingPromise() {
return new Promise((resolve) => {
});
}
async function testShowWithPendingPromise() {
const testName = "testShowWithPendingPromise";
await requestChromeAction("setup-show-wiht-pending-promise", testName);
return new Promise(async (resolve) => {
const request = new PaymentRequest(defaultMethods, defaultDetails, defaultOptions);
const handler = SpecialPowers.getDOMWindowUtils(window).setHandlingUserInput(true);
try {
const response = await request.show(pendingPromise());
ok(false, `${testName}: expected 'AbortError', but got resolved.`);
} catch (error) {
is(error.name, "AbortError", `${testName}: expected 'AbortError'.`);
}
await handler.destruct();
resolve();
});
}
async function testEventHandlingTimeout() {
const testName = "testEventHandlingTimeout";
await requestChromeAction("setup-timeout-handling", testName);
return new Promise(async (resolve) => {
const request = new PaymentRequest(defaultMethods, defaultDetails, defaultOptions);
request.addEventListener("shippingaddresschange", (event) => {});
request.addEventListener("shippingoptoinchange", (event) => {});
const handler = SpecialPowers.getDOMWindowUtils(window).setHandlingUserInput(true);
try {
const response = await request.show();
ok(false, `${testName}: expected 'AbortError', but got resolved.`);
} catch (error) {
is(error.name, "AbortError", `${testName}: expected 'AbortError'.`);
}
await handler.destruct();
resolve();
});
}
// teardown function
function teardown() {
async function teardown() {
gScript.addMessageListener("teardown-complete", function teardownCompleteHandler() {
gScript.removeMessageListener("teardown-complete", teardownCompleteHandler);
gScript.removeMessageListener("test-fail", testFailHandler);
@ -96,19 +173,25 @@ https://bugzilla.mozilla.org/show_bug.cgi?id=1435157
}
// test main body
function runTests() {
testUpdateErrors()
.then(teardown)
.catch( e => {
ok(false, "Unexpected error: " + e.name);
async function runTests() {
try {
await testUpdateErrors();
await testNoOnshippingaddresschange();
await testNoOnshippingoptionchange();
await testShowWithPendingPromise();
await testEventHandlingTimeout();
await teardown();
} catch (error) {
ok(false, `test_update_errors: unexpected error ${error.name}`);
SimpleTest.finish();
});
}
}
window.addEventListener('load', function() {
SpecialPowers.pushPrefEnv({
'set': [
['dom.payments.request.enabled', true],
['dom.payments.response.timeout', 1000],
]
}, runTests);
});