| <!doctype html> |
| <meta charset="utf8"> |
| <link rel="help" href="https://www.w3.org/TR/payment-request/#paymentaddress-interface"> |
| <title> |
| PaymentResponse.prototype.shippingAddress |
| </title> |
| <script src="/resources/testharness.js"></script> |
| <script src="/resources/testharnessreport.js"></script> |
| <script src="../payment-response/helpers.js"></script> |
| <script> |
| const options = { requestShipping: true }; |
| function runManualTest(button, expected = {}) { |
| button.disabled = true; |
| promise_test(async () => { |
| const { response } = await getPaymentRequestResponse(options); |
| await response.complete(); |
| assert_idl_attribute(response, "shippingAddress"); |
| const { shippingAddress: addr } = response; |
| assert_true( |
| addr instanceof PaymentAddress, |
| "Expect instance of PaymentAddress" |
| ); |
| // An [ISO3166] alpha-2 code. The canonical form is upper case. |
| const { country } = addr; |
| assert_equals(country.length, 2, "Expected length is 2"); |
| assert_true(/^[A-Z]{2}$/.test(country), "Canonical form is upper case"); |
| assert_true( |
| addr.addressLine instanceof Array, |
| "Expected addressLine to be an array" |
| ); |
| assert_throws( |
| new TypeError(), |
| () => { |
| addr.addressLine.push("this must throw"); |
| }, |
| "Array must be frozen" |
| ); |
| for (let [attr, expectedValue] of Object.entries(expected)) { |
| assert_idl_attribute(addr, attr); |
| const msg = `Expected paymentAddress.${attr} to equal ${expectedValue}.`; |
| //.toString() flattens array addressLine, |
| //.toLowerCase() because case can't be enforced for some attributes |
| const actualValue = addr[attr].toString().toLowerCase(); |
| expectedValue = expectedValue.toString().toLowerCase(); |
| assert_equals(actualValue, expectedValue, msg); |
| } |
| // Check toJSON result |
| for (let [prop, jsonValue] of Object.entries(addr.toJSON())) { |
| const actualValue = jsonValue.toString().toLowerCase(); |
| const expectedValue = expected[prop].toString().toLowerCase(); |
| const msg = `Expected JSON ${prop} to be ${expectedValue}`; |
| assert_equals(actualValue, expectedValue, msg); |
| } |
| }, button.textContent.trim()); |
| done(); |
| } |
| </script> |
| <h2>PaymentAddress interface</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 prompted, please enter addresses as follows... |
| </p> |
| <ol> |
| <li> |
| <button onclick=" |
| const expectedAddress = { |
| country: 'AU', |
| regionCode: 'QLD', |
| addressLine: '55 test st', |
| city: 'Chapel Hill', |
| dependentLocality: '', |
| postalCode: '6095', |
| sortingCode: '', |
| organization: 'w3c', |
| recipient: 'web platform test', |
| phone: '+61733780000', |
| }; |
| runManualTest(this, expectedAddress);"> |
| If the requestShipping member is true, then shippingAddress's PaymentAddress must match the expected values. |
| </button> |
| Please use: |
| <dl> |
| <dt>Recipient:</dt> |
| <dd>web platform test</dd> |
| <dt>Address line:</dt> |
| <dd>55 test st</dd> |
| <dt>Country</dt> |
| <dd>Australia</dd> |
| <dt>City</dt> |
| <dd>Chapel Hill</dd> |
| <dd>State/Region</dd> |
| <dd>Queensland</dd> |
| <dt>postal code </dt> |
| <dd>6095</dd> |
| <dt>organization</dt> |
| <dd>w3c</dd> |
| <dt>Phone number</dt> |
| <dd>+61 7 3378 0000</dd> |
| </dl> |
| </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> |