<!doctype html>
<title>WebRTC objects toJSON() methods</title>
<script src=/resources/testharness.js></script>
<script src=/resources/testharnessreport.js></script>
<script>
'use strict';
// The tests for
// * RTCSessionDescription.toJSON()
// * RTCIceCandidate.toJSON()
// are kept in a single file since they are similar and typically
// would need to be changed together.
test(t => {
  const desc = new RTCSessionDescription({
    type: 'offer',
    sdp: 'bogus sdp',
  });
  const json = desc.toJSON();

  // Assert that candidates which should be serialized are present.
  assert_equals(json.type, desc.type);
  assert_equals(json.sdp, desc.sdp);

  // Assert that no other attributes are present by checking the size.
  assert_equals(Object.keys(json).length, 2);

}, 'RTCSessionDescription.toJSON serializes only specific attributes');

test(t => {
  const candidate = new RTCIceCandidate({
    sdpMLineIndex: 0,
    sdpMid: '0',
    candidate: 'candidate:1905690388 1 udp 2113937151 192.168.0.1 58041 typ host',
    usernameFragment: 'test'
  });
  const json = candidate.toJSON();

  // Assert that candidates which should be serialized are present.
  assert_equals(json.sdpMLineIndex, candidate.sdpMLineIndex);
  assert_equals(json.sdpMid, candidate.sdpMid);
  assert_equals(json.candidate, candidate.candidate);
  assert_equals(json.usernameFragment, candidate.usernameFragment);

  // Assert that no other attributes are present by checking the size.
  assert_equals(Object.keys(json).length, 4);

}, 'RTCIceCandidate.toJSON serializes only specific attributes');

</script>
