onpaymentmethodchange-attribute.https.html (2699B)
1 <!DOCTYPE html> 2 <meta charset="utf-8"> 3 <title>Test for onpaymentmethodchange attribute</title> 4 <link rel="help" href="https://w3c.github.io/browser-payment-api/#onpaymentmethodchange-attribute"> 5 <script src="/resources/testharness.js"></script> 6 <script src="/resources/testharnessreport.js"></script> 7 <script> 8 "use strict"; 9 const testMethod = Object.freeze({ supportedMethods: "not-a-real-method" }); 10 const applePay = Object.freeze({ 11 supportedMethods: "https://apple.com/apple-pay", 12 data: { 13 version: 3, 14 merchantIdentifier: "merchant.com.example", 15 countryCode: "US", 16 merchantCapabilities: ["supports3DS"], 17 supportedNetworks: ["visa"], 18 } 19 }); 20 const defaultMethods = Object.freeze([testMethod, applePay]); 21 const defaultDetails = Object.freeze({ 22 total: { 23 label: "Total", 24 amount: { 25 currency: "USD", 26 value: "1.00", 27 }, 28 }, 29 }); 30 31 test(() => { 32 const request = new PaymentRequest(defaultMethods, defaultDetails); 33 assert_idl_attribute(request, "onpaymentmethodchange"); 34 }, "Must have a onpaymentmethodchange IDL attribute"); 35 36 test(() => { 37 const request = new PaymentRequest(defaultMethods, defaultDetails); 38 const ev = new Event("paymentmethodchange"); 39 let didHandle = false; 40 request.onpaymentmethodchange = evt => { 41 assert_equals(ev, evt, "must be same event"); 42 didHandle = true; 43 }; 44 request.dispatchEvent(ev); 45 assert_true(didHandle, "event did not fire"); 46 }, `onpaymentmethodchange attribute is a generic handler for "paymentmethodchange"`); 47 48 test(() => { 49 const request = new PaymentRequest(defaultMethods, defaultDetails); 50 const ev = new PaymentMethodChangeEvent("paymentmethodchange"); 51 let didHandle = false; 52 request.onpaymentmethodchange = evt => { 53 assert_equals(ev, evt, "must be same event"); 54 didHandle = true; 55 }; 56 request.dispatchEvent(ev); 57 assert_true(didHandle, "event did not fire"); 58 }, `onpaymentmethodchange attribute is a handler for PaymentMethodChangeEvent`); 59 60 test(() => { 61 const request = new PaymentRequest(defaultMethods, defaultDetails); 62 const ev = new PaymentMethodChangeEvent("paymentmethodchange", { 63 methodName: "test" 64 }); 65 let didHandle = false; 66 let didListen = false; 67 request.onpaymentmethodchange = evt => { 68 assert_equals(ev, evt, "must be same event"); 69 didHandle = true; 70 }; 71 request.addEventListener("paymentmethodchange", evt => { 72 assert_equals(ev, evt, "must be same event"); 73 didListen = true; 74 }); 75 request.dispatchEvent(ev); 76 assert_true(didHandle, "onpaymentmethodchange did not receive the event"); 77 assert_true(didListen, "addEventListener did not receive the event"); 78 }, `onpaymentmethodchange attribute and listeners both work`); 79 </script>