fork of https://github.com/rustwasm/wasm-pack for the needs of NextGraph.org
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
400 lines
10 KiB
400 lines
10 KiB
use crate::utils::fixture;
|
|
use assert_cmd::prelude::*;
|
|
use predicates::prelude::*;
|
|
use std::env;
|
|
|
|
#[test]
|
|
fn it_can_run_node_tests() {
|
|
let fixture = fixture::wbg_test_node();
|
|
fixture.install_local_wasm_bindgen();
|
|
let _lock = fixture.lock();
|
|
fixture
|
|
.wasm_pack()
|
|
.arg("test")
|
|
.arg("--node")
|
|
.assert()
|
|
.success();
|
|
}
|
|
|
|
#[test]
|
|
fn it_can_run_tests_with_different_wbg_test_and_wbg_versions() {
|
|
let fixture = fixture::wbg_test_diff_versions();
|
|
fixture.install_local_wasm_bindgen();
|
|
let _lock = fixture.lock();
|
|
fixture
|
|
.wasm_pack()
|
|
.arg("test")
|
|
.arg("--node")
|
|
.assert()
|
|
.success();
|
|
}
|
|
|
|
#[test]
|
|
#[cfg(any(
|
|
all(target_os = "linux", target_arch = "x86_64"),
|
|
all(target_os = "macos", target_arch = "x86_64"),
|
|
all(target_os = "macos", target_arch = "aarch64"),
|
|
all(target_os = "windows", target_arch = "x86"),
|
|
all(target_os = "windows", target_arch = "x86_64")
|
|
))]
|
|
fn it_can_run_browser_tests() {
|
|
let fixture = fixture::wbg_test_browser();
|
|
fixture.install_local_wasm_bindgen();
|
|
|
|
let firefox = cfg!(any(
|
|
all(target_os = "linux", target_arch = "x86"),
|
|
all(target_os = "linux", target_arch = "x86_64"),
|
|
all(target_os = "macos", target_arch = "x86_64"),
|
|
all(target_os = "macos", target_arch = "aarch64"),
|
|
all(target_os = "windows", target_arch = "x86"),
|
|
all(target_os = "windows", target_arch = "x86_64")
|
|
));
|
|
if firefox {
|
|
fixture.install_local_geckodriver();
|
|
}
|
|
|
|
let chrome = cfg!(any(
|
|
all(target_os = "linux", target_arch = "x86_64"),
|
|
all(target_os = "macos", target_arch = "x86_64"),
|
|
all(target_os = "windows", target_arch = "x86")
|
|
));
|
|
if chrome {
|
|
fixture.install_local_chromedriver();
|
|
}
|
|
|
|
let safari = cfg!(target_os = "macos");
|
|
|
|
if !firefox && !chrome && !safari {
|
|
return;
|
|
}
|
|
|
|
let mut cmd = fixture.wasm_pack();
|
|
cmd.arg("test").arg("--headless");
|
|
|
|
if firefox {
|
|
cmd.arg("--firefox");
|
|
}
|
|
if chrome {
|
|
cmd.arg("--chrome");
|
|
}
|
|
if safari {
|
|
cmd.arg("--safari");
|
|
}
|
|
|
|
let _lock = fixture.lock();
|
|
cmd.assert().success();
|
|
}
|
|
|
|
#[test]
|
|
fn it_can_run_failing_tests() {
|
|
let fixture = fixture::wbg_test_fail();
|
|
fixture.install_local_wasm_bindgen();
|
|
let _lock = fixture.lock();
|
|
fixture
|
|
.wasm_pack()
|
|
.arg("test")
|
|
.arg("--node")
|
|
.assert()
|
|
.failure()
|
|
.stderr(predicates::str::contains(
|
|
"Running Wasm tests with wasm-bindgen-test failed",
|
|
));
|
|
}
|
|
|
|
#[test]
|
|
#[cfg(any(
|
|
all(target_os = "linux", target_arch = "x86"),
|
|
all(target_os = "linux", target_arch = "x86_64"),
|
|
all(target_os = "macos", target_arch = "x86_64"),
|
|
all(target_os = "macos", target_arch = "aarch64"),
|
|
all(target_os = "windows", target_arch = "x86"),
|
|
all(target_os = "windows", target_arch = "x86_64")
|
|
))]
|
|
fn it_can_find_a_webdriver_on_path() {
|
|
let fixture = fixture::wbg_test_browser();
|
|
let local_geckodriver = fixture.install_local_geckodriver();
|
|
let local_wasm_bindgen = fixture.install_local_wasm_bindgen();
|
|
|
|
let mut paths: Vec<_> = env::split_paths(&env::var("PATH").unwrap()).collect();
|
|
paths.insert(0, local_geckodriver.parent().unwrap().to_path_buf());
|
|
paths.insert(0, local_wasm_bindgen.parent().unwrap().to_path_buf());
|
|
let path = env::join_paths(paths).unwrap();
|
|
|
|
let _lock = fixture.lock();
|
|
fixture
|
|
.wasm_pack()
|
|
.env("PATH", &path)
|
|
.arg("test")
|
|
.arg("--firefox")
|
|
.arg("--headless")
|
|
.arg("--mode")
|
|
.arg("no-install")
|
|
.assert()
|
|
.success();
|
|
}
|
|
|
|
#[test]
|
|
fn it_requires_node_or_a_browser() {
|
|
let fixture = fixture::wbg_test_node();
|
|
fixture.install_local_wasm_bindgen();
|
|
let _lock = fixture.lock();
|
|
fixture
|
|
.wasm_pack()
|
|
.arg("test")
|
|
.assert()
|
|
.failure()
|
|
.stderr(predicates::str::contains("Must specify at least one of"));
|
|
}
|
|
|
|
#[test]
|
|
fn the_headless_flag_requires_a_browser() {
|
|
let fixture = fixture::wbg_test_node();
|
|
fixture.install_local_wasm_bindgen();
|
|
let _lock = fixture.lock();
|
|
fixture
|
|
.wasm_pack()
|
|
.arg("test")
|
|
.arg("--node")
|
|
.arg("--headless")
|
|
.assert()
|
|
.failure()
|
|
.stderr(predicates::str::contains("only applies to browser tests"));
|
|
}
|
|
|
|
#[test]
|
|
fn complains_about_missing_wasm_bindgen_test_dependency() {
|
|
let fixture = fixture::Fixture::new();
|
|
fixture
|
|
.readme()
|
|
.file(
|
|
"Cargo.toml",
|
|
r#"
|
|
[package]
|
|
authors = ["The wasm-pack developers"]
|
|
description = "so awesome rust+wasm package"
|
|
license = "WTFPL"
|
|
name = "missing-wbg-test"
|
|
repository = "https://github.com/rustwasm/wasm-pack.git"
|
|
version = "0.1.0"
|
|
|
|
[lib]
|
|
crate-type = ["cdylib"]
|
|
|
|
[dependencies]
|
|
wasm-bindgen = "0.2"
|
|
|
|
[dev-dependencies]
|
|
# no wasm-bindgen-test dep here!
|
|
"#,
|
|
)
|
|
.hello_world_src_lib()
|
|
.install_local_wasm_bindgen();
|
|
let _lock = fixture.lock();
|
|
fixture
|
|
.wasm_pack()
|
|
.arg("test")
|
|
.arg("--node")
|
|
.assert()
|
|
.failure()
|
|
.stderr(predicates::str::contains(
|
|
"Ensure that you have \"wasm-bindgen-test\" as a dependency in your Cargo.toml file",
|
|
))
|
|
.stderr(predicates::str::contains("[dev-dependencies]"))
|
|
.stderr(predicates::str::contains("wasm-bindgen-test = \"0.2\""));
|
|
}
|
|
|
|
#[test]
|
|
fn renamed_crate_name_works() {
|
|
let fixture = fixture::Fixture::new();
|
|
fixture
|
|
.readme()
|
|
.file(
|
|
"Cargo.toml",
|
|
r#"
|
|
[package]
|
|
name = "foo"
|
|
version = "0.1.0"
|
|
authors = []
|
|
|
|
[lib]
|
|
crate-type = ["cdylib"]
|
|
name = 'bar'
|
|
|
|
[dependencies]
|
|
wasm-bindgen = "0.2"
|
|
|
|
[dev-dependencies]
|
|
wasm-bindgen-test = "0.2"
|
|
"#,
|
|
)
|
|
.file(
|
|
"src/lib.rs",
|
|
r#"
|
|
extern crate wasm_bindgen;
|
|
use wasm_bindgen::prelude::*;
|
|
|
|
#[wasm_bindgen]
|
|
pub fn one() -> u32 { 1 }
|
|
"#,
|
|
)
|
|
.install_local_wasm_bindgen();
|
|
let _lock = fixture.lock();
|
|
fixture
|
|
.wasm_pack()
|
|
.arg("test")
|
|
.arg("--node")
|
|
.assert()
|
|
.success();
|
|
}
|
|
|
|
#[test]
|
|
fn cdylib_not_required() {
|
|
let fixture = fixture::Fixture::new();
|
|
fixture
|
|
.readme()
|
|
.file(
|
|
"Cargo.toml",
|
|
r#"
|
|
[package]
|
|
name = "foo"
|
|
version = "0.1.0"
|
|
authors = []
|
|
|
|
[dependencies]
|
|
wasm-bindgen = "0.2"
|
|
|
|
[dev-dependencies]
|
|
wasm-bindgen-test = "0.2"
|
|
"#,
|
|
)
|
|
.file(
|
|
"src/lib.rs",
|
|
r#"
|
|
pub fn foo() -> u32 { 1 }
|
|
"#,
|
|
)
|
|
.file(
|
|
"tests/foo.rs",
|
|
r#"
|
|
extern crate wasm_bindgen_test;
|
|
use wasm_bindgen_test::*;
|
|
|
|
#[wasm_bindgen_test]
|
|
fn smoke() {
|
|
foo::foo();
|
|
}
|
|
"#,
|
|
)
|
|
.install_local_wasm_bindgen();
|
|
let _lock = fixture.lock();
|
|
fixture
|
|
.wasm_pack()
|
|
.arg("test")
|
|
.arg("--node")
|
|
.assert()
|
|
.success();
|
|
}
|
|
|
|
#[test]
|
|
fn test_output_is_printed_once_in_both_stdout_and_failures() {
|
|
let fixture = fixture::Fixture::new();
|
|
fixture
|
|
.readme()
|
|
.cargo_toml("test-output-printed-once")
|
|
.hello_world_src_lib()
|
|
.file(
|
|
"tests/node.rs",
|
|
r#"
|
|
extern crate wasm_bindgen;
|
|
extern crate wasm_bindgen_test;
|
|
use wasm_bindgen::prelude::*;
|
|
use wasm_bindgen_test::*;
|
|
|
|
#[wasm_bindgen]
|
|
extern {
|
|
#[wasm_bindgen(js_namespace = console)]
|
|
fn log(s: &str);
|
|
}
|
|
|
|
#[wasm_bindgen_test]
|
|
fn yabba() {
|
|
log("YABBA DABBA DOO");
|
|
assert_eq!(1, 2);
|
|
}
|
|
"#,
|
|
)
|
|
.install_local_wasm_bindgen();
|
|
let _lock = fixture.lock();
|
|
|
|
// there will be only one log in stdout, and only one log in failures
|
|
let log_cnt = 1;
|
|
fixture
|
|
.wasm_pack()
|
|
.arg("test")
|
|
.arg("--node")
|
|
.assert()
|
|
.failure()
|
|
.stdout(predicate::function(|out: &str| {
|
|
// but the out string will capture both stdout and failures,
|
|
// so we will get a log that count twice
|
|
out.matches("YABBA DABBA DOO").count() == log_cnt * 2
|
|
}));
|
|
}
|
|
|
|
#[test]
|
|
fn extra_options_is_passed_to_cargo_when_building_tests() {
|
|
let fixture = fixture::Fixture::new();
|
|
fixture
|
|
.readme()
|
|
.file(
|
|
"Cargo.toml",
|
|
r#"
|
|
[package]
|
|
name = "foo"
|
|
version = "0.1.0"
|
|
authors = []
|
|
|
|
[dev-dependencies]
|
|
wasm-bindgen-test = "0.2"
|
|
|
|
[features]
|
|
default = ["native"]
|
|
native = []
|
|
"#,
|
|
)
|
|
.file(
|
|
"src/lib.rs",
|
|
r#"
|
|
pub fn foo() -> u32 {
|
|
#[cfg(feature = "native")]
|
|
compile_error!("Test should pass through `--no-default-features` for this to pass.");
|
|
|
|
1
|
|
}
|
|
"#,
|
|
)
|
|
.file(
|
|
"tests/foo.rs",
|
|
r#"
|
|
extern crate wasm_bindgen_test;
|
|
use wasm_bindgen_test::*;
|
|
|
|
#[wasm_bindgen_test]
|
|
fn smoke() {
|
|
foo::foo();
|
|
}
|
|
|
|
#[wasm_bindgen_test]
|
|
fn fire() {
|
|
panic!("This should be filtered from test execution.");
|
|
}
|
|
"#,
|
|
)
|
|
.install_local_wasm_bindgen();
|
|
let _lock = fixture.lock();
|
|
fixture
|
|
.wasm_pack()
|
|
.args(&["test", "--node", "--no-default-features", "--", "smoke"])
|
|
.assert()
|
|
.success();
|
|
}
|
|
|