<script src="../resources/js-test-pre.js"></script>
<script>
description("Tests that interfaces objects have the right type");
// http://heycam.github.io/webidl/#interface-object

object = {};

debug("* Interface with constructor");
shouldBeTrue("window.Event instanceof Function");
shouldBeEqualToString("typeof Event", "function");
shouldBe("Object.getPrototypeOf(Event)", "Function.prototype");
shouldThrow("Event('click')");
shouldThrow("Event.call('click')");
shouldNotThrow("new Event('click')");
shouldBeEqualToString("Event.toString()", "function Event() {\n    [native code]\n}");
shouldBeEqualToString("object.toString.call(Event)", "[object Function]");

debug("");
debug("* Interface with named constructor");
shouldBeTrue("window.Audio instanceof Function");
shouldBeEqualToString("typeof Audio", "function");
shouldBe("Object.getPrototypeOf(Audio)", "Function.prototype");
shouldThrow("Audio()");
shouldThrow("Audio.call()");
shouldNotThrow("new Audio()");
shouldBeEqualToString("Audio.toString()", "function Audio() {\n    [native code]\n}");
shouldBeEqualToString("object.toString.call(Audio)", "[object Function]");

debug("");
debug("* Interface without constructor");
shouldBeTrue("window.Element instanceof Function");
shouldBeEqualToString("typeof Element", "function");
shouldBe("Object.getPrototypeOf(Element)", "Node");
shouldThrow("Element()");
shouldThrow("Element.call()");
shouldThrow("new Element()");
shouldBeEqualToString("Element.toString()", "function Element() {\n    [native code]\n}");
shouldBeEqualToString("object.toString.call(Element)", "[object Function]");

</script>
<script src="../resources/js-test-post.js"></script>
