<!doctype html>
<html>
<head>
<title>getUserMedia({video:true}) creates a stream with one video track</title>
<link rel="author" title="Dominique Hazael-Massieux" href="mailto:dom@w3.org"/>
<link rel="help" href="http://dev.w3.org/2011/webrtc/editor/getusermedia.html#widl-NavigatorUserMedia-getUserMedia-void-MediaStreamConstraints-constraints-NavigatorUserMediaSuccessCallback-successCallback-NavigatorUserMediaErrorCallback-errorCallback">
<link rel="help" href="http://dev.w3.org/2011/webrtc/editor/getusermedia.html#widl-MediaStreamTrack-kind">

<link rel='stylesheet' href='/resources/testharness.css' media='all'/>
</head>
<body>
<p class="instructions">When prompted, accept to share your video stream.</p>
<h1 class="instructions">Description</h1>
<p class="instructions">This test checks that the MediaStream object returned by
the success callback in getUserMedia has exactly one video track and no audio.</p>

<div id='log'></div>
<script src=/resources/testharness.js></script>
<script src=/resources/testharnessreport.js></script>
<script src="/common/vendor-prefix.js" data-prefixed-objects='[{"ancestors":["navigator"], "name":"getUserMedia"}, {"ancestors":["window"], "name":"MediaStream"}]'></script>
<script>
var t = async_test("Tests that a MediaStream with at least one video track is returned");
t.step(function() {
  navigator.getUserMedia({video: true}, t.step_func(function (stream) {
    assert_true(stream instanceof MediaStream, "getUserMedia success callback comes with a MediaStream object");
    assert_equals(stream.getAudioTracks().length, 0, "the media stream has zero audio track");
    assert_equals(stream.getVideoTracks().length, 1, "the media stream has exactly one video track");
    assert_equals(stream.getVideoTracks()[0].kind, "video", "getAudioTracks() returns a sequence of tracks whose kind is 'video'");
    t.done();
  }), function(error) {});
});
</script>
</body>
</html>
