<!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>

const fillLightModeNames = ['off', 'auto', 'flash'];

// This test verifies that ImageCapture can call setOptions()s, with a mock Mojo
// interface implementation.
promise_test(async function() {
  let canvas = document.getElementById('canvas');
  let context = canvas.getContext('2d');
  context.fillStyle = 'red';
  context.fillRect(0, 0, 10, 10);
  let stream = canvas.captureStream();

  const optionsDict = { imageWidth : 1080,
                        imageHeight : 100,
                        redEyeReduction : true,
                        fillLightMode : 'flash'
                      };
  let capturer = new ImageCapture(stream.getVideoTracks()[0]);
  await capturer.setOptions(optionsDict);

  assert_equals(true, mockImageCapture.options().hasWidth, 'has_width');
  assert_equals(optionsDict.imageWidth, mockImageCapture.options().width,
                'width');
  assert_equals(true, mockImageCapture.options().hasHeight, 'has_height');
  assert_equals(optionsDict.imageHeight, mockImageCapture.options().height,
                'height');

  // Depending on how mojo boolean packing in integers is arranged, this can
  // be a number instead of a boolean, compare directly.
  // TODO(mcasas): Revert to assert_equals() when yzshen@ has sorted it out.
  assert_true(
      optionsDict.redEyeReduction == mockImageCapture.options().redEyeReduction,
      'redEyeReduction');

  assert_equals(true, mockImageCapture.options().hasFillLightMode,
                'hasFillLightMode');
  assert_equals(optionsDict.fillLightMode,
                fillLightModeNames[mockImageCapture.options().fillLightMode],
                'fillLightMode');

}, 'exercises ImageCapture.setOptions(options)');

</script>
