| <!doctype html> |
| <meta charset="utf8"> |
| <link rel="help" href="https://w3c.github.io/payment-request/#dom-paymentresponse-complete()"> |
| <title> |
| PaymentResponse.prototype.complete() method |
| </title> |
| <script src="/js-test-resources/ui-helper.js"></script> |
| <script src="/resources/payment-request.js"></script> |
| <script src="/resources/testharness.js"></script> |
| <script src="/resources/testharnessreport.js"></script> |
| <script src="resources/helpers.js"></script> |
| <script> |
| async function runTest({ completeWith: result }, button) { |
| button.disabled = true; |
| const { response, request } = await getPaymentRequestResponse(); |
| promise_test(async () => { |
| try { |
| // We .complete() as normal, using the passed test value |
| const promise = response.complete(result); |
| assert_true(promise instanceof Promise, "returns a promise"); |
| const returnedValue = await promise; |
| assert_equals( |
| returnedValue, |
| undefined, |
| "Returned value must always be undefined" |
| ); |
| // We now call .complete() again, to force an exception |
| // because [[completeCalled]] is true. |
| try { |
| await response.complete(result); |
| assert_unreached("Expected InvalidStateError to be thrown"); |
| } catch (err) { |
| assert_equals( |
| err.code, |
| DOMException.INVALID_STATE_ERR, |
| "Must throw an InvalidStateError" |
| ); |
| } |
| button.innerHTML = `✅ ${button.textContent}`; |
| } catch (err) { |
| button.innerHTML = `❌ ${button.textContent}`; |
| assert_unreached("Unexpected exception: " + err.message); |
| } |
| }, button.textContent.trim()); |
| } |
| </script> |
| <ol> |
| <li> |
| <button id="button1"> |
| If the value of the internal slot [[completeCalled]] is true, |
| reject promise with an "InvalidStateError" DOMException. |
| </button> |
| </li> |
| <li> |
| <button id="button2"> |
| Passing no argument defaults to "unknown", |
| eventually closing the sheet and doesn't throw. |
| </button> |
| </li> |
| <li> |
| <button id="button3"> |
| Passing "success" eventually closes the sheet and doesn't throw. |
| </button> |
| </li> |
| <li> |
| <button id="button4"> |
| Passing "fail" eventually closes the sheet and doesn't throw. |
| </button> |
| </li> |
| </ol> |
| <script> |
| async function runTests() |
| { |
| await runTest({completeWith: "success"}, document.getElementById("button1")); |
| await runTest({completeWith: "unknown"}, document.getElementById("button2")); |
| await runTest({completeWith: "success"}, document.getElementById("button3")); |
| await runTest({completeWith: "fail"}, document.getElementById("button4")); |
| done(); |
| } |
| runTests(); |
| </script> |