<!doctype html>
<meta charset=utf-8>
<title>RTCPeerConnection Simulcast Offer</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script>
'use strict';

// Tests for the construction of offers with simulcast according to:
// draft-ietf-mmusic-sdp-simulcast-13
// draft-ietf-mmusic-rid-15
promise_test(async t => {
  const pc = new RTCPeerConnection();
  t.add_cleanup(() => pc.close());
  const expected_rids = ['foo', 'bar', 'baz'];
  pc.addTransceiver('video', {
    sendEncodings: expected_rids.map(rid => ({rid}))
  });

  const offer = await pc.createOffer();
  let offer_lines = offer.sdp.split('\r\n');
  // Check for a RID line for each layer.
  for (const rid of expected_rids) {
    let result = offer_lines.find(line => line.startsWith(`a=rid:${rid}`));
    assert_not_equals(result, undefined, `RID attribute for '${rid}' missing.`);
  }

  // Check for simulcast attribute with send direction and all RIDs.
  let result = offer_lines.find(
      line => line.startsWith(`a=simulcast:send ${expected_rids.join(';')}`));
  assert_not_equals(result, undefined, "Could not find simulcast attribute.");
}, 'createOffer() with multiple send encodings should create simulcast offer');
</script>
