mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-08 02:14:43 +00:00
Bug 1498310 - Mochitest updation. r=baku
--HG-- extra : rebase_source : 71eb72dad95ae458a3adfe0d43255bd475b1bb6a
This commit is contained in:
parent
4f622b5882
commit
0f214b6b1d
@ -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');
|
||||
|
@ -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);
|
||||
});
|
||||
|
Loading…
Reference in New Issue
Block a user