| <!DOCTYPE html> |
| <script src="/resources/testharness.js"></script> |
| <script src="/resources/testharnessreport.js"></script> |
| <script src="resources/shapedetection-helpers.js"></script> |
| <script> |
| |
| // Detectors should reject undecodable images with an InvalidStateError. |
| const badImageTests = |
| [ |
| { |
| createDetector: () => { return new FaceDetector(); }, |
| name: "Face - detect(broken image)" |
| }, |
| { |
| createDetector: () => { return new BarcodeDetector(); }, |
| name: "Barcode - detect(broken image)", |
| } |
| ]; |
| |
| for (let badImageTest of badImageTests) { |
| // This test verifies that a Detector will reject an undecodable image. |
| promise_test(async t => { |
| const img = new Image(); |
| const error = |
| await detectOnElementAndExpectError(badImageTest.createDetector, |
| img, "/images/broken.png"); |
| assert_equals(error.name, "InvalidStateError"); |
| }, badImageTest.name); |
| } |
| |
| // Detectors should reject undecodable videos with an InvalidStateError. |
| const badVideoTests = |
| [ |
| { |
| createDetector: () => { return new FaceDetector(); }, |
| name: "Face - detect(broken video)" |
| }, |
| { |
| createDetector: () => { return new BarcodeDetector(); }, |
| name: "Barcode - detect(broken video)" |
| } |
| ]; |
| |
| for (let badVideoTest of badVideoTests) { |
| // This test verifies that a Detector will reject a broken video. |
| promise_test(async t => { |
| const video = document.createElement('video'); |
| const error = |
| await detectOnElementAndExpectError(badVideoTest.createDetector, |
| video, "garbage.webm"); |
| assert_equals(error.name, "InvalidStateError"); |
| }, badVideoTest.name); |
| } |
| |
| // Returns a Promise that is resolve()d if detect() is rejected. Needs an input |
| // |element| (e.g. an HTMLImageElement or HTMLVideoElement) and a |url| to load. |
| function detectOnElementAndExpectError(createDetector, element, url) { |
| return new Promise((resolve, reject) => { |
| const tryDetection = async () => { |
| const detector = createDetector(); |
| try { |
| const detectionResult = await detector.detect(element); |
| reject("Promise should have been rejected."); |
| } catch (error) { |
| resolve(error); |
| } |
| }; |
| element.onload = tryDetection; |
| element.onerror = tryDetection; |
| element.src = url; |
| }); |
| }; |
| |
| </script> |