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

promise_test(async t => {
  const pc = new RTCPeerConnection();
  t.add_cleanup(() => pc.close());
  const offer = await pc.createOffer();

  assert_equals(pc.pendingLocalDescription, null,
                'pendingLocalDescription is null before setLocalDescription');
  const promise = pc.setLocalDescription(offer);
  assert_equals(pc.pendingLocalDescription, null,
                'pendingLocalDescription is still null while promise pending');
  await promise;
  assert_not_equals(pc.pendingLocalDescription, null,
                    'pendingLocalDescription is not null after await');
  assert_equals(pc.pendingLocalDescription, pc.localDescription);
}, "pendingLocalDescription is surfaced at the right time");

promise_test(async t => {
  const pc = new RTCPeerConnection();
  t.add_cleanup(() => pc.close());
  const offer = await pc.createOffer();

  assert_equals(pc.pendingRemoteDescription, null,
                'pendingRemoteDescription is null before setRemoteDescription');
  const promise = pc.setRemoteDescription(offer);
  assert_equals(pc.pendingRemoteDescription, null,
                'pendingRemoteDescription is still null while promise pending');
  await promise;
  assert_not_equals(pc.pendingRemoteDescription, null,
                    'pendingRemoteDescription is not null after await');
  assert_equals(pc.pendingRemoteDescription, pc.remoteDescription);
}, "pendingRemoteDescription is surfaced at the right time");

promise_test(async t => {
  const pc1 = new RTCPeerConnection();
  t.add_cleanup(() => pc1.close());
  const pc2 = new RTCPeerConnection();
  t.add_cleanup(() => pc2.close());

  const offer = await pc1.createOffer();
  await pc1.setLocalDescription(offer);
  await pc2.setRemoteDescription(offer);
  const answer = await pc2.createAnswer();

  assert_equals(pc2.currentLocalDescription, null,
                'currentLocalDescription is null before setLocalDescription');
  const promise = pc2.setLocalDescription(answer);
  assert_equals(pc2.currentLocalDescription, null,
                'currentLocalDescription is still null while promise pending');
  await promise;
  assert_not_equals(pc2.currentLocalDescription, null,
                    'currentLocalDescription is not null after await');
  assert_equals(pc2.currentLocalDescription, pc2.localDescription);
}, "currentLocalDescription is surfaced at the right time");

promise_test(async t => {
  const pc1 = new RTCPeerConnection();
  t.add_cleanup(() => pc1.close());
  const pc2 = new RTCPeerConnection();
  t.add_cleanup(() => pc2.close());

  const offer = await pc1.createOffer();
  await pc1.setLocalDescription(offer);
  await pc2.setRemoteDescription(offer);
  const answer = await pc2.createAnswer();

  assert_equals(pc1.currentRemoteDescription, null,
                'currentRemoteDescription is null before setRemoteDescription');
  const promise = pc1.setRemoteDescription(answer);
  assert_equals(pc1.currentRemoteDescription, null,
                'currentRemoteDescription is still null while promise pending');
  await promise;
  assert_not_equals(pc1.currentRemoteDescription, null,
                    'currentRemoteDescription is not null after await');
  assert_equals(pc1.currentRemoteDescription, pc1.remoteDescription);
}, "currentRemoteDescription is surfaced at the right time");

</script>
