<!DOCTYPE HTML>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<canvas id="canvas">
</canvas>
<script>

function createAudioTrack() {
  ac = new AudioContext();
  var osc = ac.createOscillator();
  var dest = ac.createMediaStreamDestination();
  osc.connect(dest);
  audio_track = dest.stream.getAudioTracks()[0];

  assert_equals(audio_track.kind, "audio");
  return audio_track;
}

function createVideoTrack() {
  canvas = document.getElementById("canvas");
  video_track = canvas.captureStream().getVideoTracks()[0];

  assert_equals(video_track.kind, "video");
  return video_track;
}

test(t => {
  audio_track = createAudioTrack();
  assert_equals("", audio_track.contentHint);

  video_track = createVideoTrack();
  assert_equals("", video_track.contentHint);
}, "Tracks have empty default content hint");

test(t => {
  audio_track = createAudioTrack();
  audio_track.contentHint = "speech";
  assert_equals(audio_track.contentHint, "speech");
  audio_track.contentHint = "music";
  assert_equals(audio_track.contentHint, "music");
  audio_track.contentHint = "";
  assert_equals(audio_track.contentHint, "");
}, "Accepts valid audio contentHints");

test(t => {
  audio_track = createAudioTrack();
  audio_track.contentHint = "speech";
  assert_equals(audio_track.contentHint, "speech");
  audio_track.contentHint = "motion";
  assert_equals(audio_track.contentHint, "speech",
                "Audio tracks should ignore video-only contentHints.");
  audio_track.contentHint = "bogus";
  assert_equals(audio_track.contentHint, "speech",
                "Audio tracks should ignore garbage contentHints");
}, "Audio tracks ignore invalid/video contentHints");

test(t => {
  video_track = createVideoTrack();
  video_track.contentHint = "motion";
  assert_equals(video_track.contentHint, "motion");
  video_track.contentHint = "detail";
  assert_equals(video_track.contentHint, "detail");
  video_track.contentHint = "text";
  assert_equals(video_track.contentHint, "text");
  video_track.contentHint = "";
  assert_equals(video_track.contentHint, "");
}, "Accepts valid video contentHints");

test(t => {
  video_track = createVideoTrack();
  video_track.contentHint = "motion";
  assert_equals(video_track.contentHint, "motion");
  video_track.contentHint = "speech";
  assert_equals(video_track.contentHint, "motion",
                "Video tracks should ignore audio-only contentHints.");
  video_track.contentHint = "bogus";
  assert_equals(video_track.contentHint, "motion",
                "Video tracks should ignore garbage contentHints");
}, "Video tracks ignore invalid/audio contentHints");

test(t => {
  video_track = createVideoTrack();
  video_track.contentHint = "motion";
  assert_equals(video_track.contentHint, "motion");

  // Cloning a track should preserve contentHint.
  video_track_clone = video_track.clone();
  assert_equals(video_track_clone.contentHint, "motion");

  // Changing a cloned track's contentHint should not change the original.
  video_track_clone.contentHint = "detail";
  assert_equals(video_track_clone.contentHint, "detail");
  assert_equals(video_track.contentHint, "motion");
}, "Cloned video tracks have separate contentHints");

test(t => {
  audio_track = createAudioTrack();
  audio_track.contentHint = "speech";
  assert_equals(audio_track.contentHint, "speech");

  // Cloning a track should preserve contentHint.
  audio_track_clone = audio_track.clone();
  assert_equals(audio_track_clone.contentHint, "speech");

  // Changing a cloned track's contentHint should not change the original.
  audio_track_clone.contentHint = "music";
  assert_equals(audio_track_clone.contentHint, "music");
  assert_equals(audio_track.contentHint, "speech");
}, "Cloned audio tracks have separate contentHints");

</script>
