<!doctype html>
<title>Event constructors</title>
<script src=/resources/testharness.js></script>
<script src=/resources/testharnessreport.js></script>
<div id=log></div>
<script>
test(function() {
  assert_throws(new TypeError(), function() {
    new Event()
  })
})
test(function() {
  var test_error = { name: "test" }
  assert_throws(test_error, function() {
    new Event({ toString: function() { throw test_error; } })
  })
})
test(function() {
  var ev = new Event("")
  assert_equals(ev.type, "")
  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_equals(ev.isTrusted, false)
  assert_true(ev.timeStamp > 0)
  assert_true("initEvent" in ev)
})
test(function() {
  var ev = new Event("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_equals(ev.isTrusted, false)
  assert_true(ev.timeStamp > 0)
  assert_true("initEvent" in ev)
})
test(function() {
  var ev = Event("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_equals(ev.isTrusted, false)
  assert_true(ev.timeStamp > 0)
  assert_true("initEvent" in ev)
})
test(function() {
  var ev = new Event("I am an event", { bubbles: true, cancelable: false})
  assert_equals(ev.type, "I am an event")
  assert_equals(ev.bubbles, true)
  assert_equals(ev.cancelable, false)
})
test(function() {
  var ev = new Event("@", { bubblesIGNORED: true, cancelable: true})
  assert_equals(ev.type, "@")
  assert_equals(ev.bubbles, false)
  assert_equals(ev.cancelable, true)
})
test(function() {
  var ev = new Event("@", { "bubbles\0IGNORED": true, cancelable: true})
  assert_equals(ev.type, "@")
  assert_equals(ev.bubbles, false)
  assert_equals(ev.cancelable, true)
})
test(function() {
  var ev = new Event("Xx", { cancelable: true})
  assert_equals(ev.type, "Xx")
  assert_equals(ev.bubbles, false)
  assert_equals(ev.cancelable, true)
})
test(function() {
  var ev = new Event("Xx", {})
  assert_equals(ev.type, "Xx")
  assert_equals(ev.bubbles, false)
  assert_equals(ev.cancelable, false)
})
test(function() {
  var ev = new Event("Xx", {bubbles: true, cancelable: false, sweet: "x"})
  assert_equals(ev.type, "Xx")
  assert_equals(ev.bubbles, true)
  assert_equals(ev.cancelable, false)
  assert_equals(ev.sweet, undefined)
})
test(function() {
  var called = []
  var ev = new Event("Xx", {
    get cancelable() {
      called.push("cancelable")
      return false
    },
    get bubbles() {
      called.push("bubbles")
      return true;
    },
    get sweet() {
      called.push("sweet")
      return "x"
    }
  })
  assert_array_equals(called, ["bubbles", "cancelable"])
  assert_equals(ev.type, "Xx")
  assert_equals(ev.bubbles, true)
  assert_equals(ev.cancelable, false)
  assert_equals(ev.sweet, undefined)
})
test(function() {
  var ev = new CustomEvent("$", {detail: 54, sweet: "x", sweet2: "x", cancelable:true})
  assert_equals(ev.type, "$")
  assert_equals(ev.bubbles, false)
  assert_equals(ev.cancelable, true)
  assert_equals(ev.sweet, undefined)
  assert_equals(ev.detail, 54)
})
</script>
