This tests the constructor for the MediaStreamTrackEvent DOM class.

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



*** getUserMedia() succeeded, test stream ***
PASS mediaStream is non-null.
PASS mediaStream.getVideoTracks()[0] is non-null.

*** No initializer passed ***
PASS new MediaStreamTrackEvent('MediaStreamTrackEvent').bubbles is false
PASS new MediaStreamTrackEvent('MediaStreamTrackEvent').cancelable is false
PASS new MediaStreamTrackEvent('MediaStreamTrackEvent').track is null

*** Bubbles and cancelable true, track is missing ***
PASS new MediaStreamTrackEvent('MediaStreamTrackEvent', { bubbles: true, cancelable: true }).bubbles is true
PASS new MediaStreamTrackEvent('MediaStreamTrackEvent', { bubbles: true, cancelable: true }).cancelable is true
PASS new MediaStreamTrackEvent('MediaStreamTrackEvent', { bubbles: true, cancelable: true }).track is null

*** Bubbles and cancelable true, invalid track ***
PASS new MediaStreamTrackEvent('MediaStreamTrackEvent', { bubbles: true, cancelable: true, track: MediaStreamTrack }) threw exception TypeError: Type error.

*** Initialize 'track' with a invalid values ***
PASS new MediaStreamTrackEvent('MediaStreamTrackEvent', { track: 10 }) threw exception TypeError: Type error.
PASS new MediaStreamTrackEvent('MediaStreamTrackEvent', { track: 'string' }) threw exception TypeError: Type error.
PASS new MediaStreamTrackEvent('MediaStreamTrackEvent', { track: emptyObject }) threw exception TypeError: Type error.
PASS new MediaStreamTrackEvent('MediaStreamTrackEvent', { track: document }) threw exception TypeError: Type error.

*** Bubbles and cancelable true, valid track ***
PASS new MediaStreamTrackEvent('MediaStreamTrackEvent', { bubbles: true, cancelable: true, track: mediaStreamTrack }).bubbles is true
PASS new MediaStreamTrackEvent('MediaStreamTrackEvent', { bubbles: true, cancelable: true, track: mediaStreamTrack }).cancelable is true

*** Initialize 'track' with valid track object ***
PASS new MediaStreamTrackEvent('MediaStreamTrackEvent', { track: mediaStreamTrack }).track is non-null.
PASS new MediaStreamTrackEvent('MediaStreamTrackEvent', { track: mediaStreamTrack }).track is mediaStreamTrack

PASS successfullyParsed is true

TEST COMPLETE

