summaryrefslogtreecommitdiffstats
path: root/testing/web-platform/tests/shape-detection/single-text-detection.https.html
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-07 17:32:43 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-07 17:32:43 +0000
commit6bf0a5cb5034a7e684dcc3500e841785237ce2dd (patch)
treea68f146d7fa01f0134297619fbe7e33db084e0aa /testing/web-platform/tests/shape-detection/single-text-detection.https.html
parentInitial commit. (diff)
downloadthunderbird-6bf0a5cb5034a7e684dcc3500e841785237ce2dd.tar.xz
thunderbird-6bf0a5cb5034a7e684dcc3500e841785237ce2dd.zip
Adding upstream version 1:115.7.0.upstream/1%115.7.0upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'testing/web-platform/tests/shape-detection/single-text-detection.https.html')
-rw-r--r--testing/web-platform/tests/shape-detection/single-text-detection.https.html197
1 files changed, 197 insertions, 0 deletions
diff --git a/testing/web-platform/tests/shape-detection/single-text-detection.https.html b/testing/web-platform/tests/shape-detection/single-text-detection.https.html
new file mode 100644
index 0000000000..829e8ce6d6
--- /dev/null
+++ b/testing/web-platform/tests/shape-detection/single-text-detection.https.html
@@ -0,0 +1,197 @@
+<!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 = {
+ center: {
+ name: "text-center.jpg",
+ value: "Dictionary",
+ text: {boundingBox: {left: 195, right: 613, top: 258, bottom: 358}, fuzziness: 7},
+ topLeft: {position: {x: 199, y: 258}, fuzzinessX: 10, fuzzinessY: 10},
+ topRight: {position: {x: 613, y: 281}, fuzzinessX: 10, fuzzinessY: 17},
+ bottomRight: {position: {x: 609, y: 358}, fuzzinessX: 10, fuzzinessY: 4},
+ bottomLeft: {position: {x: 195, y: 334}, fuzzinessX: 10, fuzzinessY: 22}},
+ bottomLeft: {
+ name: "text-bottom-left.jpg",
+ value: "Dictionary",
+ text: {boundingBox: {left: 53, right: 469, top: 461, bottom: 546}, fuzziness: 10},
+ topLeft: {position: {x: 53, y: 461}, fuzzinessX: 10, fuzzinessY: 20},
+ topRight: {position: {x: 469, y: 463}, fuzzinessX: 10, fuzzinessY: 20},
+ bottomRight: {position: {x: 469, y: 546}, fuzzinessX: 10, fuzzinessY: 17},
+ bottomLeft: {position: {x: 53, y: 544}, fuzzinessX: 10, fuzzinessY: 25}},
+ bottomRight: {
+ name: "text-bottom-right.jpg",
+ value: "Dictionary",
+ text: {boundingBox: {left: 357, right: 772, top: 471, bottom: 564}, fuzziness: 10},
+ topLeft: {position: {x: 358, y: 471}, fuzzinessX: 10, fuzzinessY: 20},
+ topRight: {position: {x: 772, y: 476}, fuzzinessX: 10, fuzzinessY: 20},
+ bottomRight: {position: {x: 771, y: 564}, fuzzinessX: 10, fuzzinessY: 17},
+ bottomLeft: {position: {x: 357, y: 559}, fuzzinessX: 10, fuzzinessY: 25}},
+ topLeft: {
+ name: "text-top-left.jpg",
+ value: "Dictionary",
+ text: {boundingBox: {left: 53, right: 474, top: 81, bottom: 182}, fuzziness: 10},
+ topLeft: {position: {x: 58, y: 81}, fuzzinessX: 10, fuzzinessY: 20},
+ topRight: {position: {x: 474, y: 105}, fuzzinessX: 10, fuzzinessY: 20},
+ bottomRight: {position: {x: 470, y: 182}, fuzzinessX: 10, fuzzinessY: 17},
+ bottomLeft: {position: {x: 53, y: 158}, fuzzinessX: 10, fuzzinessY: 25}},
+ topRight: {
+ name: "text-top-right.jpg",
+ value: "Dictionary",
+ text: {boundingBox: {left: 343, right: 761, top: 66, bottom: 146}, fuzziness: 10},
+ topLeft: {position: {x: 343, y: 66}, fuzzinessX: 10, fuzzinessY: 20},
+ topRight: {position: {x: 761, y: 69}, fuzzinessX: 10, fuzzinessY: 20},
+ bottomRight: {position: {x: 761, y: 146}, fuzzinessX: 10, fuzzinessY: 17},
+ bottomLeft: {position: {x: 343, y: 143}, fuzzinessX: 10, fuzzinessY: 25}}};
+
+const videoTests = {
+ "text.mov": [
+ {time: 0.5, test: imageTests.center},
+ {time: 1.5, test: imageTests.bottomLeft},
+ {time: 2.5, test: imageTests.bottomRight},
+ {time: 3.5, test: imageTests.topLeft},
+ {time: 4.5, test: imageTests.topRight}]};
+
+// The TextDetector contructor doesn't take any options.
+const textDetector = new TextDetector();
+
+async function testImage(imageBitmapSource, test) {
+ var detectedText = await textDetector.detect(imageBitmapSource);
+ assert_equals(detectedText.length, 1);
+ detectedText = detectedText[0];
+ assert_equals(detectedText.rawValue, test.value);
+ checkBoundingBox(detectedText.boundingBox, test.text.boundingBox, test.text.fuzziness);
+ assert_equals(detectedText.cornerPoints.length, 4);
+ const [topLeft, topRight, bottomRight, bottomLeft] = detectedText.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_equals(imageElement.complete, true);
+ await testImage(imageElement, imageTest);
+ }
+}, "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);
+ }
+ 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_equals(imageElement.complete, true);
+ 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);
+ }
+}, "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_equals(imageElement.complete, true);
+ const imageBitmap = await createImageBitmap(imageElement);
+ await testImage(imageBitmap, imageTest);
+ }
+}, "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_equals(imageElement.complete, true);
+ const offscreenCanvas = new OffscreenCanvas(imageElement.width, imageElement.height);
+ const context = offscreenCanvas.getContext("2d");
+ context.drawImage(imageElement, 0, 0);
+ await testImage(offscreenCanvas, imageTest);
+ }
+}, "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);
+ 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_equals(imageElement.complete, true);
+ 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);
+ }
+}, "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_equals(imageElement.complete, true);
+ 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);
+ }
+}, "ImageData");
+
+</script>