| <!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-barcodedetection.js"></script> |
| <script src="resources/mock-facedetection.js"></script> |
| <script> |
| |
| var createTestForVideoElement = function(createDetector, mockReady, |
| detectionResultTest) { |
| async_test(function(t) { |
| var video = document.createElement("video"); |
| video.src = "../imported/wpt/media/white.webm"; |
| video.loop = true; |
| video.autoplay = true; |
| video.onerror = this.unreached_func("<video> error"); |
| video.onplay = this.step_func(function() { |
| var theMock = null; |
| mockReady() |
| .then(mock => { |
| theMock = mock; |
| var detector = createDetector(); |
| return detector; |
| }) |
| .catch(error => { |
| assert_unreached("Error creating Mock Detector: " + error); |
| }) |
| .then(detector => { |
| return detector.detect(video); |
| }) |
| .then(detectionResult => { |
| detectionResultTest(detectionResult, theMock); |
| t.done(); |
| }) |
| .catch(error => { |
| assert_unreached("Error during detect(video): " + error); |
| }); |
| }); |
| |
| video.load(); |
| }, "Detector detect(HTMLVideoElement)"); |
| }; |
| |
| function FaceDetectorDetectionResultTest(detectionResult, mock) { |
| const imageReceivedByMock = mock.getFrameData(); |
| assert_equals(imageReceivedByMock.byteLength, 307200, |
| "Image length"); |
| const WHITE_PIXEL = 0xFFFFFFFF; |
| assert_equals(imageReceivedByMock[0], WHITE_PIXEL, "Pixel color"); |
| assert_equals(detectionResult.length, 3, "Number of faces"); |
| } |
| |
| function BarcodeDetectorDetectionResultTest(detectionResult, mock) { |
| assert_equals(detectionResult.length, 2, "Number of barcodes"); |
| assert_equals(detectionResult[0].rawValue, "cats", "barcode 1"); |
| assert_equals(detectionResult[1].rawValue, "dogs", "barcode 2"); |
| } |
| |
| // These tests verify that a Detector's detect() works on an HTMLVideoElement. |
| // Use the mock mojo server implemented in mock-{barcode,face}detection.js. |
| generate_tests(createTestForVideoElement, [ |
| [ |
| "Face", |
| () => { return new FaceDetector(); }, |
| () => { return mockFaceDetectionReady; }, |
| FaceDetectorDetectionResultTest |
| ], |
| [ |
| "Barcode", |
| () => { return new BarcodeDetector(); }, |
| () => { return mockBarcodeDetectionReady; }, |
| BarcodeDetectorDetectionResultTest |
| ] |
| ]); |
| |
| </script> |