diff --git a/crates/web-sys/tests/wasm/element.js b/crates/web-sys/tests/wasm/element.js index ed51fbdb..3f34bc5f 100644 --- a/crates/web-sys/tests/wasm/element.js +++ b/crates/web-sys/tests/wasm/element.js @@ -151,6 +151,11 @@ export function new_title() { return document.createElement("title"); } +export function new_webgl_rendering_context() { + const canvas = document.createElement('canvas'); + return canvas.getContext('webgl'); +} + export function new_xpath_result() { let xmlDoc = new DOMParser().parseFromString("tomato", "application/xml"); let xpathResult = xmlDoc.evaluate("/root//value", xmlDoc, null, XPathResult.ANY_TYPE, null); diff --git a/crates/web-sys/tests/wasm/immutable_slices.rs b/crates/web-sys/tests/wasm/immutable_slices.rs new file mode 100644 index 00000000..92b4cbd3 --- /dev/null +++ b/crates/web-sys/tests/wasm/immutable_slices.rs @@ -0,0 +1,26 @@ +//! When generating our web_sys APIs we default to setting slice references that +//! get passed to JS as mutable in case they get mutated in JS. +//! +//! In certain cases we know for sure that the slice will not get mutated - for +//! example when working with the WebGlRenderingContext APIs. +//! +//! These tests ensure that whitelisted methods do indeed accept mutable slices. +//! +//! @see https://github.com/rustwasm/wasm-bindgen/issues/1005 + +use wasm_bindgen::prelude::*; +use wasm_bindgen_test::*; +use web_sys::WebGlRenderingContext; + +#[wasm_bindgen(module = "./tests/wasm/element.js")] +extern "C" { + fn new_webgl_rendering_context() -> WebGlRenderingContext; +} + +// Ensure that our whitelisted WebGlRenderingContext methods work +#[wasm_bindgen_test] +fn test_webgl_rendering_context_immutable_slices() { + let gl = new_webgl_rendering_context(); + + gl.vertex_attrib1fv_with_f32_array(0, &[5000.]); +} diff --git a/crates/web-sys/tests/wasm/main.rs b/crates/web-sys/tests/wasm/main.rs index 8f2fd5ff..3b57604a 100644 --- a/crates/web-sys/tests/wasm/main.rs +++ b/crates/web-sys/tests/wasm/main.rs @@ -56,6 +56,7 @@ pub mod style_element; pub mod table_element; pub mod title_element; pub mod xpath_result; +pub mod immutable_slices; #[wasm_bindgen_test] fn deref_works() { diff --git a/crates/webidl-tests/lib.rs b/crates/webidl-tests/lib.rs index 44425d9c..7d245db2 100644 --- a/crates/webidl-tests/lib.rs +++ b/crates/webidl-tests/lib.rs @@ -1 +1,3 @@ // intentionally left blank + +// QUESTION FOR REVIEWER: WHY? (I'll include this context in the comment)