use anyhow::Result;
use assert_cmd::cargo::cargo_bin_cmd;
use predicates::prelude::*;
use std::fs;
use std::path::Path;
#[test]
fn diff_empty_workspace() -> Result<()> {
let dir = Path::new(env!("CARGO_MANIFEST_DIR")).join("test-resources/empty-workspace");
let mut cmd = cargo_bin_cmd!();
cmd.current_dir(&dir)
.arg("wsdeps")
.arg("diff")
.assert()
.failure();
Ok(())
}
#[test]
fn diff_multi_member() -> Result<()> {
let dir = Path::new(env!("CARGO_MANIFEST_DIR")).join("test-resources/multi-member");
let expected = fs::read_to_string(dir.join("diff.patch"))?;
let mut cmd = cargo_bin_cmd!();
cmd.current_dir(&dir)
.arg("wsdeps")
.arg("diff")
.assert()
.success()
.stdout(predicate::eq(expected));
Ok(())
}
#[test]
fn diff_single_member() -> Result<()> {
let dir = Path::new(env!("CARGO_MANIFEST_DIR")).join("test-resources/single-member");
let mut cmd = cargo_bin_cmd!();
cmd.current_dir(&dir)
.arg("wsdeps")
.arg("diff")
.assert()
.success()
.stdout(predicate::eq(""));
Ok(())
}
#[test]
fn diff_standalone() -> Result<()> {
let dir = Path::new(env!("CARGO_MANIFEST_DIR")).join("test-resources/standalone");
let mut cmd = cargo_bin_cmd!();
cmd.current_dir(&dir)
.arg("wsdeps")
.arg("diff")
.assert()
.success()
.stdout(predicate::eq(""));
Ok(())
}
#[test]
fn diff_single_ref() -> Result<()> {
let dir = Path::new(env!("CARGO_MANIFEST_DIR")).join("test-resources/single-ref");
let mut cmd = cargo_bin_cmd!();
cmd.current_dir(&dir)
.arg("wsdeps")
.arg("diff")
.assert()
.success()
.stdout(predicate::eq(""));
Ok(())
}
#[test]
fn diff_mixed_deps() -> Result<()> {
let dir = Path::new(env!("CARGO_MANIFEST_DIR")).join("test-resources/mixed-deps");
let expected = fs::read_to_string(dir.join("diff.patch"))?;
let mut cmd = cargo_bin_cmd!();
cmd.current_dir(&dir)
.arg("wsdeps")
.arg("diff")
.arg("--dotted")
.assert()
.success()
.stdout(predicate::eq(expected));
Ok(())
}
#[test]
fn diff_no_shared_deps() -> Result<()> {
let dir = Path::new(env!("CARGO_MANIFEST_DIR")).join("test-resources/no-shared-deps");
let expected = fs::read_to_string(dir.join("diff.patch"))?;
let mut cmd = cargo_bin_cmd!();
cmd.current_dir(&dir)
.arg("wsdeps")
.arg("diff")
.arg("--aggressive")
.assert()
.success()
.stdout(predicate::eq(expected));
Ok(())
}
#[test]
fn diff_dev_build_deps() -> Result<()> {
let dir = Path::new(env!("CARGO_MANIFEST_DIR")).join("test-resources/dev-build-deps");
let expected = fs::read_to_string(dir.join("diff.patch"))?;
let mut cmd = cargo_bin_cmd!();
cmd.current_dir(&dir)
.arg("wsdeps")
.arg("diff")
.assert()
.success()
.stdout(predicate::eq(expected));
Ok(())
}
#[test]
fn diff_feature_merge() -> Result<()> {
let dir = Path::new(env!("CARGO_MANIFEST_DIR")).join("test-resources/feature-merge");
let expected = fs::read_to_string(dir.join("diff.patch"))?;
let mut cmd = cargo_bin_cmd!();
cmd.current_dir(&dir)
.arg("wsdeps")
.arg("diff")
.assert()
.success()
.stdout(predicate::eq(expected));
Ok(())
}
#[test]
fn diff_default_features() -> Result<()> {
let dir = Path::new(env!("CARGO_MANIFEST_DIR")).join("test-resources/default-features");
let expected = fs::read_to_string(dir.join("diff.patch"))?;
let mut cmd = cargo_bin_cmd!();
cmd.current_dir(&dir)
.arg("wsdeps")
.arg("diff")
.assert()
.success()
.stdout(predicate::eq(expected));
Ok(())
}
#[test]
fn diff_aggressive_blocked() -> Result<()> {
let dir = Path::new(env!("CARGO_MANIFEST_DIR")).join("test-resources/aggressive-blocked");
let expected = fs::read_to_string(dir.join("diff.patch"))?;
let mut cmd = cargo_bin_cmd!();
cmd.current_dir(&dir)
.arg("wsdeps")
.arg("diff")
.arg("--aggressive")
.assert()
.success()
.stdout(predicate::eq(expected));
Ok(())
}
#[test]
fn diff_stale_only() -> Result<()> {
let dir = Path::new(env!("CARGO_MANIFEST_DIR")).join("test-resources/stale-only");
let expected = fs::read_to_string(dir.join("diff.patch"))?;
let mut cmd = cargo_bin_cmd!();
cmd.current_dir(&dir)
.arg("wsdeps")
.arg("diff")
.assert()
.success()
.stdout(predicate::eq(expected));
Ok(())
}
#[test]
fn diff_path_deps() -> Result<()> {
let dir = Path::new(env!("CARGO_MANIFEST_DIR")).join("test-resources/path-deps");
let mut cmd = cargo_bin_cmd!();
cmd.current_dir(&dir)
.arg("wsdeps")
.arg("diff")
.assert()
.success()
.stdout(predicate::eq(""));
Ok(())
}
#[test]
fn diff_renamed_deps() -> Result<()> {
let dir = Path::new(env!("CARGO_MANIFEST_DIR")).join("test-resources/renamed-deps");
let expected = fs::read_to_string(dir.join("diff.patch"))?;
let mut cmd = cargo_bin_cmd!();
cmd.current_dir(&dir)
.arg("wsdeps")
.arg("diff")
.assert()
.success()
.stdout(predicate::eq(expected));
Ok(())
}
#[test]
fn diff_conflicting_versions() -> Result<()> {
let dir = Path::new(env!("CARGO_MANIFEST_DIR")).join("test-resources/conflicting-versions");
let expected = fs::read_to_string(dir.join("diff.patch"))?;
let mut cmd = cargo_bin_cmd!();
cmd.current_dir(&dir)
.arg("wsdeps")
.arg("diff")
.assert()
.success()
.stdout(predicate::eq(expected));
Ok(())
}
#[test]
fn diff_no_ws_deps_table() -> Result<()> {
let dir = Path::new(env!("CARGO_MANIFEST_DIR")).join("test-resources/no-ws-deps-table");
let expected = fs::read_to_string(dir.join("diff.patch"))?;
let mut cmd = cargo_bin_cmd!();
cmd.current_dir(&dir)
.arg("wsdeps")
.arg("diff")
.assert()
.success()
.stdout(predicate::eq(expected));
Ok(())
}
#[test]
fn diff_dotted_extras() -> Result<()> {
let dir = Path::new(env!("CARGO_MANIFEST_DIR")).join("test-resources/dotted-extras");
let expected = fs::read_to_string(dir.join("diff.patch"))?;
let mut cmd = cargo_bin_cmd!();
cmd.current_dir(&dir)
.arg("wsdeps")
.arg("diff")
.arg("--dotted")
.assert()
.success()
.stdout(predicate::eq(expected));
Ok(())
}
#[test]
fn diff_aggressive_merge() -> Result<()> {
let dir = Path::new(env!("CARGO_MANIFEST_DIR")).join("test-resources/aggressive-merge");
let expected = fs::read_to_string(dir.join("diff.patch"))?;
let mut cmd = cargo_bin_cmd!();
cmd.current_dir(&dir)
.arg("wsdeps")
.arg("diff")
.arg("--aggressive")
.assert()
.success()
.stdout(predicate::eq(expected));
Ok(())
}
#[test]
fn diff_workspace_selection() -> Result<()> {
let dir = Path::new(env!("CARGO_MANIFEST_DIR")).join("test-resources/multi-member");
let expected = fs::read_to_string(dir.join("diff-p-crate1.patch"))?;
let mut cmd = cargo_bin_cmd!();
cmd.current_dir(&dir)
.arg("wsdeps")
.arg("-p")
.arg("crate1")
.arg("diff")
.assert()
.success()
.stdout(predicate::eq(expected));
Ok(())
}
#[test]
fn diff_multi_member_dotted() -> Result<()> {
let dir = Path::new(env!("CARGO_MANIFEST_DIR")).join("test-resources/multi-member");
let expected = fs::read_to_string(dir.join("diff-dotted.patch"))?;
let mut cmd = cargo_bin_cmd!();
cmd.current_dir(&dir)
.arg("wsdeps")
.arg("diff")
.arg("--dotted")
.assert()
.success()
.stdout(predicate::eq(expected));
Ok(())
}
#[test]
fn diff_aggressive_path() -> Result<()> {
let dir = Path::new(env!("CARGO_MANIFEST_DIR")).join("test-resources/aggressive-path");
let expected = fs::read_to_string(dir.join("diff.patch"))?;
let mut cmd = cargo_bin_cmd!();
cmd.current_dir(&dir)
.arg("wsdeps")
.arg("diff")
.arg("--aggressive")
.assert()
.success()
.stdout(predicate::eq(expected));
Ok(())
}
#[test]
fn diff_path_workspace_deps() -> Result<()> {
let dir = Path::new(env!("CARGO_MANIFEST_DIR")).join("test-resources/path-workspace-deps");
let mut cmd = cargo_bin_cmd!();
cmd.current_dir(&dir)
.arg("wsdeps")
.arg("diff")
.assert()
.success()
.stdout(predicate::eq(""));
Ok(())
}
#[test]
fn diff_alphabetical_insert() -> Result<()> {
let dir = Path::new(env!("CARGO_MANIFEST_DIR")).join("test-resources/alphabetical-insert");
let expected = fs::read_to_string(dir.join("diff.patch"))?;
let mut cmd = cargo_bin_cmd!();
cmd.current_dir(&dir)
.arg("wsdeps")
.arg("diff")
.assert()
.success()
.stdout(predicate::eq(expected));
Ok(())
}