<!DOCTYPE html>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="resources/shapedetection-helpers.js"></script>
<body>
<img id="img" src="/images/green-16x16.png"/>
</body>
<script>

detection_test("FaceDetectionTest", async (t, detectionTest) => {
  const img = document.getElementById("img");
  const mock = detectionTest.MockFaceDetectionProvider();

  const detectorWithDefault = new FaceDetector();
  let faceDetectionResult = await detectorWithDefault.detect(img);
  assert_equals(mock.getMaxDetectedFaces(), 10, "default maxDetectedFaces");
  assert_equals(mock.getFastMode(), false, "default maxDetectedFaces");

  const detectorWithOptions =
      new FaceDetector({maxDetectedFaces: 7, fastMode: true});
  faceDetectionResult = await detectorWithOptions.detect(img);
  assert_equals(mock.getMaxDetectedFaces(), 7, "maxDetectedFaces");
  assert_equals(mock.getFastMode(), true, "maxDetectedFaces");
}, "Test that FaceDetectionOptions are correctly propagated");

detection_test("BarcodeDetectionTest", async (t, detectionTest) => {
  const img = document.getElementById("img");
  const mock = detectionTest.MockBarcodeDetectionProvider();

  const detectorWithNoOptions = new BarcodeDetector();
  let barcodeDetectionResult = await detectorWithNoOptions.detect(img);
  assert_array_equals(mock.getFormats(), [], "formats");

  const detectorWithOptions = new BarcodeDetector({
      formats: ["code_128", "qr_code"]});
  barcodeDetectionResult = await detectorWithOptions.detect(img);
  assert_array_equals(
      mock.getFormats(),
      [shapeDetection.mojom.BarcodeFormat.CODE_128,
       shapeDetection.mojom.BarcodeFormat.QR_CODE],
      "formats");

  try {
    new BarcodeDetector({formats: []});
    assert_unreached("providing hint option that is empty should fail");
  } catch (error) {
    assert_equals(error.name, "TypeError");
  }

  try {
    new BarcodeDetector({formats: ["unknown"]});
    assert_unreached("providing \"unknown\" as a hint option should fail");
  } catch (error) {
    assert_equals(error.name, "TypeError");
  }

  try {
    new BarcodeDetector({formats: ["foo", "bar"]});
    assert_unreached(
        "providing hint option with unrecognized formats should fail");
  } catch (error) {
    assert_equals(error.name, "TypeError");
  }
}, "Test that BarcodeDetectorOptions are correctly propagated");

</script>
