Tests the type checking of init*Event() methods.

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

PASS document.createEvent('CompositionEvent').initCompositionEvent('', false, false, {}, '') threw exception TypeError: Failed to execute 'initCompositionEvent' on 'CompositionEvent': parameter 4 is not of type 'Window'..
PASS document.createEvent('KeyboardEvent').initKeyboardEvent('', false, false, {}, '', 0, false, false, false, false) threw exception TypeError: Failed to execute 'initKeyboardEvent' on 'KeyboardEvent': parameter 4 is not of type 'Window'..
PASS document.createEvent('MouseEvent').initMouseEvent('', false, false, null, 0, 0, 0, 0, 0, false, false, false, false, 0, {}) threw exception TypeError: Failed to execute 'initMouseEvent' on 'MouseEvent': parameter 15 is not of type 'EventTarget'..
PASS document.createEvent('MouseEvent').initMouseEvent('', false, false, {}, 0, 0, 0, 0, 0, false, false, false, false, 0, null) threw exception TypeError: Failed to execute 'initMouseEvent' on 'MouseEvent': parameter 4 is not of type 'Window'..
PASS document.createEvent('MutationEvent').initMutationEvent('', false, false, {}, '', '', '', 0) threw exception TypeError: Failed to execute 'initMutationEvent' on 'MutationEvent': parameter 4 is not of type 'Node'..
PASS document.createEvent('TextEvent').initTextEvent('', false, false, {}, '') threw exception TypeError: Failed to execute 'initTextEvent' on 'TextEvent': parameter 4 is not of type 'Window'..
PASS document.createEvent('UIEvent').initUIEvent('', false, false, {}, 0) threw exception TypeError: Failed to execute 'initUIEvent' on 'UIEvent': parameter 4 is not of type 'Window'..
PASS successfullyParsed is true

TEST COMPLETE

