<!doctype html>
<title>ProgressEvent constructor</title>
<script src=/resources/testharness.js></script>
<script src=/resources/testharnessreport.js></script>
<div id=log></div>
<script>
test(function() {
  var ev = new ProgressEvent("test")
  assert_equals(ev.type, "test")
  assert_equals(ev.target, null)
  assert_equals(ev.currentTarget, null)
  assert_equals(ev.eventPhase, Event.NONE)
  assert_equals(ev.bubbles, false)
  assert_equals(ev.cancelable, false)
  assert_equals(ev.defaultPrevented, false)
  assert_true(ev.timeStamp > 0)
  assert_true("initEvent" in ev)
  assert_equals(ev.lengthComputable, false)
  assert_equals(ev.loaded, 0)
  assert_equals(ev.total, 0)
}, "Default event values.")
test(function() {
  var ev = new ProgressEvent("test")
  assert_equals(ev["initProgressEvent"], undefined)
}, "There must not be a initProgressEvent().")
test(function() {
  var ev = new ProgressEvent("I am an event", { type: "trololol", bubbles: true, cancelable: false})
  assert_equals(ev.type, "I am an event")
  assert_equals(ev.bubbles, true)
  assert_equals(ev.cancelable, false)
}, "Basic test.")
test(function() {
  var ev = new ProgressEvent(null, { lengthComputable: "hah", loaded: "2" })
  assert_equals(ev.type, "null")
  assert_equals(ev.lengthComputable, true)
  assert_equals(ev.loaded, 2)
}, "ECMAScript value conversion test.")
test(function() {
  var ev = new ProgressEvent("Xx", { lengthcomputable: true})
  assert_equals(ev.type, "Xx")
  assert_equals(ev.lengthComputable, false)
}, "ProgressEventInit members must be matched case-sensitively.")
</script>
