//! 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 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::{JsCast, JsValue}; use web_sys::{WebGl2RenderingContext, WebGlRenderingContext, WebSocket}; // Ensure that our whitelisted WebGlRenderingContext methods compile with immutable slices. fn test_webgl_rendering_context_immutable_slices() { let gl = JsValue::null().unchecked_into::(); 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]); } // Ensure that our whitelisted WebGl2RenderingContext methods compile with immutable slices. fn test_webgl2_rendering_context_immutable_slices() { let gl = JsValue::null().unchecked_into::(); 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]); } // Ensure that our whitelisted WebSocket methods compile with immutable slices. fn test_websocket_immutable_slices() { let ws = JsValue::null().unchecked_into::(); ws.send_with_u8_array(&[0]); } // TODO: //#[wasm_bindgen_test] //fn test_another_types_immutable_slices_here() { //}