workspacer_toml/
is_valid_version.rs1crate::ix!();
3
4impl IsValidVersion for CargoToml {
5
6 fn is_valid_version(&self,version: &str) -> bool {
8 semver::Version::parse(version).is_ok()
9 }
10}
11
12#[cfg(test)]
13mod tests_is_valid_version {
14 use super::*;
15 use toml::from_str;
16
17 fn make_cargo_toml_from_str(toml_data: &str) -> CargoToml {
19 let parsed: TomlValue = from_str(toml_data).unwrap();
20 CargoTomlBuilder::default()
21 .path(PathBuf::from("Cargo.toml"))
22 .content(parsed)
23 .build()
24 .unwrap()
25 }
26
27 #[test]
28 fn test_is_valid_version_true_for_strict_semver() {
29 let cargo_toml = make_cargo_toml_from_str("[package]\nname = 'foo'");
30 assert!(
31 cargo_toml.is_valid_version("1.0.0"),
32 "Expected is_valid_version to return true for '1.0.0'"
33 );
34 }
35
36 #[test]
37 fn test_is_valid_version_true_for_semver_with_build_metadata() {
38 let cargo_toml = make_cargo_toml_from_str("[package]\nname = 'foo'");
40 assert!(
41 cargo_toml.is_valid_version("1.0.0+build.1"),
42 "Expected is_valid_version to return true for '1.0.0+build.1'"
43 );
44 }
45
46 #[test]
47 fn test_is_valid_version_false_for_non_semver() {
48 let cargo_toml = make_cargo_toml_from_str("[package]\nname = 'foo'");
49 assert!(
50 !cargo_toml.is_valid_version("not-a-version"),
51 "Expected is_valid_version to return false for 'not-a-version'"
52 );
53 }
54
55 #[test]
56 fn test_is_valid_version_false_for_partial_semver() {
57 let cargo_toml = make_cargo_toml_from_str("[package]\nname = 'foo'");
59 assert!(
60 !cargo_toml.is_valid_version("1.0"),
61 "Expected is_valid_version to return false for partial semver '1.0'"
62 );
63 }
64}