Skip to content

Commit

Permalink
attempting fix for test temp directory conflicts
Browse files Browse the repository at this point in the history
  • Loading branch information
calvinrp committed May 6, 2024
1 parent 1b36a7d commit 58c9f15
Showing 1 changed file with 60 additions and 40 deletions.
100 changes: 60 additions & 40 deletions tests/build.rs
Original file line number Diff line number Diff line change
Expand Up @@ -10,15 +10,16 @@ mod support;

#[test]
fn it_builds_debug() -> Result<()> {
let project = Project::new("foo")?;
let name = "foo_debug";
let project = Project::new(name)?;

project
.cargo_component("build")
.assert()
.stderr(contains("Finished dev [unoptimized + debuginfo] target(s)"))
.success();

validate_component(&project.debug_wasm("foo"))?;
validate_component(&project.debug_wasm(name))?;

// A lock file should only be generated for projects with
// registry dependencies
Expand All @@ -29,30 +30,32 @@ fn it_builds_debug() -> Result<()> {

#[test]
fn it_builds_a_bin_project_with_snake_case() -> Result<()> {
let project = Project::new_bin("hello_world")?;
let name = "hello_world";
let project = Project::new_bin(name)?;

project
.cargo_component("build --release")
.assert()
.stderr(contains("Finished release [optimized] target(s)"))
.success();

validate_component(&project.release_wasm("hello_world"))?;
validate_component(&project.release_wasm(name))?;

Ok(())
}

#[test]
fn it_builds_a_bin_project() -> Result<()> {
let project = Project::new_bin("foo")?;
let name = "foo_bin_project";
let project = Project::new_bin(name)?;

project
.cargo_component("build --release")
.assert()
.stderr(contains("Finished release [optimized] target(s)"))
.success();

validate_component(&project.release_wasm("foo"))?;
validate_component(&project.release_wasm(name))?;

Ok(())
}
Expand Down Expand Up @@ -112,30 +115,32 @@ edition = "2021"

#[test]
fn it_supports_wit_keywords() -> Result<()> {
let project = Project::new("interface")?;
let name = "interface";
let project = Project::new(name)?;

project
.cargo_component("build --release")
.assert()
.stderr(contains("Finished release [optimized] target(s)"))
.success();

validate_component(&project.release_wasm("interface"))?;
validate_component(&project.release_wasm(name))?;

Ok(())
}

#[test]
fn it_adds_a_producers_field() -> Result<()> {
let project = Project::new("foo")?;
let name = "foo_producer_section";
let project = Project::new(name)?;

project
.cargo_component("build --release")
.assert()
.stderr(contains("Finished release [optimized] target(s)"))
.success();

let path = project.release_wasm("foo");
let path = project.release_wasm(name);

validate_component(&path)?;

Expand All @@ -157,7 +162,8 @@ fn it_adds_a_producers_field() -> Result<()> {

#[test]
fn it_builds_wasm32_unknown_unknown() -> Result<()> {
let project = Project::new("foo")?;
let name = "foo_wasm32_unknown_unknown";
let project = Project::new(name)?;

project
.cargo_component("build --target wasm32-unknown-unknown")
Expand All @@ -170,15 +176,16 @@ fn it_builds_wasm32_unknown_unknown() -> Result<()> {
.build_dir()
.join("wasm32-unknown-unknown")
.join("debug")
.join("foo.wasm"),
.join(format!("{name}.wasm")),
)?;

Ok(())
}

#[test]
fn it_regenerates_target_if_wit_changed() -> Result<()> {
let project = Project::new("foo")?;
let name = "foo_if_wit_changed";
let project = Project::new(name)?;
project.update_manifest(|mut doc| {
doc["package"]["metadata"]["component"]["target"]["world"] = value("example");
Ok(doc)
Expand All @@ -190,7 +197,7 @@ fn it_regenerates_target_if_wit_changed() -> Result<()> {
.stderr(contains("Finished dev [unoptimized + debuginfo] target(s)"))
.success();

validate_component(&project.debug_wasm("foo"))?;
validate_component(&project.debug_wasm(name))?;

project
.cargo_component("build")
Expand All @@ -211,7 +218,8 @@ fn it_regenerates_target_if_wit_changed() -> Result<()> {

#[test]
fn it_builds_with_local_wit_deps() -> Result<()> {
let project = Project::new("foo")?;
let name = "foo_local_wit_deps";
let project = Project::new(name)?;
project.update_manifest(|mut doc| {
let mut dependencies = Table::new();
dependencies["foo:bar"]["path"] = value("wit/deps/foo-bar");
Expand Down Expand Up @@ -296,14 +304,15 @@ bindings::export!(Component with_types_in bindings);
.stderr(contains("Finished dev [unoptimized + debuginfo] target(s)"))
.success();

validate_component(&project.debug_wasm("foo"))?;
validate_component(&project.debug_wasm(name))?;

Ok(())
}

#[test]
fn empty_world_with_dep_valid() -> Result<()> {
let project = Project::new("dep")?;
let name = "dep";
let project = Project::new(name)?;

fs::write(
project.root().join("wit/world.wit"),
Expand Down Expand Up @@ -340,7 +349,7 @@ fn empty_world_with_dep_valid() -> Result<()> {

project.cargo_component("build").assert().success();

let dep = project.debug_wasm("dep");
let dep = project.debug_wasm(name);
validate_component(&dep)?;

let project = Project::with_dir(project.dir().clone(), "main", "")?;
Expand Down Expand Up @@ -379,7 +388,8 @@ fn empty_world_with_dep_valid() -> Result<()> {

#[test]
fn it_builds_with_resources() -> Result<()> {
let project = Project::new("foo")?;
let name = "foo_resources";
let project = Project::new(name)?;

fs::write(
project.root().join("wit/world.wit"),
Expand Down Expand Up @@ -439,15 +449,16 @@ fn it_builds_with_resources() -> Result<()> {

project.cargo_component("build").assert().success();

let dep = project.debug_wasm("foo");
let dep = project.debug_wasm(name);
validate_component(&dep)?;

Ok(())
}

#[test]
fn it_builds_resources_with_specified_ownership_model() -> Result<()> {
let project = Project::new("foo")?;
let name = "foo_resources_with_specified_ownership_model";
let project = Project::new(name)?;
project.update_manifest(|mut doc| {
doc["package"]["metadata"]["component"]["bindings"]["ownership"] =
value("borrowing-duplicate-if-necessary");
Expand Down Expand Up @@ -512,7 +523,7 @@ fn it_builds_resources_with_specified_ownership_model() -> Result<()> {

project.cargo_component("build").assert().success();

let dep = project.debug_wasm("foo");
let dep = project.debug_wasm(name);
validate_component(&dep)?;

Ok(())
Expand Down Expand Up @@ -638,7 +649,8 @@ bindings::export!(Component with_types_in bindings);

#[test]
fn it_builds_with_adapter() -> Result<()> {
let project = Project::new("foo")?;
let name = "foo_with_adapter";
let project = Project::new(name)?;
project.update_manifest(|mut doc| {
doc["package"]["metadata"]["component"]["adapter"] = value("not-a-valid-path");
Ok(doc)
Expand All @@ -650,7 +662,7 @@ fn it_builds_with_adapter() -> Result<()> {
.stderr(contains("error: failed to read module adapter"))
.failure();

let project = Project::new("foo")?;
let project = Project::new(name)?;
project.update_manifest(|mut doc| {
doc["package"]["metadata"]["component"]["adapter"] =
value(adapter_path().to_str().unwrap());
Expand All @@ -663,20 +675,22 @@ fn it_builds_with_adapter() -> Result<()> {
.stderr(contains("Finished dev [unoptimized + debuginfo] target(s)"))
.success();

validate_component(&project.debug_wasm("foo"))?;
validate_component(&project.debug_wasm(name))?;

Ok(())
}

#[test]
fn it_errors_if_adapter_is_not_wasm() -> Result<()> {
let project = Project::new("foo")?;
let name = "foo_errors_on_adapter";
let file_name = format!("{name}.wasm");
let project = Project::new(name)?;
project.update_manifest(|mut doc| {
doc["package"]["metadata"]["component"]["adapter"] = value("foo.wasm");
doc["package"]["metadata"]["component"]["adapter"] = value(&file_name);
Ok(doc)
})?;

fs::write(project.root().join("foo.wasm"), "not wasm")?;
fs::write(project.root().join(file_name), "not wasm")?;

project
.cargo_component("build")
Expand All @@ -689,7 +703,8 @@ fn it_errors_if_adapter_is_not_wasm() -> Result<()> {

#[test]
fn it_adds_additional_derives() -> Result<()> {
let project = Project::new("foo")?;
let name = "foo_add_derives";
let project = Project::new(name)?;
project.update_manifest(|mut doc| {
doc["package"]["metadata"]["component"]["bindings"]["derives"] =
value(Array::from_iter(["serde::Serialize", "serde::Deserialize"]));
Expand Down Expand Up @@ -754,14 +769,15 @@ bindings::export!(Component with_types_in bindings);
.stderr(contains("Finished dev [unoptimized + debuginfo] target(s)"))
.success();

validate_component(&project.debug_wasm("foo"))?;
validate_component(&project.debug_wasm(name))?;

Ok(())
}

#[test]
fn it_builds_with_versioned_wit() -> Result<()> {
let project = Project::new("foo")?;
let name = "foo_versioned_wit";
let project = Project::new(name)?;

fs::write(
project.root().join("wit/world.wit"),
Expand Down Expand Up @@ -796,15 +812,16 @@ fn it_builds_with_versioned_wit() -> Result<()> {

project.cargo_component("build").assert().success();

let dep = project.debug_wasm("foo");
let dep = project.debug_wasm(name);
validate_component(&dep)?;

Ok(())
}

#[test]
fn it_warns_on_proxy_setting_for_command() -> Result<()> {
let project = Project::new_bin("foo")?;
let name = "foo_warn_proxy";
let project = Project::new_bin(name)?;
project.update_manifest(|mut doc| {
doc["package"]["metadata"]["component"]["proxy"] = value(true);
Ok(doc)
Expand All @@ -818,14 +835,15 @@ fn it_warns_on_proxy_setting_for_command() -> Result<()> {
))
.success();

validate_component(&project.debug_wasm("foo"))?;
validate_component(&project.debug_wasm(name))?;

Ok(())
}

#[test]
fn it_warns_with_proxy_and_adapter_settings() -> Result<()> {
let project = Project::new("foo")?;
let name = "foo_warn_proxy_and_adapter";
let project = Project::new(name)?;
project.update_manifest(|mut doc| {
doc["package"]["metadata"]["component"]["proxy"] = value(true);
doc["package"]["metadata"]["component"]["adapter"] =
Expand All @@ -839,25 +857,26 @@ fn it_warns_with_proxy_and_adapter_settings() -> Result<()> {
.stderr(contains("warning: ignoring `proxy` setting due to `adapter` setting being present in `Cargo.toml`"))
.success();

validate_component(&project.debug_wasm("foo"))?;
validate_component(&project.debug_wasm(name))?;

Ok(())
}

#[test]
fn it_builds_with_proxy_adapter() -> Result<()> {
let name = "foo_proxy";
let dir = Rc::new(TempDir::new()?);
let project = Project::with_dir(dir.clone(), "foo", "--proxy")?;
let project = Project::with_dir(dir.clone(), name, "--proxy")?;

project
.cargo_component("build")
.assert()
.stderr(contains("Finished dev [unoptimized + debuginfo] target(s)"))
.success();

validate_component(&project.debug_wasm("foo"))?;
validate_component(&project.debug_wasm(name))?;

let text = wasmprinter::print_file(project.debug_wasm("foo"))?;
let text = wasmprinter::print_file(project.debug_wasm(name))?;
assert!(
!text.contains("wasi:cli/environment"),
"proxy wasm should have no reference to `wasi:cli/environment`"
Expand All @@ -868,9 +887,10 @@ fn it_builds_with_proxy_adapter() -> Result<()> {

#[test]
fn it_does_not_generate_bindings_for_cargo_projects() -> Result<()> {
let name = "foo_not_generate";
let dir = TempDir::new()?;

for (name, args) in [("foo", &["new", "--lib"] as &[_]), ("bar", &["new"])] {
for (name, args) in [(name, &["new", "--lib"] as &[_]), ("bar", &["new"])] {
let mut cmd = Command::new("cargo");
cmd.current_dir(dir.path());
cmd.args(args);
Expand Down

0 comments on commit 58c9f15

Please sign in to comment.