|
| 1 | +use development_tools::find_max_matching_version; |
| 2 | +use semver::{BuildMetadata, Prerelease, Version, VersionReq}; |
| 3 | +use std::process::Command; |
| 4 | + |
1 | 5 | #[cfg(test)]
|
2 |
| -mod tests_versioning {} |
| 6 | +mod tests_versioning { |
| 7 | + |
| 8 | + use super::*; |
| 9 | + |
| 10 | + #[test] |
| 11 | + fn test_parse_and_increment_version() { |
| 12 | + let mut parsed_version = Version::parse("0.2.6").unwrap(); |
| 13 | + |
| 14 | + assert_eq!( |
| 15 | + parsed_version, |
| 16 | + Version { |
| 17 | + major: 0, |
| 18 | + minor: 2, |
| 19 | + patch: 6, |
| 20 | + pre: Prerelease::EMPTY, |
| 21 | + build: BuildMetadata::EMPTY, |
| 22 | + } |
| 23 | + ); |
| 24 | + |
| 25 | + parsed_version.patch += 1; |
| 26 | + assert_eq!(parsed_version.to_string(), "0.2.7"); |
| 27 | + println!("New patch release: v{}", parsed_version); |
| 28 | + |
| 29 | + parsed_version.minor += 1; |
| 30 | + parsed_version.patch = 0; |
| 31 | + assert_eq!(parsed_version.to_string(), "0.3.0"); |
| 32 | + println!("New minor release: v{}", parsed_version); |
| 33 | + |
| 34 | + parsed_version.major += 1; |
| 35 | + parsed_version.minor = 0; |
| 36 | + assert_eq!(parsed_version.to_string(), "1.0.0"); |
| 37 | + println!("New major release: v{}", parsed_version); |
| 38 | + } |
| 39 | + |
| 40 | + #[test] |
| 41 | + fn test_parse_complex_version() { |
| 42 | + let version_str = "1.0.49-125+g72ee7853"; |
| 43 | + let parsed_version = Version::parse(version_str).unwrap(); |
| 44 | + let pre = Prerelease::new("125").unwrap(); |
| 45 | + let build = BuildMetadata::new("g72ee7853").unwrap(); |
| 46 | + |
| 47 | + assert_eq!( |
| 48 | + parsed_version, |
| 49 | + Version { |
| 50 | + major: 1, |
| 51 | + minor: 0, |
| 52 | + patch: 49, |
| 53 | + pre, |
| 54 | + build |
| 55 | + } |
| 56 | + ); |
| 57 | + |
| 58 | + assert_eq!( |
| 59 | + parsed_version.build, |
| 60 | + BuildMetadata::new("g72ee7853").unwrap() |
| 61 | + ); |
| 62 | + |
| 63 | + let serialized_version = parsed_version.to_string(); |
| 64 | + assert_eq!(&serialized_version, version_str); |
| 65 | + } |
| 66 | + |
| 67 | + #[test] |
| 68 | + fn test_version_is_prerelease() { |
| 69 | + let version_1 = Version::parse("1.0.0-alpha").unwrap(); |
| 70 | + let version_2 = Version::parse("1.0.0").unwrap(); |
| 71 | + |
| 72 | + assert!(!version_1.pre.is_empty()); |
| 73 | + assert!(version_2.pre.is_empty()); |
| 74 | + } |
| 75 | + |
| 76 | + #[test] |
| 77 | + fn test_find_max_matching_version() { |
| 78 | + assert_eq!( |
| 79 | + find_max_matching_version("<= 1.0.0", vec!["0.9.0", "1.0.0", "1.0.1"]).unwrap(), |
| 80 | + Some(Version::parse("1.0.0").unwrap()) |
| 81 | + ); |
| 82 | + |
| 83 | + assert_eq!( |
| 84 | + find_max_matching_version( |
| 85 | + ">1.2.3-alpha.3", |
| 86 | + vec![ |
| 87 | + "1.2.3-alpha.3", |
| 88 | + "1.2.3-alpha.4", |
| 89 | + "1.2.3-alpha.10", |
| 90 | + "1.2.3-beta.4", |
| 91 | + "3.4.5-alpha.9", |
| 92 | + ] |
| 93 | + ) |
| 94 | + .unwrap(), |
| 95 | + Some(Version::parse("1.2.3-beta.4").unwrap()) |
| 96 | + ); |
| 97 | + } |
| 98 | + |
| 99 | + #[test] |
| 100 | + fn test_check_external_command_version_for_compatibility() { |
| 101 | + let version_constraint = ">=1.50.0"; |
| 102 | + let version_test = VersionReq::parse(version_constraint).unwrap(); |
| 103 | + let output = Command::new("rustc").arg("--version").output().unwrap(); |
| 104 | + |
| 105 | + assert_eq!(output.status.success(), true); |
| 106 | + |
| 107 | + let version_str = String::from_utf8(output.stdout).unwrap(); |
| 108 | + let version = version_str.split_whitespace().nth(1).unwrap(); |
| 109 | + let parsed_version = Version::parse(version).unwrap(); |
| 110 | + |
| 111 | + assert!(version_test.matches(&parsed_version)); |
| 112 | + } |
| 113 | +} |
0 commit comments