<!doctype html>
<html>
<head>
<title>Trivial mandatory constraint in getUserMedia</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#idl-def-NavigatorUserMediaError">
</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 setting an impossible mandatory
constraint (width &gt;=1G) in getUserMedia works</p>

<div id='log'></div>
<script src=/resources/testharness.js></script>
<script src=/resources/testharnessreport.js></script>
<script>
var t = async_test("Tests that setting an impossible constraint in getUserMedia fails", {timeout:10000});
t.step(function() {
  // Note - integer conversion is weird for +inf and numbers > 2^32, so we
  // use a number less than 2^32 for testing.
  navigator.mediaDevices.getUserMedia({video: {width: {min:100000000}}})
    .then(t.step_func(function (stream) {
      assert_unreached("a Video stream of width 100M cannot be created");
      t.done();
    }), t.step_func(function(error) {
      assert_equals(error.name, "OverconstrainedError", "An impossible constraint triggers a OverconstrainedError");
      assert_equals(error.constraint, "width", "The name of the not satisfied error is given in error.constraint");
      t.done();
    }));
});
</script>
</body>
</html>
