Test the different methods to get tracks from a MediaStream.

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


PASS stream1.getTracks().length is 2
PASS stream2.getTracks().length is 2
getAudioTracks(), getVideoTracks() and getTracks() must return a new sequence at every invocation
PASS stream2.getAudioTracks() != stream2.getAudioTracks() is true
PASS stream2.getVideoTracks() != stream2.getVideoTracks() is true
PASS stream2.getTracks() != stream2.getTracks() is true
PASS track added to stream.
PASS stream2.getAudioTracks().length is 2
PASS stream2.getVideoTracks().length is 1
PASS stream2.getTracks().length is 3
PASS track added to stream.
PASS stream2.getAudioTracks().length is 2
PASS stream2.getVideoTracks().length is 2
PASS allTracks.length is 4
PASS stream2.getTrackById(id) is non-null.
PASS stream2.getTrackById(id) is non-null.
PASS stream2.getTrackById(id) is non-null.
PASS stream2.getTrackById(id) is non-null.
PASS stream2.getTrackById("foo-id") is null
PASS successfullyParsed is true

TEST COMPLETE

