use {CargoToml, Dependency, DependencySource};
#[test]
fn updating_dependency_no_table() {
check_cargo_toml_edit(
r#"
[package]
name = "tom"
"#,
r#"
[package]
name = "tom"
[dependencies]
regex = "1.0"
"#,
|toml| {
toml.update_dependency(&Dependency {
name: "regex".to_string(),
source: DependencySource::Version("1.0".to_string()),
optional: false,
}).unwrap();
},
);
check_cargo_toml_edit(
r#"
[package]
name = "tom"
[bin]
name = "bar"
"#,
r#"
[package]
name = "tom"
[dependencies]
regex = "1.0"
[bin]
name = "bar"
"#,
|toml| {
toml.update_dependency(&Dependency {
name: "regex".to_string(),
source: DependencySource::Version("1.0".to_string()),
optional: false,
}).unwrap();
},
);
}
#[test]
fn updating_dependency() {
check_cargo_toml_edit(
r#"
[package]
name = "tom"
[dependencies]
"#,
r#"
[package]
name = "tom"
[dependencies]
regex = "1.0"
"#,
|toml| {
toml.update_dependency(&Dependency {
name: "regex".to_string(),
source: DependencySource::Version("1.0".to_string()),
optional: false,
}).unwrap();
},
);
check_cargo_toml_edit(
r#"
[package]
name = "tom"
[dependencies]
regex = "1.0"
"#,
r#"
[package]
name = "tom"
[dependencies]
regex = { git = "http://example.com" }
"#,
|toml| {
toml.update_dependency(&Dependency {
name: "regex".to_string(),
source: DependencySource::Git {
url: "http://example.com".to_string(),
version: None,
branch: None,
},
optional: false,
}).unwrap();
},
);
check_cargo_toml_edit(
r#"
[package]
name = "tom"
[dependencies.regex]
version = "1.0"
"#,
r#"
[package]
name = "tom"
[dependencies.regex]
version = "1.0"
git = "http://example.com"
"#,
|toml| {
toml.update_dependency(&Dependency {
name: "regex".to_string(),
source: DependencySource::Git {
url: "http://example.com".to_string(),
version: None,
branch: None,
},
optional: false,
}).unwrap();
},
);
check_cargo_toml_edit(
r#"
[package]
name = "tom"
[dependencies]
regex = { git = "http://example.com" }
"#,
r#"
[package]
name = "tom"
[dependencies]
regex = { git = "http://example.com", branch = "dev" }
"#,
|toml| {
toml.update_dependency(&Dependency {
name: "regex".to_string(),
source: DependencySource::Git {
url: "http://example.com".to_string(),
version: None,
branch: Some("dev".to_string()),
},
optional: false,
}).unwrap();
},
);
}
fn check_cargo_toml_edit(before: &str, after: &str, edit: impl FnOnce(&mut CargoToml)) {
let mut cargo_toml = CargoToml::new(before).unwrap();
edit(&mut cargo_toml);
let actual = cargo_toml.text();
assert_eq!(after, &actual);
}