<!DOCTYPE html>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/resources/testdriver.js"></script>
<script src="/resources/testdriver-vendor.js"></script>
<script src="/mediacapture-image/resources/imagecapture-helpers.js"></script>
<script>

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

                      exposureCompensation : 133.77,
                      exposureTime         : 10000, // in nano-seconds.
                      colorTemperature     : 6000,
                      iso                  : 120.0,

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

                      pan                  : 8,
                      tilt                 : 9,
                      zoom                 : 3.141592
                      // TODO: torch https://crbug.com/700607.
                    };

// These tests verify that MediaStreamTrack.getConstraints() exists and that,
// returns the constraints passed beforehand with applyConstraints.
function makePromiseTest(constraint) {
  image_capture_test(async function(t) {
    await test_driver.set_permission({name: 'camera', panTiltZoom: true},
        'granted', false);

    let stream = await navigator.mediaDevices.getUserMedia({video: true});
    let videoTrack = stream.getVideoTracks()[0];

    let constraintsIn = {advanced : [ constraint ]};
    await videoTrack.applyConstraints(constraintsIn);
    assert_object_equals(videoTrack.getConstraints(), constraintsIn, "constraints");

    // Clear constraints by sending an empty constraint set.
    await videoTrack.applyConstraints({});
    assert_object_equals(videoTrack.getConstraints(), {}, "constraints");
  });
};

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

generate_tests(makePromiseTest, [
  ["MediaStreamTrack.getConstraints(), complete ", constraints],
]);

</script>
