<!DOCTYPE html>
<head>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
</head>
<body>
  <div><a></a></div>
  <script>
    var whitespaces = [
      "1680", "2000", "2001", "2002", "2003", "2004", "2005", "2006", "2007",
      "2008", "2009", "200a", "2028", "205f", "3000"
    ];

    for (var i = 0; i < whitespaces.length; i++) {
      var container = document.querySelector('a').parentNode;
      var entity = `&#x${whitespaces[i]};`;
      var character = String.fromCharCode(parseInt(whitespaces[i], 16));
      var url = encodeURIComponent(character);
      container.innerHTML = `<a href="${entity}javascript:alert(1)">Link</a>`;

      var a = document.querySelector('a');

      test(_ => {
        assert_equals(
            container.innerHTML,
            `<a href="${character}javascript:alert(1)">Link</a>`);
      }, `innerHTML before setter: ${whitespaces[i]}`);
      test(_ => {
        assert_equals(
            a.href,
            `http://{{host}}:{{ports[http][0]}}/domparsing/${url}javascript:alert(1)`);
      }, `href before setter: ${whitespaces[i]}`);

      a.parentNode.innerHTML += 'foo';
      a = document.querySelector('a');

      test(_ => {
        assert_equals(
            container.innerHTML,
            `<a href="${character}javascript:alert(1)">Link</a>foo`);
      }, `innerHTML after setter: ${whitespaces[i]}`);
      test(_ => {
        assert_equals(
            a.href,
            `http://{{host}}:{{ports[http][0]}}/domparsing/${url}javascript:alert(1)`);
      }, `href after setter: ${whitespaces[i]}`);
    }
  </script>
</body>
