<!doctype html>
<meta charset=utf-8>
<title>RTCRtpSender.prototype.getStats</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="RTCPeerConnection-helper.js"></script>
<script src="dictionary-helper.js"></script>
<script src="RTCStats-helper.js"></script>
<script>
  'use strict';

  // Test is based on the following editor draft:
  // webrtc-pc 20171130
  // webrtc-stats 20171122

  // The following helper functions are called from RTCPeerConnection-helper.js:
  //   doSignalingHandshake

  // The following helper function is called from RTCStats-helper.js
  //   validateStatsReport
  //   assert_stats_report_has_stats

  /*
    5.2.  RTCRtpSender Interface
      getStats
        1.  Let selector be the RTCRtpSender object on which the method was invoked.
        2.  Let p be a new promise, and run the following steps in parallel:
          1.  Gather the stats indicated by selector according to the stats selection
              algorithm.
          2.  Resolve p with the resulting RTCStatsReport object, containing the
              gathered stats.
        3.  Return p.

    8.5. The stats selection algorithm
      3.  If selector is an RTCRtpSender, gather stats for and add the following objects
          to result:
        - All RTCOutboundRTPStreamStats objects corresponding to selector.
        - All stats objects referenced directly or indirectly by the RTCOutboundRTPStreamStats
          objects added.
   */

  promise_test(async t => {
    const caller = new RTCPeerConnection();
    const callee = new RTCPeerConnection();
    const { sender } = caller.addTransceiver('audio');

    await doSignalingHandshake(caller, callee);
    const statsReport = await sender.getStats();
    validateStatsReport(statsReport);
    assert_stats_report_has_stats(statsReport, ['outbound-rtp']);
  }, 'sender.getStats() via addTransceiver should return stats report containing outbound-rtp stats');

  promise_test(async t => {
    const caller = new RTCPeerConnection();
    const callee = new RTCPeerConnection();
    const stream = await navigator.mediaDevices.getUserMedia({audio:true});
    const [track] = stream.getTracks();
    const sender = caller.addTrack(track, stream);

    await doSignalingHandshake(caller, callee);
    const statsReport = await sender.getStats();
    validateStatsReport(statsReport);
    assert_stats_report_has_stats(statsReport, ['outbound-rtp']);
  }, 'sender.getStats() via addTrack should return stats report containing outbound-rtp stats');

</script>
