<!DOCTYPE html>
<script src="../resources/testharness.js"></script>
<script src="../resources/testharnessreport.js"></script>
<script src="file:///gen/layout_test_data/mojo/public/js/mojo_bindings.js"></script>
<script src="file:///gen/media/capture/mojo/image_capture.mojom.js"></script>
<script src="resources/mock-imagecapture.js"></script>
<body>
<canvas id='canvas' width=10 height=10/>
</body>
<script>

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

// This test verifies that ImageCapture.takePhoto() rejects if any passed
// option is unsupported or outside its allowed range.
function makePromiseTest(getOption) {
  promise_test(async function() {
    mockImageCapture.state().redEyeReduction = 0;

    let stream = canvas.captureStream();
    let capturer = new ImageCapture(stream.getVideoTracks()[0]);
    await capturer.getPhotoCapabilities();
    const options = getOption(mockImageCapture.state());

    try {
      await capturer.takePhoto(options);
      assert_unreached('expected takePhoto to reject');
    } catch (error) {
      assert_equals(error.name, 'NotSupportedError');
    }
  });
}

const optionsGenerators = [
  capabilities => ({ redEyeReduction: true }),
  capabilities => ({ imageHeight: capabilities.height.max + 1 }),
  capabilities => ({ imageHeight: capabilities.height.min - 1 }),
  capabilities => ({ imageWidth: capabilities.width.max + 1 }),
  capabilities => ({ imageWidth: capabilities.width.min - 1 }),
  capabilities => ({ fillLightMode: 'off' }),
];

for (key in optionsGenerators) {
  generate_tests(
      makePromiseTest,
      [[ 'ImageCapture.takePhoto(options) rejects with bad options, #' + key,
         optionsGenerators[key] ]]);
}

</script>
