summaryrefslogtreecommitdiff
path: root/cli
diff options
context:
space:
mode:
authorJamie <5964236+jamsinclair@users.noreply.github.com>2023-12-06 22:20:28 +0900
committerGitHub <noreply@github.com>2023-12-06 14:20:28 +0100
commit8c0fb9003d874fcbee0b1a6f6ee30dfb58c668bc (patch)
tree643966c1543346f803e373329d6c8bb28e199621 /cli
parentdadd8b3d660fd2fd56803f29e1d8b6dd7a2adde9 (diff)
feat(ext/web): add ImageData Web API (#21183)
Fixes #19288 Adds the `ImageData` Web API. This would be beneficial to projects using `ImageData` as a convenient transport layer for pixel data. This is common in Web Assembly projects that manipulate images. Having this global available in Deno would improve compatibility of existing JS libraries. **References** - [MDN ImageData Web API](https://developer.mozilla.org/en-US/docs/Web/API/ImageData) - [whatwg HTML Standard Canvas Spec](https://html.spec.whatwg.org/multipage/canvas.html#pixel-manipulation)
Diffstat (limited to 'cli')
-rw-r--r--cli/tests/integration/js_unit_tests.rs1
-rw-r--r--cli/tests/testdata/workers/image_data_worker.ts2
-rw-r--r--cli/tests/unit/image_data_test.ts53
3 files changed, 56 insertions, 0 deletions
diff --git a/cli/tests/integration/js_unit_tests.rs b/cli/tests/integration/js_unit_tests.rs
index bdab48926..165ab25bf 100644
--- a/cli/tests/integration/js_unit_tests.rs
+++ b/cli/tests/integration/js_unit_tests.rs
@@ -42,6 +42,7 @@ util::unit_test_factory!(
globals_test,
headers_test,
http_test,
+ image_data_test,
internals_test,
intl_test,
io_test,
diff --git a/cli/tests/testdata/workers/image_data_worker.ts b/cli/tests/testdata/workers/image_data_worker.ts
new file mode 100644
index 000000000..bf920d2f3
--- /dev/null
+++ b/cli/tests/testdata/workers/image_data_worker.ts
@@ -0,0 +1,2 @@
+const data = new ImageData(2, 2, { colorSpace: "display-p3" });
+postMessage(data.data.length);
diff --git a/cli/tests/unit/image_data_test.ts b/cli/tests/unit/image_data_test.ts
new file mode 100644
index 000000000..ea5d64dbb
--- /dev/null
+++ b/cli/tests/unit/image_data_test.ts
@@ -0,0 +1,53 @@
+// Copyright 2018-2023 the Deno authors. All rights reserved. MIT license.
+
+import { assertEquals } from "./test_util.ts";
+
+Deno.test(function imageDataInitializedWithSourceWidthAndHeight() {
+ const imageData = new ImageData(16, 9);
+
+ assertEquals(imageData.width, 16);
+ assertEquals(imageData.height, 9);
+ assertEquals(imageData.data.length, 16 * 9 * 4); // width * height * 4 (RGBA pixels)
+ assertEquals(imageData.colorSpace, "srgb");
+});
+
+Deno.test(function imageDataInitializedWithImageDataAndWidth() {
+ const imageData = new ImageData(new Uint8ClampedArray(16 * 9 * 4), 16);
+
+ assertEquals(imageData.width, 16);
+ assertEquals(imageData.height, 9);
+ assertEquals(imageData.data.length, 16 * 9 * 4); // width * height * 4 (RGBA pixels)
+ assertEquals(imageData.colorSpace, "srgb");
+});
+
+Deno.test(
+ function imageDataInitializedWithImageDataAndWidthAndHeightAndColorSpace() {
+ const imageData = new ImageData(new Uint8ClampedArray(16 * 9 * 4), 16, 9, {
+ colorSpace: "display-p3",
+ });
+
+ assertEquals(imageData.width, 16);
+ assertEquals(imageData.height, 9);
+ assertEquals(imageData.data.length, 16 * 9 * 4); // width * height * 4 (RGBA pixels)
+ assertEquals(imageData.colorSpace, "display-p3");
+ },
+);
+
+Deno.test(
+ async function imageDataUsedInWorker() {
+ const { promise, resolve } = Promise.withResolvers<void>();
+ const url = import.meta.resolve(
+ "../testdata/workers/image_data_worker.ts",
+ );
+ const expectedData = 16;
+
+ const worker = new Worker(url, { type: "module" });
+ worker.onmessage = function (e) {
+ assertEquals(expectedData, e.data);
+ worker.terminate();
+ resolve();
+ };
+
+ await promise;
+ },
+);