<!doctype html>
<html>
  <head>
    <title>XMLHttpRequest: implements EventTarget</title>
    <script src="/resources/testharness.js"></script>
    <script src="/resources/testharnessreport.js"></script>
    <link rel="help" href="https://xhr.spec.whatwg.org/#xmlhttprequesteventtarget" data-tested-assertations=".." />
    <!-- Obviously, most of the stuff actually being tested here is covered in the DOM events spec, not in the XHR spec -->
  </head>
  <body>
    <div id="log"></div>
    <script>
      var test = async_test(),
          x = null,
          expected = ["a1", "b1", "c1", "a2", "b2", "c2", "a3", "c3", "a4", "c4"],
          result = []
      function callback(e) {
        result.push("b" + x.readyState)
        test.step(function() {
          if(x.readyState == 3)
            assert_unreached()
        })
      }
      test.step(function() {
        x = new XMLHttpRequest()
        x.onreadystatechange = function() {
          test.step(function() {
            result.push("a" + x.readyState)
          })
        }
        x.addEventListener("readystatechange", callback, false)
        x.addEventListener("readystatechange", function() {
          test.step(function() {
            result.push("c" + x.readyState)
            if(x.readyState == 2)
              x.removeEventListener("readystatechange", callback, false)
            if(x.readyState == 4) {
              assert_array_equals(result, expected)
              test.done()
            }
          })
        }, false)
        x.open("GET", "folder.txt")
        x.send(null)
      })
    </script>
  </body>
</html>
