Test basic behavior of RTCRtpSender.replaceTrack()

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


PASS pc.getSenders().length is 0
PASS sender = pc.addTrack(audioTrack, stream) did not throw exception.
PASS sender is an instance of RTCRtpSender
PASS sender.track is audioTrack
PASS promise sender.replaceTrack() rejected with TypeError: Not enough arguments
PASS promise sender.replaceTrack(null) rejected with TypeError: Argument 1 ('withTrack') to RTCRtpSender.replaceTrack must be an instance of MediaStreamTrack
PASS promise sender.replaceTrack({}) rejected with TypeError: Argument 1 ('withTrack') to RTCRtpSender.replaceTrack must be an instance of MediaStreamTrack
Test mismatching track kind
PASS promise sender.replaceTrack(videoTrack) rejected with TypeError: Type error
PASS promise sender.replaceTrack(audioTrack2) fulfilled with undefined
PASS Track successfully replaced
PASS sender.track is audioTrack2
Sender should still use old track (audioTrack) id in negotiation.
PASS offer created
PASS offer.sdp.indexOf(audioTrack.id) is not -1
PASS offer.sdp.indexOf(audioTrack2.id) is -1
Stop sender, and try replacing the track
PASS promise sender.replaceTrack(audioTrack2) rejected with InvalidStateError (DOM Exception 11): The object is in an invalid state.
Create a new sender
PASS sender = pc.addTrack(audioTrack2, stream) did not throw exception.
Close pc and try replacing the track
PASS promise sender.replaceTrack(audioTrack3) rejected with InvalidStateError (DOM Exception 11): The object is in an invalid state.
End of promise chain
PASS successfullyParsed is true

TEST COMPLETE

