Tests that interfaces objects have the right type

On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".


* Interface with constructor
PASS window.Event instanceof Function is true
PASS typeof Event is "function"
PASS Object.getPrototypeOf(Event) is Function.prototype
PASS Event('click') threw exception TypeError: Constructor requires 'new' operator.
PASS Event.call('click') threw exception TypeError: Constructor requires 'new' operator.
PASS new Event('click') did not throw exception.
PASS Event.toString() is "function Event() {\n    [native code]\n}"
PASS object.toString.call(Event) is "[object Function]"

* Interface with named constructor
PASS window.Audio instanceof Function is true
PASS typeof Audio is "function"
PASS Object.getPrototypeOf(Audio) is Function.prototype
PASS Audio() threw exception TypeError: Constructor requires 'new' operator.
PASS Audio.call() threw exception TypeError: Constructor requires 'new' operator.
PASS new Audio() did not throw exception.
PASS Audio.toString() is "function Audio() {\n    [native code]\n}"
PASS object.toString.call(Audio) is "[object Function]"

* Interface without constructor
PASS window.Element instanceof Function is true
PASS typeof Element is "function"
PASS Object.getPrototypeOf(Element) is Node
PASS Element() threw exception TypeError: Illegal constructor.
PASS Element.call() threw exception TypeError: Illegal constructor.
PASS new Element() threw exception TypeError: Illegal constructor.
PASS Element.toString() is "function Element() {\n    [native code]\n}"
PASS object.toString.call(Element) is "[object Function]"
PASS successfullyParsed is true

TEST COMPLETE

