diff --git a/crates/web-sys/tests/wasm/element.js b/crates/web-sys/tests/wasm/element.js index e3b94578c59..92d3cfeee53 100644 --- a/crates/web-sys/tests/wasm/element.js +++ b/crates/web-sys/tests/wasm/element.js @@ -161,6 +161,11 @@ export function new_webgl2_rendering_context() { return canvas.getContext('webgl2'); } +export function new_websocket () { + const websocket = new WebSocket(""); + return websocket; +} + 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/whitelisted_immutable_slices.rs b/crates/web-sys/tests/wasm/whitelisted_immutable_slices.rs index 92c3161904d..a1cdca5102a 100644 --- a/crates/web-sys/tests/wasm/whitelisted_immutable_slices.rs +++ b/crates/web-sys/tests/wasm/whitelisted_immutable_slices.rs @@ -4,19 +4,23 @@ //! 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. +//! These tests ensure that whitelisted methods do indeed accept immutable slices. //! Especially important since this whitelist is stringly typed and currently //! maintained by hand. //! //! @see https://github.com/rustwasm/wasm-bindgen/issues/1005 use wasm_bindgen::prelude::*; -use web_sys::{WebGl2RenderingContext, WebGlRenderingContext}; +use web_sys::{WebGl2RenderingContext, WebGlRenderingContext, WebSocket}; +use wasm_bindgen_test::*; + +wasm_bindgen_test_configure!(run_in_browser); #[wasm_bindgen(module = "/tests/wasm/element.js")] extern "C" { fn new_webgl_rendering_context() -> WebGlRenderingContext; fn new_webgl2_rendering_context() -> WebGl2RenderingContext; + fn new_websocket() -> WebSocket; // TODO: Add a function to create another type to test here. // These functions come from element.js } @@ -29,61 +33,70 @@ extern "C" { // It currently works in chromedriver so if you need to run this in the meantime you can // uncomment this block and run it in using chromedriver. // -// CHROMEDRIVER=chromedriver cargo test --manifest-path crates/web-sys/Cargo.toml --target wasm32-unknown-unknown --all-features test_webgl_rendering_context_immutable_slices +// CHROMEDRIVER=chromedriver cargo test -p web-sys --target wasm32-unknown-unknown --all-features test_webgl_rendering_context_immutable_slices // 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, &[1.]); -// gl.vertex_attrib2fv_with_f32_array(0, &[1.]); -// gl.vertex_attrib3fv_with_f32_array(0, &[1.]); -// gl.vertex_attrib4fv_with_f32_array(0, &[1.]); -// -// gl.uniform1fv_with_f32_array(None, &[1.]); -// gl.uniform2fv_with_f32_array(None, &[1.]); -// gl.uniform3fv_with_f32_array(None, &[1.]); -// gl.uniform4fv_with_f32_array(None, &[1.]); -// -// gl.uniform_matrix2fv_with_f32_array(None, false, &[1.]); -// gl.uniform_matrix3fv_with_f32_array(None, false, &[1.]); -// gl.uniform_matrix4fv_with_f32_array(None, false, &[1.]); -// -// gl.tex_image_2d_with_i32_and_i32_and_i32_and_format_and_type_and_opt_u8_array( -// 0, -// 0, -// 0, -// 0, -// 0, -// 0, -// 0, -// 0, -// Some(&[1]), -// ); -// gl.tex_sub_image_2d_with_i32_and_i32_and_u32_and_type_and_opt_u8_array( -// 0, -// 0, -// 0, -// 0, -// 0, -// 0, -// 0, -// 0, -// Some(&[1]), -// ); -// gl.compressed_tex_image_2d_with_u8_array(0, 0, 0, 0, 0, 0, &[1]); -// } -// -//#[wasm_bindgen_test] -//fn test_webgl2_rendering_context_immutable_slices() { -// let gl = new_webgl2_rendering_context(); +// GECKODRIVER=geckodriver cargo test -p web-sys --target wasm32-unknown-unknown --all-features test_webgl_rendering_context_immutable_slices +#[wasm_bindgen_test] +fn test_webgl_rendering_context_immutable_slices() { + let gl = new_webgl_rendering_context(); + + gl.vertex_attrib1fv_with_f32_array(0, &[1.]); + gl.vertex_attrib2fv_with_f32_array(0, &[1.]); + gl.vertex_attrib3fv_with_f32_array(0, &[1.]); + gl.vertex_attrib4fv_with_f32_array(0, &[1.]); + + gl.uniform1fv_with_f32_array(None, &[1.]); + gl.uniform2fv_with_f32_array(None, &[1.]); + gl.uniform3fv_with_f32_array(None, &[1.]); + gl.uniform4fv_with_f32_array(None, &[1.]); + + gl.uniform_matrix2fv_with_f32_array(None, false, &[1.]); + gl.uniform_matrix3fv_with_f32_array(None, false, &[1.]); + gl.uniform_matrix4fv_with_f32_array(None, false, &[1.]); + + gl.tex_image_2d_with_i32_and_i32_and_i32_and_format_and_type_and_opt_u8_array( + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + Some(&[1]), + ); + gl.tex_sub_image_2d_with_i32_and_i32_and_u32_and_type_and_opt_u8_array( + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + Some(&[1]), + ); + gl.compressed_tex_image_2d_with_u8_array(0, 0, 0, 0, 0, 0, &[1]); +} + +// GECKODRIVER=geckodriver cargo test -p web-sys --target wasm32-unknown-unknown --all-features test_webgl2_rendering_context_immutable_slices +#[wasm_bindgen_test] +fn test_webgl2_rendering_context_immutable_slices() { + let gl = new_webgl2_rendering_context(); + + gl.tex_image_3d_with_opt_u8_array(0, 0, 0, 0, 0, 0, 0, 0, 0, Some(&[1])); + gl.tex_sub_image_3d_with_opt_u8_array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, Some(&[1])); + gl.compressed_tex_image_3d_with_u8_array(0, 0, 0, 0, 0, 0, 0, &[1]); +} + +// GECKODRIVER=geckodriver cargo test -p web-sys --target wasm32-unknown-unknown --all-features test_websocket_immutable_slices +#[wasm_bindgen_test] +fn test_websocket_immutable_slices() { + let ws = new_websocket(); + ws.send_with_u8_array(&[0]); +} -// gl.tex_image_3d_with_opt_u8_array(0, 0, 0, 0, 0, 0, 0, 0, 0, Some(&[1])); -// gl.tex_sub_image_3d_with_opt_u8_array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, Some(&[1])); -// gl.compressed_tex_image_3d_with_u8_array(0, 0, 0, 0, 0, 0, 0, &[1]); -//} -// // TODO: //#[wasm_bindgen_test] //fn test_another_types_immutable_slices_here() { diff --git a/crates/webidl/src/lib.rs b/crates/webidl/src/lib.rs index e6b7f7778de..d145dcc5c5b 100644 --- a/crates/webidl/src/lib.rs +++ b/crates/webidl/src/lib.rs @@ -245,7 +245,7 @@ fn immutable_slice_whitelist() -> BTreeSet<&'static str> { "clearBufferiv", "clearBufferuiv", // WebSocket - "send_with_u8_array", + "send", // TODO: Add another type's functions here. Leave a comment header with the type name ]) }