<!DOCTYPE html>
<script src=../../resources/testharness.js></script>
<script src=../../resources/testharnessreport.js></script>
<body>
<canvas id='canvas' width=10 height=10/>
</body>
<script>

const constraints = { whiteBalanceMode     : "manual",
                      exposureMode         : "continuous",
                      focusMode            : "single-shot",

                      exposureCompensation : 133.77,
                      colorTemperature     : 6000,
                      iso                  : 120.0,

                      brightness           : 3,
                      contrast             : 4,
                      saturation           : 5,
                      sharpness            : 6,

                      zoom                 : 3.141592
                      // TODO: torch https://crbug.com/700607.
                    };

var canvas = document.getElementById('canvas');
var context = canvas.getContext("2d");
context.fillStyle = "red";
context.fillRect(0, 0, 10, 10);

// These tests verify that MediaStreamTrack.getConstraints() exists and that,
// returns the constraints passed beforehand with applyConstraints.
var makeAsyncTest = function(c) {
  async_test(function(t) {
    var stream = canvas.captureStream();
    var videoTrack = stream.getVideoTracks()[0];

    const constraintsIn = { advanced : [ c ]};

    // Method applyConstraints() will fail since there is no Image Capture
    // service in this Layout Test, but |constraintsIn| should be cached.
    videoTrack.applyConstraints(constraintsIn)
        .then(() => { /* ignore */ })
        .catch((e) => { /* ignore */ })
        .then(() => {
          const constraintsOut = videoTrack.getConstraints();
          assert_object_equals(constraintsOut, constraintsIn, "constraints");
          t.done();
        });

  });
};

// Send each line of |constraints| in turn and then the whole dictionary.
for (key in constraints) {
  var one_constraint = {};
  one_constraint[key] = constraints[key];
  generate_tests(
      makeAsyncTest,
      [[ 'MediaStreamTrack.getConstraints(), key: ' + key, one_constraint ]]);
}

generate_tests(makeAsyncTest, [[
                 'MediaStreamTrack.getConstraints(), complete ', constraints
               ]]);

</script>
