| <!DOCTYPE html> |
| <!-- Copyright © 2017 Chromium authors and World Wide Web Consortium, (Massachusetts Institute of Technology, ERCIM, Keio University, Beihang). --> |
| <meta charset="utf-8"> |
| <title>Test for PaymentRequest shippingAddress attribute</title> |
| <link rel="help" href="https://w3c.github.io/payment-request/#shippingaddress-attribute"> |
| <link rel="help" href="https://w3c.github.io/payment-request/#onshippingaddresschange-attribute"> |
| <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> |
| <body> |
| <script> |
| setup({ explicit_done: true, explicit_timeout: true }); |
| const applePay = Object.freeze({ |
| supportedMethods: "https://apple.com/apple-pay", |
| data: { |
| version: 2, |
| merchantIdentifier: '', |
| merchantCapabilities: ['supports3DS'], |
| supportedNetworks: ['visa', 'masterCard'], |
| countryCode: 'US', |
| }, |
| }); |
| const validMethods = Object.freeze([applePay]); |
| const validAmount = Object.freeze({ currency: "USD", value: "5.00" }); |
| const validTotal = Object.freeze({ |
| label: "label", |
| amount: validAmount, |
| }); |
| const validShippingOption = Object.freeze({ |
| id: "valid", |
| label: "Shipping Option", |
| amount: validAmount, |
| selected: false, |
| }); |
| const validDetails = Object.freeze({ |
| total: validTotal, |
| shippingOptions: [validShippingOption], |
| }); |
| const requestShipping = Object.freeze({ |
| requestShipping: true, |
| }); |
| |
| function testShippingAddressChange() { |
| const shippingAddress = { |
| countryCode: 'US', |
| addressLines: [''], |
| administrativeArea: '', |
| locality: '', |
| subLocality: '', |
| postalCode: '', |
| localizedName: '', |
| phoneNumber: '', |
| emailAddress: '', |
| }; |
| internals.mockPaymentCoordinator.setShippingAddress(shippingAddress); |
| user_activation_test(async t => { |
| const request = new PaymentRequest( |
| validMethods, |
| validDetails, |
| requestShipping |
| ); |
| assert_equals( |
| request.shippingAddress, |
| null, |
| "request.shippingAddress must initially be null" |
| ); |
| request.onmerchantvalidation = event => { |
| event.complete({ }); |
| }; |
| const listenerPromise = new Promise(resolve => { |
| request.addEventListener("shippingaddresschange", () => { |
| resolve(request.shippingAddress); |
| }); |
| }); |
| const handlerPromise = new Promise(resolve => { |
| request.onshippingaddresschange = () => { |
| resolve(request.shippingAddress); |
| }; |
| }); |
| request.show().catch(err => err); |
| const results = await Promise.all([listenerPromise, handlerPromise]); |
| assert_true( |
| results.every(obj => obj instanceof PaymentAddress), |
| "Expected instances of PaymentAddress" |
| ); |
| await request.abort(); |
| }); |
| done(); |
| } |
| testShippingAddressChange(); |
| </script> |
| |