| <!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="/resources/testharness.js"></script> | |
| <script src="/resources/testharnessreport.js"></script> | |
| <script> | |
| setup({ explicit_done: true, explicit_timeout: true }); | |
| const applePay = Object.freeze({ | |
| supportedMethods: "https://apple.com/apple-pay", | |
| data: { | |
| version: 3, | |
| merchantIdentifier: "merchant.com.example", | |
| countryCode: "US", | |
| merchantCapabilities: ["supports3DS"], | |
| supportedNetworks: ["visa"], | |
| } | |
| }); | |
| const validMethod = Object.freeze({ supportedMethods: "basic-card" }); | |
| const validMethods = Object.freeze([validMethod, 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() { | |
| promise_test(async t => { | |
| const request = new PaymentRequest( | |
| validMethods, | |
| validDetails, | |
| requestShipping | |
| ); | |
| assert_equals( | |
| request.shippingAddress, | |
| null, | |
| "request.shippingAddress must initially be null" | |
| ); | |
| 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]); | |
| results.forEach(obj => { | |
| assert_true(obj instanceof ContactAddress, | |
| "Expected instance of ContactAddress"); | |
| assert_equals(obj.organization, "", "organization should be redacted"); | |
| assert_equals(obj.phone, "", "phone should be redacted"); | |
| assert_equals(obj.recipient, "", "recipient should be redacted"); | |
| assert_equals(obj.addressLine.length, 0, "addressLine should be redacted"); | |
| }); | |
| await request.abort(); | |
| }); | |
| done(); | |
| } | |
| </script> | |
| <h2>PaymentRequest shippingAddress attribute</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 the payment sheet is presented, enter or select a shipping address. | |
| </p> | |
| <ol> | |
| <li> | |
| <button onclick="testShippingAddressChange()"> | |
| When the shipping address is manually changed, request.shippingAddress is a ContactAddress. | |
| </button> | |
| </li> | |
| </ol> | |
| <small> | |
| If you find a buggy test, please <a href="https://github.com/web-platform-tests/wpt/issues">file a bug</a> | |
| and tag one of the <a href="https://github.com/web-platform-tests/wpt/blob/master/payment-request/META.yml">suggested reviewers</a>. | |
| </small> |