| <!DOCTYPE html> |
| <script src="/resources/testharness.js"></script> |
| <script src="/resources/testharnessreport.js"></script> |
| <script src="resources/single-detection-helpers.js"></script> |
| <body> |
| </body> |
| <script> |
| const imageTests = { |
| aztecCorrection: { |
| name: "aztec-correction.jpg", |
| format: "aztec", |
| payload: "Barcode Detection is Fun!", |
| barcode: {boundingBox: {left: 240, right: 559, top: 144, bottom: 454}, fuzziness: 15}, |
| topLeft: {position: {x: 240, y: 144}, fuzzinessX: 15, fuzzinessY: 15}, |
| topRight: {position: {x: 559, y: 144}, fuzzinessX: 15, fuzzinessY: 15}, |
| bottomRight: {position: {x: 559, y: 454}, fuzzinessX: 15, fuzzinessY: 15}, |
| bottomLeft: {position: {x: 240, y: 454}, fuzzinessX: 15, fuzzinessY: 15}}, |
| aztecFull: { |
| name: "aztec-full.jpg", |
| format: "aztec", |
| payload: "Barcode Detection is Fun!", |
| barcode: {boundingBox: {left: 281, right: 518, top: 184, bottom: 414}, fuzziness: 15}, |
| topLeft: {position: {x: 281, y: 184}, fuzzinessX: 15, fuzzinessY: 15}, |
| topRight: {position: {x: 518, y: 184}, fuzzinessX: 15, fuzzinessY: 15}, |
| bottomRight: {position: {x: 518, y: 414}, fuzzinessX: 15, fuzzinessY: 15}, |
| bottomLeft: {position: {x: 281, y: 414}, fuzzinessX: 15, fuzzinessY: 15}}, |
| aztecLayers: { |
| name: "aztec-layers.jpg", |
| format: "aztec", |
| payload: "Barcode Detection is Fun!", |
| barcode: {boundingBox: {left: 175, right: 625, top: 75, bottom: 525}, fuzziness: 15}, |
| topLeft: {position: {x: 175, y: 75}, fuzzinessX: 15, fuzzinessY: 15}, |
| topRight: {position: {x: 625, y: 75}, fuzzinessX: 15, fuzzinessY: 15}, |
| bottomRight: {position: {x: 625, y: 525}, fuzzinessX: 15, fuzzinessY: 15}, |
| bottomLeft: {position: {x: 175, y: 525}, fuzzinessX: 15, fuzzinessY: 15}}, |
| aztec: { |
| name: "aztec.jpg", |
| format: "aztec", |
| payload: "Barcode Detection is Fun!", |
| barcode: {boundingBox: {left: 302, right: 497, top: 202, bottom: 397}, fuzziness: 15}, |
| topLeft: {position: {x: 302, y: 202}, fuzzinessX: 15, fuzzinessY: 15}, |
| topRight: {position: {x: 497, y: 202}, fuzzinessX: 15, fuzzinessY: 15}, |
| bottomRight: {position: {x: 497, y: 397}, fuzzinessX: 15, fuzzinessY: 15}, |
| bottomLeft: {position: {x: 302, y: 397}, fuzzinessX: 15, fuzzinessY: 15}}, |
| code128Height: { |
| name: "code128-height.jpg", |
| format: "code_128", |
| payload: "Barcode Detection is Fun!", |
| barcode: {boundingBox: {left: 90, right: 711, top: 149, bottom: 449}, fuzziness: 15}, |
| topLeft: {position: {x: 90, y: 149}, fuzzinessX: 15, fuzzinessY: 15}, |
| topRight: {position: {x: 711, y: 149}, fuzzinessX: 15, fuzzinessY: 15}, |
| bottomRight: {position: {x: 711, y: 450}, fuzzinessX: 15, fuzzinessY: 15}, |
| bottomLeft: {position: {x: 90, y: 450}, fuzzinessX: 15, fuzzinessY: 15}}, |
| code128: { |
| name: "code128.jpg", |
| format: "code_128", |
| payload: "Barcode Detection is Fun!", |
| barcode: {boundingBox: {left: 90, right: 710, top: 267, bottom: 332}, fuzziness: 15}, |
| topLeft: {position: {x: 90, y: 267}, fuzzinessX: 15, fuzzinessY: 15}, |
| topRight: {position: {x: 710, y: 267}, fuzzinessX: 15, fuzzinessY: 15}, |
| bottomRight: {position: {x: 710, y: 332}, fuzzinessX: 15, fuzzinessY: 15}, |
| bottomLeft: {position: {x: 90, y: 332}, fuzzinessX: 15, fuzzinessY: 15}}, |
| pdf417Columns: { |
| name: "pdf417-columns.jpg", |
| format: "pdf417", |
| payload: "Barcode Detection is Fun!", |
| barcode: {boundingBox: {left: 39, right: 755, top: 243, bottom: 356}, fuzziness: 15}, |
| topLeft: {position: {x: 39, y: 243}, fuzzinessX: 15, fuzzinessY: 15}, |
| topRight: {position: {x: 755, y: 243}, fuzzinessX: 15, fuzzinessY: 15}, |
| bottomRight: {position: {x: 755, y: 356}, fuzzinessX: 15, fuzzinessY: 15}, |
| bottomLeft: {position: {x: 39, y: 356}, fuzzinessX: 15, fuzzinessY: 15}}, |
| pdf417Compact: { |
| name: "pdf417-compact.jpg", |
| format: "pdf417", |
| payload: "Barcode Detection is Fun!", |
| barcode: {boundingBox: {left: 186, right: 786, top: 242, bottom: 359}, fuzziness: 15}, |
| topLeft: {position: {x: 186, y: 242}, fuzzinessX: 15, fuzzinessY: 15}, |
| topRight: {position: {x: 786, y: 242}, fuzzinessX: 15, fuzzinessY: 15}, |
| bottomRight: {position: {x: 786, y: 359}, fuzzinessX: 15, fuzzinessY: 15}, |
| bottomLeft: {position: {x: 186, y: 359}, fuzzinessX: 15, fuzzinessY: 15}}, |
| pdf417Compaction: { |
| name: "pdf417-compaction.jpg", |
| format: "pdf417", |
| payload: "Barcode Detection is Fun!", |
| barcode: {boundingBox: {left: 84, right: 712, top: 217, bottom: 382}, fuzziness: 15}, |
| topLeft: {position: {x: 84, y: 217}, fuzzinessX: 15, fuzzinessY: 15}, |
| topRight: {position: {x: 712, y: 217}, fuzzinessX: 15, fuzzinessY: 15}, |
| bottomRight: {position: {x: 712, y: 382}, fuzzinessX: 15, fuzzinessY: 15}, |
| bottomLeft: {position: {x: 84, y: 382}, fuzzinessX: 15, fuzzinessY: 15}}, |
| pdf417Correction: { |
| name: "pdf417-correction.jpg", |
| format: "pdf417", |
| payload: "Barcode Detection is Fun!", |
| barcode: {boundingBox: {left: 39, right: 755, top: 209, bottom: 390}, fuzziness: 15}, |
| topLeft: {position: {x: 39, y: 209}, fuzzinessX: 15, fuzzinessY: 15}, |
| topRight: {position: {x: 755, y: 209}, fuzzinessX: 15, fuzzinessY: 15}, |
| bottomRight: {position: {x: 755, y: 390}, fuzzinessX: 15, fuzzinessY: 15}, |
| bottomLeft: {position: {x: 39, y: 390}, fuzzinessX: 15, fuzzinessY: 15}}, |
| pdf417Rows: { |
| name: "pdf417-rows.jpg", |
| format: "pdf417", |
| payload: "Barcode Detection is Fun!", |
| barcode: {boundingBox: {left: 84, right: 712, top: 227, bottom: 360}, fuzziness: 15}, |
| topLeft: {position: {x: 84, y: 227}, fuzzinessX: 15, fuzzinessY: 15}, |
| topRight: {position: {x: 712, y: 227}, fuzzinessX: 15, fuzzinessY: 15}, |
| bottomRight: {position: {x: 712, y: 360}, fuzzinessX: 15, fuzzinessY: 15}, |
| bottomLeft: {position: {x: 84, y: 360}, fuzzinessX: 15, fuzzinessY: 15}}, |
| pdf417Square: { |
| name: "pdf417-square.jpg", |
| format: "pdf417", |
| payload: "Barcode Detection is Fun!", |
| barcode: {boundingBox: {left: 170, right: 621, top: 119, bottom: 480}, fuzziness: 15}, |
| topLeft: {position: {x: 171, y: 119}, fuzzinessX: 15, fuzzinessY: 15}, |
| topRight: {position: {x: 621, y: 119}, fuzzinessX: 15, fuzzinessY: 15}, |
| bottomRight: {position: {x: 621, y: 480}, fuzzinessX: 15, fuzzinessY: 15}, |
| bottomLeft: {position: {x: 170, y: 480}, fuzzinessX: 15, fuzzinessY: 15}}, |
| pdf417Taller: { |
| name: "pdf417-taller.jpg", |
| format: "pdf417", |
| payload: "Barcode Detection is Fun!", |
| barcode: {boundingBox: {left: 84, right: 713, top: 209, bottom: 390}, fuzziness: 15}, |
| topLeft: {position: {x: 84, y: 209}, fuzzinessX: 15, fuzzinessY: 15}, |
| topRight: {position: {x: 713, y: 209}, fuzzinessX: 15, fuzzinessY: 15}, |
| bottomRight: {position: {x: 713, y: 390}, fuzzinessX: 15, fuzzinessY: 15}, |
| bottomLeft: {position: {x: 84, y: 390}, fuzzinessX: 15, fuzzinessY: 15}}, |
| pdf417Wider: { |
| name: "pdf417-wider.jpg", |
| format: "pdf417", |
| payload: "Barcode Detection is Fun!", |
| barcode: {boundingBox: {left: 84, right: 712, top: 227, bottom: 360}, fuzziness: 15}, |
| topLeft: {position: {x: 84, y: 227}, fuzzinessX: 15, fuzzinessY: 15}, |
| topRight: {position: {x: 712, y: 227}, fuzzinessX: 15, fuzzinessY: 15}, |
| bottomRight: {position: {x: 712, y: 360}, fuzzinessX: 15, fuzzinessY: 15}, |
| bottomLeft: {position: {x: 84, y: 360}, fuzzinessX: 15, fuzzinessY: 15}}, |
| pdf417: { |
| name: "pdf417.jpg", |
| format: "pdf417", |
| payload: "Barcode Detection is Fun!", |
| barcode: {boundingBox: {left: 126, right: 666, top: 209, bottom: 390}, fuzziness: 15}, |
| topLeft: {position: {x: 126, y: 209}, fuzzinessX: 15, fuzzinessY: 15}, |
| topRight: {position: {x: 666, y: 209}, fuzzinessX: 15, fuzzinessY: 15}, |
| bottomRight: {position: {x: 666, y: 390}, fuzzinessX: 15, fuzzinessY: 15}, |
| bottomLeft: {position: {x: 126, y: 390}, fuzzinessX: 15, fuzzinessY: 15}}, |
| qrBottomLeft: { |
| name: "qr-bottom-left.jpg", |
| format: "qr_code", |
| payload: "Barcode Detection is Fun!", |
| barcode: {boundingBox: {left: 75, right: 325, top: 325, bottom: 575}, fuzziness: 5}, |
| topLeft: {position: {x: 75, y: 325}, fuzzinessX: 15, fuzzinessY: 15}, |
| topRight: {position: {x: 325, y: 325}, fuzzinessX: 15, fuzzinessY: 15}, |
| bottomRight: {position: {x: 325, y: 575}, fuzzinessX: 15, fuzzinessY: 15}, |
| bottomLeft: {position: {x: 75, y: 575}, fuzzinessX: 15, fuzzinessY: 15}}, |
| qrBottomRight: { |
| name: "qr-bottom-right.jpg", |
| format: "qr_code", |
| payload: "Barcode Detection is Fun!", |
| barcode: {boundingBox: {left: 475, right: 725, top: 325, bottom: 575}, fuzziness: 5}, |
| topLeft: {position: {x: 475, y: 325}, fuzzinessX: 15, fuzzinessY: 15}, |
| topRight: {position: {x: 725, y: 325}, fuzzinessX: 15, fuzzinessY: 15}, |
| bottomRight: {position: {x: 725, y: 575}, fuzzinessX: 15, fuzzinessY: 15}, |
| bottomLeft: {position: {x: 475, y: 575}, fuzzinessX: 15, fuzzinessY: 15}}, |
| qrCenter: { |
| name: "qr-center.jpg", |
| format: "qr_code", |
| payload: "Barcode Detection is Fun!", |
| barcode: {boundingBox: {left: 277, right: 524, top: 172, bottom: 428}, fuzziness: 5}, |
| topLeft: {position: {x: 277, y: 172}, fuzzinessX: 15, fuzzinessY: 15}, |
| topRight: {position: {x: 521, y: 172}, fuzzinessX: 15, fuzzinessY: 15}, |
| bottomRight: {position: {x: 524, y: 425}, fuzzinessX: 15, fuzzinessY: 15}, |
| bottomLeft: {position: {x: 277, y: 428}, fuzzinessX: 15, fuzzinessY: 15}}, |
| qrH: { |
| name: "qr-h.jpg", |
| format: "qr_code", |
| payload: "Barcode Detection is Fun!", |
| barcode: {boundingBox: {left: 235, right: 565, top: 135, bottom: 465}, fuzziness: 5}, |
| topLeft: {position: {x: 235, y: 135}, fuzzinessX: 15, fuzzinessY: 15}, |
| topRight: {position: {x: 565, y: 135}, fuzzinessX: 15, fuzzinessY: 15}, |
| bottomRight: {position: {x: 565, y: 465}, fuzzinessX: 15, fuzzinessY: 15}, |
| bottomLeft: {position: {x: 235, y: 465}, fuzzinessX: 15, fuzzinessY: 15}}, |
| qrL: { |
| name: "qr-l.jpg", |
| format: "qr_code", |
| payload: "Barcode Detection is Fun!", |
| barcode: {boundingBox: {left: 275, right: 525, top: 175, bottom: 425}, fuzziness: 5}, |
| topLeft: {position: {x: 275, y: 175}, fuzzinessX: 15, fuzzinessY: 15}, |
| topRight: {position: {x: 525, y: 175}, fuzzinessX: 15, fuzzinessY: 15}, |
| bottomRight: {position: {x: 525, y: 425}, fuzzinessX: 15, fuzzinessY: 15}, |
| bottomLeft: {position: {x: 275, y: 425}, fuzzinessX: 15, fuzzinessY: 15}}, |
| qrM: { |
| name: "qr-m.jpg", |
| format: "qr_code", |
| payload: "Barcode Detection is Fun!", |
| barcode: {boundingBox: {left: 277, right: 524, top: 172, bottom: 428}, fuzziness: 5}, |
| topLeft: {position: {x: 277, y: 172}, fuzzinessX: 15, fuzzinessY: 15}, |
| topRight: {position: {x: 521, y: 172}, fuzzinessX: 15, fuzzinessY: 15}, |
| bottomRight: {position: {x: 524, y: 425}, fuzzinessX: 15, fuzzinessY: 15}, |
| bottomLeft: {position: {x: 277, y: 428}, fuzzinessX: 15, fuzzinessY: 15}}, |
| qrQ: { |
| name: "qr-q.jpg", |
| format: "qr_code", |
| payload: "Barcode Detection is Fun!", |
| barcode: {boundingBox: {left: 252, right: 548, top: 157, bottom: 444}, fuzziness: 5}, |
| topLeft: {position: {x: 252, y: 157}, fuzzinessX: 15, fuzzinessY: 15}, |
| topRight: {position: {x: 548, y: 157}, fuzzinessX: 15, fuzzinessY: 15}, |
| bottomRight: {position: {x: 545, y: 444}, fuzzinessX: 15, fuzzinessY: 15}, |
| bottomLeft: {position: {x: 252, y: 441}, fuzzinessX: 15, fuzzinessY: 15}}, |
| qrTopLeft: { |
| name: "qr-top-left.jpg", |
| format: "qr_code", |
| payload: "Barcode Detection is Fun!", |
| barcode: {boundingBox: {left: 75, right: 325, top: 25, bottom: 275}, fuzziness: 5}, |
| topLeft: {position: {x: 75, y: 25}, fuzzinessX: 15, fuzzinessY: 15}, |
| topRight: {position: {x: 325, y: 25}, fuzzinessX: 15, fuzzinessY: 15}, |
| bottomRight: {position: {x: 325, y: 275}, fuzzinessX: 15, fuzzinessY: 15}, |
| bottomLeft: {position: {x: 75, y: 275}, fuzzinessX: 15, fuzzinessY: 15}}, |
| qrTopRight: { |
| name: "qr-top-right.jpg", |
| format: "qr_code", |
| payload: "Barcode Detection is Fun!", |
| barcode: {boundingBox: {left: 475, right: 725, top: 25, bottom: 275}, fuzziness: 5}, |
| topLeft: {position: {x: 475, y: 25}, fuzzinessX: 15, fuzzinessY: 15}, |
| topRight: {position: {x: 725, y: 25}, fuzzinessX: 15, fuzzinessY: 15}, |
| bottomRight: {position: {x: 725, y: 275}, fuzzinessX: 15, fuzzinessY: 15}, |
| bottomLeft: {position: {x: 475, y: 275}, fuzzinessX: 15, fuzzinessY: 15}}}; |
| |
| const videoTests = { |
| "barcodes.mov": [ |
| {time: 0.5, test: imageTests.aztecCorrection}, |
| {time: 1.5, test: imageTests.aztecFull}, |
| {time: 2.5, test: imageTests.aztecLayers}, |
| {time: 3.5, test: imageTests.aztec}, |
| {time: 4.5, test: imageTests.code128Height}, |
| {time: 5.5, test: imageTests.code128}, |
| {time: 6.5, test: imageTests.pdf417Columns}, |
| {time: 7.5, test: imageTests.pdf417Compact}, |
| {time: 8.5, test: imageTests.pdf417Compaction}, |
| {time: 9.5, test: imageTests.pdf417Correction}, |
| {time: 10.5, test: imageTests.pdf417Rows}, |
| {time: 11.5, test: imageTests.pdf417Square}, |
| {time: 12.5, test: imageTests.pdf417Taller}, |
| {time: 13.5, test: imageTests.pdf417Wider}, |
| {time: 14.5, test: imageTests.pdf417}, |
| {time: 15.5, test: imageTests.qrBottomLeft}, |
| {time: 16.5, test: imageTests.qrBottomRight}, |
| {time: 17.5, test: imageTests.qrCenter}, |
| {time: 18.5, test: imageTests.qrH}, |
| {time: 19.5, test: imageTests.qrL}, |
| {time: 20.5, test: imageTests.qrM}, |
| {time: 21.5, test: imageTests.qrQ}, |
| {time: 22.5, test: imageTests.qrTopLeft}, |
| {time: 23.5, test: imageTests.qrTopRight}]}; |
| |
| // All the fields in FaceDetectorOptions are hints, so they can't be tested. |
| const barcodeDetector = new BarcodeDetector(); |
| |
| async function testImage(imageBitmapSource, test, key) { |
| const supportedFormats = await BarcodeDetector.getSupportedFormats(); |
| if (!supportedFormats.includes(test.format)) |
| return; |
| const detectedBarcodes = await barcodeDetector.detect(imageBitmapSource); |
| assert_equals(detectedBarcodes.length, 1); |
| const detectedBarcode = detectedBarcodes[0]; |
| checkBoundingBox(detectedBarcode.boundingBox, test.barcode.boundingBox, test.barcode.fuzziness); |
| assert_equals(detectedBarcode.rawValue, test.payload); |
| assert_equals(detectedBarcode.format, test.format); |
| assert_equals(detectedBarcode.cornerPoints.length, 4); |
| const [topLeft, topRight, bottomRight, bottomLeft] = detectedBarcode.cornerPoints; |
| checkPointIsNear(topLeft, test.topLeft.position, test.topLeft.fuzzinessX, test.topLeft.fuzzinessY); |
| checkPointIsNear(topRight, test.topRight.position, test.topRight.fuzzinessX, test.topRight.fuzzinessY); |
| checkPointIsNear(bottomRight, test.bottomRight.position, test.bottomRight.fuzzinessX, test.bottomRight.fuzzinessY); |
| checkPointIsNear(bottomLeft, test.bottomLeft.position, test.bottomLeft.fuzzinessX, test.bottomLeft.fuzzinessY); |
| } |
| |
| promise_test(async t => { |
| for (const [key, imageTest] of Object.entries(imageTests)) { |
| const imageElement = document.createElement("img"); |
| imageElement.src = `resources/${imageTest.name}`; |
| await imageLoadedPromise(imageElement); |
| assert_true(imageElement.complete, "Image element should have loaded successfully"); |
| await testImage(imageElement, imageTest, key); |
| } |
| }, "HTMLImageElement"); |
| |
| // Intentionally don't test SVGImageElement. The spec https://html.spec.whatwg.org/multipage/canvas.html#canvasimagesource says it's supposed to be |
| // a CanvasImageSource, but neither WebKit nor Blink actually seem to implement that. |
| |
| promise_test(async t => { |
| for (const [name, tests] of Object.entries(videoTests)) { |
| const videoElement = document.createElement("video"); |
| document.body.appendChild(videoElement); |
| videoElement.src = `resources/${name}`; |
| const loadedPromise = videoLoadedPromise(videoElement); |
| videoElement.load(); |
| await loadedPromise; |
| for (const test of tests) { |
| await seekTo(videoElement, test.time); |
| await testImage(videoElement, test.test, name); |
| } |
| document.body.removeChild(videoElement); |
| } |
| }, "HTMLVideoElement"); |
| |
| promise_test(async t => { |
| for (const [key, imageTest] of Object.entries(imageTests)) { |
| const imageElement = document.createElement("img"); |
| imageElement.src = `resources/${imageTest.name}`; |
| await imageLoadedPromise(imageElement); |
| assert_true(imageElement.complete, "Image element should have loaded successfully"); |
| const canvasElement = document.createElement("canvas"); |
| canvasElement.width = imageElement.width; |
| canvasElement.height = imageElement.height; |
| const context = canvasElement.getContext("2d"); |
| context.drawImage(imageElement, 0, 0); |
| await testImage(canvasElement, imageTest, key); |
| } |
| }, "HTMLCanvasElement"); |
| |
| promise_test(async t => { |
| for (const [key, imageTest] of Object.entries(imageTests)) { |
| const imageElement = document.createElement("img"); |
| imageElement.src = `resources/${imageTest.name}`; |
| await imageLoadedPromise(imageElement); |
| assert_true(imageElement.complete, "Image element should have loaded successfully"); |
| const imageBitmap = await createImageBitmap(imageElement); |
| await testImage(imageBitmap, imageTest, key); |
| } |
| }, "ImageBitmap"); |
| |
| promise_test(async t => { |
| for (const [key, imageTest] of Object.entries(imageTests)) { |
| const imageElement = document.createElement("img"); |
| imageElement.src = `resources/${imageTest.name}`; |
| await imageLoadedPromise(imageElement); |
| assert_true(imageElement.complete, "Image element should have loaded successfully"); |
| const offscreenCanvas = new OffscreenCanvas(imageElement.width, imageElement.height); |
| const context = offscreenCanvas.getContext("2d"); |
| context.drawImage(imageElement, 0, 0); |
| await testImage(offscreenCanvas, imageTest, key); |
| } |
| }, "OffscreenCanvas"); |
| |
| promise_test(async t => { |
| for (const [name, tests] of Object.entries(videoTests)) { |
| const videoElement = document.createElement("video"); |
| document.body.appendChild(videoElement); |
| videoElement.src = `resources/${name}`; |
| const loadedPromise = videoLoadedPromise(videoElement); |
| videoElement.load(); |
| await loadedPromise; |
| for (const test of tests) { |
| await seekTo(videoElement, test.time); |
| const videoFrame = new VideoFrame(videoElement); |
| await testImage(videoFrame, test.test, name); |
| videoFrame.close(); |
| } |
| document.body.removeChild(videoElement); |
| } |
| }, "VideoFrame"); |
| |
| promise_test(async t => { |
| for (const [key, imageTest] of Object.entries(imageTests)) { |
| const imageElement = document.createElement("img"); |
| imageElement.src = `resources/${imageTest.name}`; |
| await imageLoadedPromise(imageElement); |
| assert_true(imageElement.complete, "Image element should have loaded successfully"); |
| const canvasElement = document.createElement("canvas"); |
| canvasElement.width = imageElement.width; |
| canvasElement.height = imageElement.height; |
| const context = canvasElement.getContext("2d"); |
| context.drawImage(imageElement, 0, 0); |
| const blob = await new Promise(function(resolve, reject) { |
| canvasElement.toBlob(function(blob) { |
| return resolve(blob); |
| }); |
| }); |
| await testImage(blob, imageTest, key); |
| } |
| }, "Blob"); |
| |
| promise_test(async t => { |
| for (const [key, imageTest] of Object.entries(imageTests)) { |
| const imageElement = document.createElement("img"); |
| imageElement.src = `resources/${imageTest.name}`; |
| await imageLoadedPromise(imageElement); |
| assert_true(imageElement.complete, "Image element should have loaded successfully"); |
| const canvasElement = document.createElement("canvas"); |
| canvasElement.width = imageElement.width; |
| canvasElement.height = imageElement.height; |
| const context = canvasElement.getContext("2d"); |
| context.drawImage(imageElement, 0, 0); |
| const imageData = context.getImageData(0, 0, canvasElement.width, canvasElement.height); |
| await testImage(imageData, imageTest, key); |
| } |
| }, "ImageData"); |
| |
| </script> |