Skip to content

Commit

Permalink
Fix send slice
Browse files Browse the repository at this point in the history
  • Loading branch information
chinedufn committed Feb 28, 2020
1 parent 7810b73 commit 001f4b0
Show file tree
Hide file tree
Showing 3 changed files with 73 additions and 55 deletions.
5 changes: 5 additions & 0 deletions crates/web-sys/tests/wasm/element.js
Original file line number Diff line number Diff line change
Expand Up @@ -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("<root><value>tomato</value></root>", "application/xml");
let xpathResult = xmlDoc.evaluate("/root//value", xmlDoc, null, XPathResult.ANY_TYPE, null);
Expand Down
121 changes: 67 additions & 54 deletions crates/web-sys/tests/wasm/whitelisted_immutable_slices.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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
}
Expand All @@ -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() {
Expand Down
2 changes: 1 addition & 1 deletion crates/webidl/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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
])
}
Expand Down

0 comments on commit 001f4b0

Please sign in to comment.