payment-request-abort-method.https.html (3368B)
1 <!DOCTYPE html> 2 <meta charset="utf-8" /> 3 <title>Test for PaymentRequest.abort() method</title> 4 <link rel="help" href="https://w3c.github.io/payment-request/#abort-method" /> 5 <script src="/resources/testharness.js"></script> 6 <script src="/resources/testharnessreport.js"></script> 7 <script src="/resources/testdriver.js"></script> 8 <script src="/resources/testdriver-vendor.js"></script> 9 <script> 10 "use strict"; 11 setup({ 12 // Ignore unhandled rejections resulting from .show()'s acceptPromise 13 // not being explicitly handled. 14 allow_uncaught_exception: true, 15 explicit_timeout: true, 16 }); 17 const basicCard = Object.freeze({ supportedMethods: "basic-card" }); 18 const applePay = Object.freeze({ 19 supportedMethods: "https://apple.com/apple-pay", 20 data: { 21 version: 3, 22 merchantIdentifier: "merchant.com.example", 23 countryCode: "US", 24 merchantCapabilities: ["supports3DS"], 25 supportedNetworks: ["visa"], 26 }, 27 }); 28 const defaultMethods = Object.freeze([basicCard, applePay]); 29 const defaultDetails = Object.freeze({ 30 total: { 31 label: "Total", 32 amount: { 33 currency: "USD", 34 value: "1.00", 35 }, 36 }, 37 }); 38 39 promise_test(async t => { 40 // request is in "created" state 41 const request = new PaymentRequest(defaultMethods, defaultDetails); 42 await promise_rejects_dom(t, "InvalidStateError", request.abort()); 43 }, `Throws if the promise [[state]] is not "interactive"`); 44 45 promise_test(async t => { 46 const request = new PaymentRequest(defaultMethods, defaultDetails); 47 const promises = new Set([ 48 request.abort(), 49 request.abort(), 50 request.abort(), 51 ]); 52 assert_equals(promises.size, 3, "Must have three unique objects"); 53 }, "Calling abort() multiple times is always a new object."); 54 55 promise_test(async t => { 56 const request = new PaymentRequest(defaultMethods, defaultDetails); 57 await test_driver.bless("show payment request"); 58 const acceptPromise = request.show(); 59 await request.abort(); 60 await promise_rejects_dom(t, "AbortError", acceptPromise); 61 // As request is now "closed", trying to show it will fail 62 await test_driver.bless("show payment request"); 63 await promise_rejects_dom(t, "InvalidStateError", request.show()); 64 }, "The same request cannot be shown multiple times."); 65 66 promise_test(async t => { 67 // request is in "created" state. 68 const request = new PaymentRequest(defaultMethods, defaultDetails); 69 await promise_rejects_dom(t, "InvalidStateError", request.abort()); 70 // Call it again, for good measure. 71 await promise_rejects_dom(t, "InvalidStateError", request.abort()); 72 // The request's state is "created", so let's show it 73 // which changes the state to "interactive.". 74 await test_driver.bless("show payment request"); 75 const acceptPromise = request.show(); 76 // Let's set request the state to "closed" by calling .abort() 77 await request.abort(); 78 // The request is now "closed", so... 79 await promise_rejects_dom(t, "InvalidStateError", request.abort()); 80 await promise_rejects_dom(t, "AbortError", acceptPromise); 81 }, "Aborting a request before it is shown doesn't prevent it from being shown later."); 82 </script> 83 <small> 84 If you find a buggy test, please 85 <a href="https://github.com/web-platform-tests/wpt/issues">file a bug</a> and 86 tag one of the 87 <a 88 href="https://github.com/web-platform-tests/wpt/blob/master/payment-request/META.yml" 89 >suggested reviewers</a 90 >. 91 </small>