This is a testharness.js-based test.
PASS addTransceiver() with undefined sendEncodings should have default encoding parameter with active set to true
PASS addTransceiver() with empty list sendEncodings should have default encoding parameter with active set to true
FAIL sender.getParameters() should return sendEncodings set by addTransceiver() promise_test: Unhandled rejection with value: object "InvalidAccessError: Failed to execute 'setRemoteDescription' on 'RTCPeerConnection': Failed to set remote answer sdp: Failed to set remote audio description send parameters."
PASS sender.setParameters() with mismatch number of encodings should reject with InvalidModificationError
PASS sender.setParameters() with encodings unset should reject with TypeError
PASS setParameters() with modified encoding.rid field should reject with InvalidModificationError
PASS setParameters() with encoding.scaleResolutionDownBy field set to less than 1.0 should reject with RangeError
PASS setParameters() with encoding.scaleResolutionDownBy field set to greater than 1.0 should succeed
FAIL setParameters() with modified encoding.dtx should succeed with RTCRtpTransceiverInit assert_equals: expected (string) "enabled" but got (undefined) undefined
FAIL setParameters() with modified encoding.dtx should succeed without RTCRtpTransceiverInit assert_equals: expected (string) "enabled" but got (undefined) undefined
FAIL setParameters() with unset encoding.dtx should succeed with RTCRtpTransceiverInit assert_equals: expected (string) "enabled" but got (undefined) undefined
FAIL setParameters() with unset encoding.dtx should succeed without RTCRtpTransceiverInit assert_equals: expected (string) "enabled" but got (undefined) undefined
PASS setParameters() with modified encoding.active should succeed with RTCRtpTransceiverInit
PASS setParameters() with modified encoding.active should succeed without RTCRtpTransceiverInit
PASS setParameters() with modified encoding.priority should succeed with RTCRtpTransceiverInit
PASS setParameters() with modified encoding.priority should succeed without RTCRtpTransceiverInit
PASS setParameters() with modified encoding.networkPriority should succeed with RTCRtpTransceiverInit
PASS setParameters() with modified encoding.networkPriority should succeed without RTCRtpTransceiverInit
FAIL setParameters() with modified encoding.ptime should succeed with RTCRtpTransceiverInit assert_equals: expected (number) 2 but got (undefined) undefined
FAIL setParameters() with modified encoding.ptime should succeed without RTCRtpTransceiverInit assert_equals: expected (number) 2 but got (undefined) undefined
PASS setParameters() with modified encoding.maxBitrate should succeed with RTCRtpTransceiverInit
PASS setParameters() with modified encoding.maxBitrate should succeed without RTCRtpTransceiverInit
FAIL setParameters() with modified encoding.maxFramerate should succeed with RTCRtpTransceiverInit assert_equals: expected (number) 24 but got (undefined) undefined
FAIL setParameters() with modified encoding.maxFramerate should succeed without RTCRtpTransceiverInit assert_equals: expected (number) 24 but got (undefined) undefined
Harness: the test ran to completion.

