<!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>

