<!DOCTYPE html>
<script src="../resources/testharness.js"></script>
<script src="../resources/testharnessreport.js"></script>
<script src="../resources/mojo-helpers.js"></script>
<script src="resources/mock-imagecapture.js"></script>
<body>
<canvas id='canvas' width=10 height=10/>
</body>
<script>

const fillLightModeNames = ["none", "off", "auto", "flash", "torch"];

// This test verifies that ImageCapture can get PhotoCapabilities(), with a mock
// Mojo interface implementation.

async_test(function(t) {
  var canvas = document.getElementById('canvas');
  var context = canvas.getContext("2d");
  context.fillStyle = "red";
  context.fillRect(0, 0, 10, 10);
  var stream = canvas.captureStream();

  var mock_capabilities;
  mockImageCaptureReady
    .then(mock => {
      mock_capabilities = mock.capabilities();
      return new ImageCapture(stream.getVideoTracks()[0]);
    },
    error => {
      assert_unreached("Error creating MockImageCapture: " + error);
    })
    .then(capturer => {
      assert_true(typeof capturer.getPhotoCapabilities == 'function');
      return capturer.getPhotoCapabilities();
    })
    .then(capabilities => {
      assert_true(capabilities instanceof PhotoCapabilities);

      assert_true(capabilities.imageHeight instanceof MediaSettingsRange);
      assert_equals(capabilities.imageHeight.max,
                    mock_capabilities.height.max);
      assert_equals(capabilities.imageHeight.min,
                    mock_capabilities.height.min);
      assert_equals(capabilities.imageHeight.current,
                    mock_capabilities.height.current);
      assert_equals(capabilities.imageHeight.step,
                    mock_capabilities.height.step);

      assert_true(capabilities.imageWidth instanceof MediaSettingsRange);
      assert_equals(capabilities.imageWidth.max,
                    mock_capabilities.width.max);
      assert_equals(capabilities.imageWidth.min,
                    mock_capabilities.width.min);
      assert_equals(capabilities.imageWidth.current,
                    mock_capabilities.width.current);
      assert_equals(capabilities.imageWidth.step, mock_capabilities.width.step);

      assert_equals(capabilities.fillLightMode,
          fillLightModeNames[mock_capabilities.fill_light_mode],
          'fillLightMode');

      assert_true(capabilities.redEyeReduction,
          mock_capabilities.red_eye_reduction, 'redEyeReduction');

      t.done();
    })
    .catch(error => {
      assert_unreached("Error during getPhotoCapabilities(): " + error.message);
    });

}, 'exercises ImageCapture.getPhotoCapabilities()');

</script>
