<!doctype html>
<meta charset="utf8">
<link rel="help" href="https://w3c.github.io/payment-request/#dom-paymentresponse-shippingoption">
<title>
  PaymentResponse.prototype.complete() method
</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="helpers.js"></script>
<h2>shippingOption 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>
  For the last test, please select the only available shipping option and select "Pay".
</p>
<ol>
  <li>
    <button onclick="runManualTest(this, undefined, { shippingOption: null })">
      If the options is undefined, then shippingOption must be null.
    </button>
  </li>
  <li>
    <button onclick="runManualTest(this, { requestShipping: undefined }, { shippingOption: null })">
      If the requestShipping member is missing, then shippingOption must be null.
    </button>
  </li>
  <li>
    <button onclick="runManualTest(this, { requestShipping: false }, { shippingOption: null })">
      If the requestShipping member is false, then shippingOption must be null.
    </button>
  </li>
  <li>
    <button onclick="runManualTest(this, { requestShipping: true }, { shippingOption: 'pass' }).then(done)">
      If the requestShipping member is true, then shippingOption must be the id of the selected shipping option ("pass").
    </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>
