<!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");

  const invalidFormats = [
    [],
    ["unknown"],
    ["foo", "bar"]
  ];

  invalidFormats.forEach(invalidFormat => {
    assert_throws_js(TypeError, () => new BarcodeDetector({formats: invalidFormat}));
  });

}, "Test that BarcodeDetectorOptions are correctly propagated");

</script>
