workspacer_toml/
is_valid_version.rs

1// ---------------- [ File: workspacer-toml/src/is_valid_version.rs ]
2crate::ix!();
3
4impl IsValidVersion for CargoToml {
5
6    /// Checks if the version string is a valid SemVer version
7    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    /// Helper to build a `CargoToml` purely in-memory.
18    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        // e.g. "1.0.0+build.1"
39        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        // e.g. "1.0" => not valid semver because it lacks the patch component
58        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}