<!doctype html>
<html>
  <head>
    <title>XMLHttpRequest: responseText decoding</title>
    <script src="/resources/testharness.js"></script>
    <script src="/resources/testharnessreport.js"></script>
    <link rel="help" href="https://xhr.spec.whatwg.org/#the-responsetext-attribute" data-tested-assertations="following::ol[1]/li[4]" />
    <link rel="help" href="https://xhr.spec.whatwg.org/#text-response-entity-body" data-tested-assertations="following::ol[1]/li[2] following::ol[1]/li[3] following::ol[1]/li[4] following::ol[1]/li[5]" />
  </head>
  <body>
    <div id="log"></div>
    <script>
      function request(type, input, output, responseType) {
        var test = async_test(document.title + " (" + type + " " + input + ")");
        test.step(function() {
          var client = new XMLHttpRequest()
          if (responseType !== undefined) {
            client.responseType = responseType
          }
          client.open("GET", "resources/status.py?content=" + input + "&type=" + encodeURIComponent(type), true)
          client.onload = function(){
            test.step(function(){
              assert_equals(client.responseText, output)
              test.done()
            })
          }
          client.send(null)
        })
      }
      request("application/xml", encodeURIComponent("<?xml version='1.0' encoding='windows-1252'?><x>")+'%FF'+encodeURIComponent("<\/x>"), "<?xml version='1.0' encoding='windows-1252'?><x>\u00FF<\/x>")
      request("text/html", encodeURIComponent("<!doctype html><meta charset=windows-1252>")+"%FF", "<!doctype html><meta charset=windows-1252>\u00FF")
      request("text/plain;charset=windows-1252", "%FF", "\u00FF")
      request("text/plain", "%FF", "\uFFFD")
      request("text/plain", "%FE%FF", "")
      request("text/plain", "%FE%FF%FE%FF", "\uFEFF")
      request("text/plain", "%EF%BB%BF", "")
      request("text/plain", "%EF%BB%BF%EF%BB%BF", "\uFEFF")
      request("text/plain", "%C2", "\uFFFD")

      // XXX might need fixing
      request("text/xml", "%FE%FF", "")
      request("text/xml", "%FE%FF%FE%FF", "\uFEFF")
      request("text/xml", "%EF%BB%BF", "")
      request("text/xml", "%EF%BB%BF%EF%BB%BF", "\uFEFF")
      request("text/plain", "%E3%81%B2", "\u3072", 'text')
      // the point of the following test: setting responseType=text should (per spec #text-response-entity-body point 3)
      // skip some of the charset detection even for XML resources. The test uses a wilfully mislabelled XMLish response
      // and the pass condition is that the responseType = text makes the decoder fall back to UTF-8
      request("text/xml", encodeURIComponent("<?xml version='1.0' encoding='windows-1252'?><x>")+"%E3%81%B2"+encodeURIComponent("<\/x>"), "<?xml version='1.0' encoding='windows-1252'?><x>\u3072<\/x>", 'text')
    </script>
  </body>
</html>
