зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1478740 - mochitest for multiple PaymentRequest.show(). r= baku
Adding a testcase for testing multiple PaymentRequest.show() at the same time
This commit is contained in:
Родитель
dff10f1a39
Коммит
d1c216b95e
|
@ -0,0 +1,75 @@
|
|||
/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
|
||||
/* Any copyright is dedicated to the Public Domain.
|
||||
http://creativecommons.org/publicdomain/zero/1.0/ */
|
||||
"use strict";
|
||||
|
||||
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);
|
||||
}
|
||||
function emitTestPass(message) {
|
||||
sendAsyncMessage("test-pass", message);
|
||||
}
|
||||
|
||||
function rejectPayment(requestId) {
|
||||
const responseData = Cc["@mozilla.org/dom/payments/general-response-data;1"].
|
||||
createInstance(Ci.nsIGeneralResponseData);
|
||||
responseData.initData({});
|
||||
const showResponse = Cc["@mozilla.org/dom/payments/payment-show-action-response;1"].
|
||||
createInstance(Ci.nsIPaymentShowActionResponse);
|
||||
showResponse.init(requestId,
|
||||
Ci.nsIPaymentActionResponse.PAYMENT_REJECTED,
|
||||
"", // payment method
|
||||
responseData, // payment method data
|
||||
"", // payer name
|
||||
"", // payer email
|
||||
""); // payer phone
|
||||
paymentSrv.respondPayment(showResponse.QueryInterface(Ci.nsIPaymentActionResponse));
|
||||
}
|
||||
|
||||
const DummyUIService = {
|
||||
testName: "",
|
||||
requestId: "",
|
||||
showPayment(requestId) {
|
||||
this.requestId = requestId;
|
||||
sendAsyncMessage("showing-payment", {data:"successful"});
|
||||
},
|
||||
abortPayment(requestId) {
|
||||
this.requestId = requestId;
|
||||
},
|
||||
completePayment(requestId) {
|
||||
this.requestId = requestId;
|
||||
},
|
||||
updatePayment(requestId) {
|
||||
this.requestId = requestId;
|
||||
},
|
||||
closePayment(requestId) {
|
||||
this.requestId = requestId;
|
||||
},
|
||||
QueryInterface: ChromeUtils.generateQI([Ci.nsIPaymentUIService]),
|
||||
};
|
||||
|
||||
paymentSrv.setTestingUIService(DummyUIService.QueryInterface(Ci.nsIPaymentUIService));
|
||||
|
||||
addMessageListener("reject-payment", function() {
|
||||
rejectPayment(DummyUIService.requestId);
|
||||
sendAsyncMessage("reject-payment-complete");
|
||||
});
|
||||
|
||||
addMessageListener("start-test", function(testName) {
|
||||
DummyUIService.testName = testName;
|
||||
sendAsyncMessage("start-test-complete");
|
||||
});
|
||||
|
||||
addMessageListener("finish-test", function() {
|
||||
DummyUIService.testName = "";
|
||||
sendAsyncMessage("finish-test-complete");
|
||||
});
|
||||
|
||||
addMessageListener("teardown", function() {
|
||||
paymentSrv.setTestingUIService(null);
|
||||
sendAsyncMessage('teardown-complete');
|
||||
});
|
|
@ -0,0 +1,44 @@
|
|||
<!doctype html>
|
||||
<meta charset="utf-8">
|
||||
<title>Payment Request Testing</title>
|
||||
<script>
|
||||
const methods = [
|
||||
{
|
||||
supportedMethods: "basic-card",
|
||||
},
|
||||
];
|
||||
const details = {
|
||||
id: "simple details",
|
||||
total: {
|
||||
label: "Donation",
|
||||
amount: { currency: "USD", value: "55.00" },
|
||||
},
|
||||
};
|
||||
const updatedDetails = {
|
||||
id: "simple details",
|
||||
total: {
|
||||
label: "Donation",
|
||||
amount: { currency: "USD", value: "55.00" },
|
||||
},
|
||||
error: "",
|
||||
};
|
||||
|
||||
window.onmessage = async ({ data: action }) => {
|
||||
let msg = "successful";
|
||||
switch (action) {
|
||||
case "Show Payment":
|
||||
try {
|
||||
let request = new PaymentRequest(methods, details);
|
||||
let responsePromise = await request.show();
|
||||
} catch (err) {
|
||||
msg = err.name;
|
||||
}
|
||||
window.parent.postMessage(msg, "*")
|
||||
break;
|
||||
default:
|
||||
window.parent.postMessage(`fail - unknown postmessage action: ${action}`, "*");
|
||||
}
|
||||
};
|
||||
|
||||
window.parent.postMessage("successful", "*");
|
||||
</script>
|
|
@ -4,9 +4,11 @@ skip-if = !e10s || !nightly_build
|
|||
scheme = https
|
||||
support-files =
|
||||
blank_page.html
|
||||
bug1478740.html
|
||||
simple_payment_request.html
|
||||
echo_payment_request.html
|
||||
BasiccardChromeScript.js
|
||||
Bug1478740ChromeScript.js
|
||||
Bug1490698ChromeScript.js
|
||||
ClosePaymentChromeScript.js
|
||||
ConstructorChromeScript.js
|
||||
|
@ -26,6 +28,7 @@ run-if = nightly_build # Bug 1390018: Depends on the Nightly-only UI service
|
|||
[test_basiccard.html]
|
||||
[test_block_none10s.html]
|
||||
skip-if = e10s # Bug 1408250: Don't expose PaymentRequest Constructor in non-e10s
|
||||
[test_bug1478740.html]
|
||||
[test_bug1490698.html]
|
||||
[test_canMakePayment.html]
|
||||
run-if = nightly_build # Bug 1390737: Depends on the Nightly-only UI service
|
||||
|
|
|
@ -0,0 +1,139 @@
|
|||
<!DOCTYPE HTML>
|
||||
<html>
|
||||
<!--
|
||||
https://bugzilla.mozilla.org/show_bug.cgi?id=1478740
|
||||
-->
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>Test for retry PaymentRequest</title>
|
||||
<link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
|
||||
<script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
|
||||
<script type="application/javascript" src="DefaultData.js"></script>
|
||||
<script type="application/javascript">
|
||||
|
||||
"use strict";
|
||||
SimpleTest.waitForExplicitFinish();
|
||||
|
||||
const gUrl = SimpleTest.getTestFileURL('Bug1478740ChromeScript.js');
|
||||
const gScript = SpecialPowers.loadChromeScript(gUrl);
|
||||
|
||||
function testFailHandler(message) {
|
||||
ok(false, message);
|
||||
}
|
||||
function testPassHandler(message) {
|
||||
ok(true, message);
|
||||
}
|
||||
gScript.addMessageListener("test-fail", testFailHandler);
|
||||
gScript.addMessageListener("test-pass", testPassHandler);
|
||||
|
||||
async function requestChromeAction(action, params) {
|
||||
gScript.sendAsyncMessage(action, params);
|
||||
await new Promise(resolve => {
|
||||
gScript.addMessageListener(`${action}-complete`, function completeListener() {
|
||||
gScript.removeMessageListener(`${action}-complete`, completeListener);
|
||||
resolve();
|
||||
});
|
||||
});
|
||||
}
|
||||
function unexpectedErrMsg(testName, errName, timing) {
|
||||
return `${testName}: Unexpected error(${errName}) when ${timing} the PaymentRequest.`;
|
||||
}
|
||||
|
||||
function testMultipleShows() {
|
||||
return new Promise(async (resolve) => {
|
||||
const testName = "testMultipleShows";
|
||||
await requestChromeAction("start-test", testName);
|
||||
let expectedResults = ["successful",
|
||||
"successful",
|
||||
"successful",
|
||||
"AbortError",
|
||||
"AbortError",
|
||||
"AbortError"];
|
||||
let nextStatus = ["creating first page",
|
||||
"creating second page",
|
||||
"showing first payment",
|
||||
"showing second payment",
|
||||
"showing third payment",
|
||||
"aborting first payment"];
|
||||
let currStatus = nextStatus.shift();
|
||||
let ifr1 = document.createElement('iframe');
|
||||
let ifr2 = document.createElement('iframe');
|
||||
let listener = async function(event) {
|
||||
let expected = expectedResults.shift();
|
||||
is(event.data, expected,
|
||||
`${testName}: Expected '${expected}' when ${currStatus}, but got '${event.data}'`);
|
||||
switch (currStatus) {
|
||||
case "creating first page":
|
||||
ifr2.src = "bug1478740.html";
|
||||
document.body.appendChild(ifr2);
|
||||
break;
|
||||
case "creating second page":
|
||||
ifr1.contentWindow.postMessage("Show Payment", "*");
|
||||
break;
|
||||
case "showing first payment":
|
||||
ifr2.contentWindow.postMessage("Show Payment", "*");
|
||||
break;
|
||||
case "showing second payment":
|
||||
ifr2.contentWindow.postMessage("Show Payment", "*");
|
||||
break;
|
||||
case "showing third payment":
|
||||
await requestChromeAction("reject-payment");
|
||||
break;
|
||||
case "aborting first payment":
|
||||
window.removeEventListener("message", listener);
|
||||
gScript.removeMessageListener("showing-payment", listener);
|
||||
document.body.removeChild(ifr1);
|
||||
document.body.removeChild(ifr2);
|
||||
resolve();
|
||||
break;
|
||||
default:
|
||||
ok(false, `unknown status ${currStatus}`);
|
||||
}
|
||||
currStatus = nextStatus.shift();
|
||||
}
|
||||
window.addEventListener("message", listener);
|
||||
gScript.addMessageListener("showing-payment", listener);
|
||||
ifr1.src = "bug1478740.html";
|
||||
document.body.appendChild(ifr1);
|
||||
await requestChromeAction("finish-test");
|
||||
});
|
||||
}
|
||||
|
||||
function teardown() {
|
||||
return new Promise((resolve, reject) => {
|
||||
gScript.addMessageListener("teardown-complete", function teardownCompleteHandler() {
|
||||
gScript.removeMessageListener("teardown-complete", teardownCompleteHandler);
|
||||
gScript.removeMessageListener("test-fail", testFailHandler);
|
||||
gScript.removeMessageListener("test-pass", testPassHandler);
|
||||
gScript.destroy();
|
||||
SimpleTest.finish();
|
||||
resolve();
|
||||
});
|
||||
gScript.sendAsyncMessage("teardown");
|
||||
});
|
||||
}
|
||||
|
||||
async function runTests() {
|
||||
try {
|
||||
await testMultipleShows();
|
||||
await teardown();
|
||||
} catch(e) {
|
||||
ok(false, "Unexpected error: " + e.name);
|
||||
SimpleTest.finish();
|
||||
}
|
||||
}
|
||||
|
||||
window.addEventListener('load', function() {
|
||||
SpecialPowers.pushPrefEnv({
|
||||
'set': [
|
||||
['dom.payments.request.enabled', true],
|
||||
['dom.payments.request.user_interaction_required', false],
|
||||
]
|
||||
}, runTests);
|
||||
});
|
||||
</script>
|
||||
</head>
|
||||
<body>
|
||||
<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1478740">Mozilla Bug 1478740</a>
|
||||
</body>
|
||||
</html>
|
Загрузка…
Ссылка в новой задаче