<!doctype html>
<meta charset=utf-8>
<title>RTCRtpParameters encodings</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="../webrtc/dictionary-helper.js"></script>
<script src="../webrtc/RTCRtpParameters-helper.js"></script>
<script>
  'use strict';

  promise_test(async t => {
    const pc = new RTCPeerConnection();
    t.add_cleanup(() => pc.close());
    const { sender } = pc.addTransceiver('video', {
      sendEncodings: [{
        active: false,
        priority: 'low',
        networkPriority: 'low',
        maxBitrate: 8,
        maxFramerate: 25,
        rid: 'foo'
      }]
    });
    await doOfferAnswerExchange(t, pc);

    const param = sender.getParameters();
    validateSenderRtpParameters(param);
    const encoding = getFirstEncoding(param);

    assert_equals(encoding.active, false);
    assert_equals(encoding.priority, 'low');
    assert_equals(encoding.networkPriority, 'low');
  }, `sender.getParameters() should return sendEncodings set by addTransceiver()`);

  test_modified_encoding('audio', 'active', false, true,
    'setParameters() with modified encoding.active should succeed');

  test_modified_encoding('audio', 'priority', 'very-low', 'high',
    'setParameters() with modified encoding.priority should succeed');

  test_modified_encoding('audio', 'networkPriority', 'very-low', 'high',
    'setParameters() with modified encoding.networkPriority should succeed');

</script>
