mirror of
https://github.com/servo/servo.git
synced 2025-08-28 08:38:20 +01:00
Update web-platform-tests to revision c792ea26624bde49b72afce348de07ab72fb9ad7
This commit is contained in:
parent
e051c5880e
commit
ca45711d07
178 changed files with 2163 additions and 1807 deletions
|
@ -0,0 +1,262 @@
|
|||
<!doctype html>
|
||||
<meta charset="utf8">
|
||||
<link rel="help" href="https://w3c.github.io/payment-request/#dom-paymentresponse-retry">
|
||||
<title>
|
||||
PaymentResponse.prototype.retry() method
|
||||
</title>
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
<script src="helpers.js"></script>
|
||||
<script>
|
||||
test(() => {
|
||||
assert_true(
|
||||
"retry" in PaymentResponse.prototype,
|
||||
"retry must be in prototype"
|
||||
);
|
||||
assert_true(
|
||||
PaymentResponse.prototype.retry instanceof Function,
|
||||
"retry must be a function"
|
||||
);
|
||||
}, "PaymentResponse.prototype must have a retry() function (smoke test).");
|
||||
|
||||
function checkCompletedCantRetry(button) {
|
||||
button.disabled = true;
|
||||
promise_test(async t => {
|
||||
const { response } = await getPaymentRequestResponse();
|
||||
// sets response.[[complete]] to true.
|
||||
await response.complete("success");
|
||||
return promise_rejects(
|
||||
t,
|
||||
"InvalidStateError",
|
||||
response.retry({}),
|
||||
"response.[[complete]] is true, so rejects with InvalidStateError."
|
||||
);
|
||||
}, button.textContent.trim());
|
||||
}
|
||||
|
||||
function repeatedCallsToRetry(button) {
|
||||
button.disabled = true;
|
||||
promise_test(async t => {
|
||||
const { response } = await getPaymentRequestResponse();
|
||||
const retryPromise = response.retry({});
|
||||
await promise_rejects(
|
||||
t,
|
||||
"InvalidStateError",
|
||||
response.retry({}),
|
||||
"Calling retry() again rejects with an InvalidStateError"
|
||||
);
|
||||
await retryPromise;
|
||||
await response.complete("success");
|
||||
}, button.textContent.trim());
|
||||
}
|
||||
|
||||
function callCompleteWhileRetrying(button) {
|
||||
button.disabled = true;
|
||||
promise_test(async t => {
|
||||
const { response } = await getPaymentRequestResponse();
|
||||
const retryPromise = response.retry({});
|
||||
await promise_rejects(
|
||||
t,
|
||||
"InvalidStateError",
|
||||
response.complete("success"),
|
||||
"Calling complete() while retrying rejects with an InvalidStateError"
|
||||
);
|
||||
await retryPromise;
|
||||
await response.complete("success");
|
||||
}, button.textContent.trim());
|
||||
}
|
||||
|
||||
function callingRequestAbortMustNotAbort(button) {
|
||||
button.disabled = true;
|
||||
promise_test(async t => {
|
||||
const { response, request } = await getPaymentRequestResponse();
|
||||
const retryPromise = response.retry({});
|
||||
await promise_rejects(
|
||||
t,
|
||||
"InvalidStateError",
|
||||
request.abort(),
|
||||
"Calling request.abort() while retrying rejects with an InvalidStateError"
|
||||
);
|
||||
await retryPromise;
|
||||
await response.complete("success");
|
||||
}, button.textContent.trim());
|
||||
}
|
||||
|
||||
function canRetryMultipleTimes(button) {
|
||||
button.disabled = true;
|
||||
promise_test(async t => {
|
||||
const { response } = await getPaymentRequestResponse();
|
||||
assert_equals(
|
||||
await response.retry({}),
|
||||
undefined,
|
||||
"Expected undefined as the resolve value"
|
||||
);
|
||||
assert_equals(
|
||||
await response.retry({}),
|
||||
undefined,
|
||||
"Expected undefined as the resolve value"
|
||||
);
|
||||
await response.complete("success");
|
||||
await promise_rejects(
|
||||
t,
|
||||
"InvalidStateError",
|
||||
response.retry({}),
|
||||
"Calling retry() after complete() rejects with a InvalidStateError"
|
||||
);
|
||||
}, button.textContent.trim());
|
||||
}
|
||||
|
||||
function userCanAbortARetry(button) {
|
||||
button.disabled = true;
|
||||
promise_test(async t => {
|
||||
const { response } = await getPaymentRequestResponse();
|
||||
await promise_rejects(
|
||||
t,
|
||||
"AbortError",
|
||||
response.retry({}),
|
||||
"The user aborting a retry rejects with a AbortError"
|
||||
);
|
||||
await promise_rejects(
|
||||
t,
|
||||
"InvalidStateError",
|
||||
response.retry({}),
|
||||
"After the user aborts, response [[complete]] is true so retry() must reject with InvalidStateError"
|
||||
);
|
||||
await promise_rejects(
|
||||
t,
|
||||
"InvalidStateError",
|
||||
response.complete("success"),
|
||||
"After the user aborts, response [[complete]] is true, so complete() rejects with a InvalidStateError"
|
||||
);
|
||||
}, button.textContent.trim());
|
||||
}
|
||||
|
||||
function abortTheUpdate(button) {
|
||||
button.disabled = true;
|
||||
promise_test(async t => {
|
||||
const { response, request } = await getPaymentRequestResponse();
|
||||
// causes "abort the update" to run
|
||||
const shippingChangedPromise = new Promise(resolve => {
|
||||
request.onshippingoptionchange = () => {
|
||||
event.updateWith({ total: { amount: { currency: "USD", value: "INVALID" } }});
|
||||
resolve();
|
||||
};
|
||||
});
|
||||
const retryPromise = response.retry({});
|
||||
await shippingChangedPromise;
|
||||
await promise_rejects(
|
||||
t,
|
||||
"TypeError",
|
||||
retryPromise,
|
||||
"retry() aborts with a TypeError, because totals' value is invalid"
|
||||
);
|
||||
await promise_rejects(
|
||||
t,
|
||||
"InvalidStateError",
|
||||
response.complete("success"),
|
||||
"After the user aborts, response [[complete]] is true, so complete() rejects with a InvalidStateError"
|
||||
);
|
||||
}, button.textContent.trim());
|
||||
}
|
||||
|
||||
function callingRetryReturnsUniquePromise(button){
|
||||
button.disabled = true;
|
||||
promise_test(async t => {
|
||||
const request = new PaymentRequest(defaultMethods, defaultDetails);
|
||||
const retryPromise = request.retry();
|
||||
const promises = new Set([
|
||||
retryPromise,
|
||||
request.retry(),
|
||||
request.retry(),
|
||||
]);
|
||||
assert_equals(promises.size, 3, "Must have three unique objects");
|
||||
await retryPromise;
|
||||
await response.complete();
|
||||
}, button.textContent.trim());
|
||||
};
|
||||
|
||||
|
||||
</script>
|
||||
<h2>
|
||||
Manual Tests for PaymentResponse.retry() - Please run in order!
|
||||
</h2>
|
||||
<p>
|
||||
Click on each button in sequence from top to bottom without refreshing the page.
|
||||
Each button will bring up the Payment Request UI window.
|
||||
</p>
|
||||
<p>
|
||||
When presented with the payment sheet, use any credit card select to "Pay" multiple times.
|
||||
</p>
|
||||
<ol>
|
||||
<li>
|
||||
<button onclick="checkCompletedCantRetry(this);">
|
||||
A completed payment request cannot be retried.
|
||||
</button>
|
||||
</li>
|
||||
<li>
|
||||
<button onclick="repeatedCallsToRetry(this);">
|
||||
Calling retry() more than once yield a rejected promise, but the
|
||||
retryPromise resolves independently.
|
||||
</button>
|
||||
</li>
|
||||
<li>
|
||||
<button onclick="callCompleteWhileRetrying(this);">
|
||||
Calling complete() while a retry() is in progress results in an InvalidStateError.
|
||||
</button>
|
||||
</li>
|
||||
<li>
|
||||
<button onclick="callingRequestAbortMustNotAbort(this);">
|
||||
Trying to abort() via PaymentRequest is not possible.
|
||||
</button>
|
||||
</li>
|
||||
<li>
|
||||
<button onclick="canRetryMultipleTimes(this);">
|
||||
It's possible to retry() multiple times and eventually complete().
|
||||
After complete(), however, retry() rejects with an InvalidStateError.
|
||||
</button>
|
||||
</li>
|
||||
<li>
|
||||
<p>
|
||||
When shown the payment sheet, hit pay once, then abort retrying the payment.
|
||||
</p>
|
||||
<button onclick="userCanAbortARetry(this);">
|
||||
The user aborting retrying a payment causes the retryPromise to reject with AbortError.
|
||||
Aborting a payment is causes it complete.
|
||||
</button>
|
||||
</li>
|
||||
<li>
|
||||
<p>
|
||||
When shown the payment sheet, hit pay once. Check payment sheet for error fields.
|
||||
Then hit escape or otherwise abort the payment.
|
||||
</p>
|
||||
<button onclick="userIsShownErrorsFields(this);">
|
||||
When retrying, the user is shown error fields to fix.
|
||||
</button>
|
||||
</li>
|
||||
<li>
|
||||
<p>
|
||||
When shown the payment sheet, hit pay once. Then retry once.
|
||||
</p>
|
||||
<button onclick="abortTheUpdate(this);">
|
||||
When "abort the update" occurs because of an update error,
|
||||
the `retryPromise` is rejected and response.[[complete]] becomes true.
|
||||
</button>
|
||||
</li>
|
||||
<li>
|
||||
<p>
|
||||
When shown the payment sheet, hit pay once. Then retry once.
|
||||
</p>
|
||||
<button onclick="callingRetryReturnsUniquePromise(this);">
|
||||
Calling retry() multiple times is always a new object.
|
||||
</button>
|
||||
</li>
|
||||
<li>
|
||||
<button onclick="done();">
|
||||
Done!
|
||||
</button>
|
||||
</li>
|
||||
</ol>
|
||||
<small>
|
||||
If you find a buggy test, please <a href="https://github.com/w3c/web-platform-tests/issues">file a bug</a>
|
||||
and tag one of the <a href="https://github.com/w3c/web-platform-tests/blob/master/payment-request/OWNERS">owners</a>.
|
||||
</small>
|
Loading…
Add table
Add a link
Reference in a new issue