<!doctype html>
<meta charset=utf-8>
<title>Audio constructor</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<div id=log></div>
<script>
test(function() {
  var throwingObject = {
    toString: function() { throw Error() },
    valueOf: function() { throw Error() }
  };
  var tests = [
    [function() { return Audio() }, null, "No arguments, without new"],
    [function() { return new Audio() }, null, "No arguments, with new"],
    [function() { return Audio("") }, "", "Empty string argument, without new"],
    [function() { return new Audio("") }, "", "Empty string argument, with new"],
    [function() { return Audio("src") }, "src", "Non-empty string argument, without new"],
    [function() { return new Audio("src") }, "src", "Non-empty string argument, with new"],
    [function() { return Audio(null) }, "null", "Null argument, without new"],
    [function() { return new Audio(null) }, "null", "Null argument, with new"],
    [function() { return Audio(undefined) }, null, "Undefined argument, without new"],
    [function() { return new Audio(undefined) }, null, "Undefined argument, with new"],
    [function() { return Audio("", throwingObject) }, "", "Extra argument, without new"],
    [function() { return new Audio("", throwingObject) }, "", "Extra argument, with new"],
  ];
  tests.forEach(function(t) {
    var fn = t[0], expectedSrc = t[1], description = t[2];
    test(function() {
      var element = fn();
      assert_equals(element.localName, "audio");
      assert_equals(element.tagName, "AUDIO");
      assert_equals(element.namespaceURI, "http://www.w3.org/1999/xhtml");
      assert_equals(element.nodeType, Node.ELEMENT_NODE);
      assert_equals(element.getAttribute("preload"), "auto");
      assert_equals(element.getAttribute("src"), expectedSrc);
      assert_equals(element.ownerDocument, document);
    }, description);
  });
});
test(function() {
  assert_throws(new TypeError(), function() {
    HTMLAudioElement();
  });
}, "Calling HTMLAudioElement should throw");
test(function() {
  assert_throws(new TypeError(), function() {
    new HTMLAudioElement();
  });
}, "Constructing HTMLAudioElement should throw");
</script>
