
PASS addTransceiver() with string argument as invalid kind should throw TypeError
PASS addTransceiver('audio') should return an audio transceiver
PASS addTransceiver('video') should return a video transceiver
PASS addTransceiver() with direction sendonly should have result transceiver.direction be the same
PASS addTransceiver() with direction inactive should have result transceiver.direction be the same
PASS addTransceiver() with invalid direction should throw TypeError
PASS addTransceiver(track) should have result with sender.track be given track
PASS addTransceiver(track) multiple times should create multiple transceivers
FAIL addTransceiver() with rid containing invalid non-alphanumeric characters should throw TypeError assert_throws_js: function "() =>
      pc.addTransceiver('audio', {
        sendEncodings: [{
          rid: '@Invalid!'
        }]
      })" threw object "InvalidAccessError: Invalid RID value provided." ("InvalidAccessError") expected instance of function "function TypeError() {
    [native code]
}" ("TypeError")
FAIL addTransceiver() with rid longer than 16 characters should throw TypeError assert_throws_js: function "() =>
      pc.addTransceiver('audio', {
        sendEncodings: [{
          rid: 'a'.repeat(17)
        }]
      })" threw object "InvalidAccessError: Invalid RID value provided." ("InvalidAccessError") expected instance of function "function TypeError() {
    [native code]
}" ("TypeError")
PASS addTransceiver() with valid rid value should succeed
PASS addTransceiver() with valid sendEncodings should succeed

