<!doctype html>
<html>
<head>
<title>getUserMedia({}) rejects with TypeError</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">
</head>
<body>
<h1 class="instructions">Description</h1>
<p class="instructions">This test checks that getUserMedia with no value in the
options parameter raises a NOT_SUPPORTED_ERR exception.</p>

<div id='log'></div>
<script src=/resources/testharness.js></script>
<script src=/resources/testharnessreport.js></script>
<script>
var t = async_test("Tests that getUserMedia is rejected with a TypeError when used with an empty options parameter");
t.step( function () {
  navigator.mediaDevices.getUserMedia({})
    .then(t.step_func(function () {
      assert_unreached("This should never be triggered since the constraints parameter is empty");
    }), t.step_func(function (error) {
      assert_equals(error.name, "TypeError", "TypeError returned as expected");
      assert_equals(error.constraintName, undefined, "constraintName attribute not set as expected");
      t.done();
    }));
  t.done();
});

</script>
</body>
</html>
