diff --git a/.travis.yml b/.travis.yml index 18084df313e..2360b235c53 100644 --- a/.travis.yml +++ b/.travis.yml @@ -142,6 +142,8 @@ matrix: - ./utils/ci/install_cargo_web.sh - cargo web prepare-emscripten - cargo web -V + - cargo list | grep install-update || cargo install -f cargo-update + - cargo install-update -i cargo-update wasm-bindgen-cli wasm-pack addons: chrome: stable script: @@ -154,6 +156,10 @@ matrix: #- cargo build --target wasm32-unknown-unknown # without any features - cargo build --target wasm32-unknown-unknown --features=wasm-bindgen - cargo web test --target wasm32-unknown-unknown --features=stdweb + - cargo build --manifest-path tests/wasm_bindgen/Cargo.toml --target wasm32-unknown-unknown + - wasm-bindgen --nodejs target/wasm32-unknown-unknown/debug/rand_wasm_bindgen_test.wasm --out-dir tests/wasm_bindgen/js + - node tests/wasm_bindgen/js/index.js + - wasm-pack test --node tests/wasm_bindgen - rust: nightly env: DESCRIPTION="cross-platform builder (doesn't run tests)" diff --git a/Cargo.toml b/Cargo.toml index c9100d8769a..ba750895295 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -42,6 +42,7 @@ members = [ "rand_pcg", "rand_xorshift", "rand_xoshiro", + "tests/wasm_bindgen", ] [dependencies] diff --git a/tests/wasm_bindgen/Cargo.toml b/tests/wasm_bindgen/Cargo.toml new file mode 100644 index 00000000000..b96f09bb6f2 --- /dev/null +++ b/tests/wasm_bindgen/Cargo.toml @@ -0,0 +1,15 @@ +[package] +name = "rand_wasm_bindgen_test" +description = "Minimal crate to test that rand can be build for web assembly target" +version = "0.1.0" +authors = ["The Rand Project Developers"] +publish = false +license = "MIT/Apache-2.0" + +[lib] +crate-type = ["cdylib"] + +[dependencies] +rand = { path = "../..", features = ["wasm-bindgen"] } +wasm-bindgen = "0.2" +wasm-bindgen-test = "0.2" diff --git a/tests/wasm_bindgen/js/index.js b/tests/wasm_bindgen/js/index.js new file mode 100644 index 00000000000..a02fb59b165 --- /dev/null +++ b/tests/wasm_bindgen/js/index.js @@ -0,0 +1,7 @@ +'use strict'; + +const rand_wasm_bindgen_test = require('./rand_wasm_bindgen_test'); + +console.log(rand_wasm_bindgen_test.generate_from_entropy()); +console.log(rand_wasm_bindgen_test.generate_from_os_rand()); +console.log(rand_wasm_bindgen_test.generate_from_seed()); diff --git a/tests/wasm_bindgen/src/lib.rs b/tests/wasm_bindgen/src/lib.rs new file mode 100644 index 00000000000..32b907dc7ed --- /dev/null +++ b/tests/wasm_bindgen/src/lib.rs @@ -0,0 +1,42 @@ +extern crate rand; +extern crate wasm_bindgen; +extern crate wasm_bindgen_test; + +use rand::rngs::{OsRng, StdRng}; +use rand::FromEntropy; +use rand::{Rng, SeedableRng}; +use wasm_bindgen::prelude::*; + +#[wasm_bindgen] +pub fn generate_from_seed(seed: u32) -> i32 { + StdRng::seed_from_u64(seed as u64).gen() +} + +#[wasm_bindgen] +pub fn generate_from_os_rand() -> i32 { + OsRng::new().unwrap().gen() +} + +#[wasm_bindgen] +pub fn generate_from_entropy() -> i32 { + StdRng::from_entropy().gen() +} + +pub mod tests { + use wasm_bindgen_test::*; + + #[wasm_bindgen_test] + fn generate_from_seed() { + let _ = super::generate_from_seed(42); + } + + #[wasm_bindgen_test] + fn generate_from_os_rand() { + let _ = super::generate_from_os_rand(); + } + + #[wasm_bindgen_test] + fn generate_from_entropy() { + let _ = super::generate_from_entropy(); + } +}