|
|
@@ -86,7 +86,7 @@ impl Default for Config<'_> {
|
|
|
}
|
|
|
|
|
|
pub fn is_version_string(arg: &str) -> Result<(), String> {
|
|
|
- let semver_re = Regex::new(r"^v?[0-9]+\.[0-9]+(\.[0-9]+)?").unwrap();
|
|
|
+ let semver_re = Regex::new(r"^v?[0-9]+\.[0-9]+(\.[0-9]+)?$").unwrap();
|
|
|
if semver_re.is_match(arg) {
|
|
|
return Ok(());
|
|
|
}
|
|
|
@@ -623,3 +623,50 @@ fn main() {
|
|
|
}
|
|
|
build_solana(config, manifest_path);
|
|
|
}
|
|
|
+
|
|
|
+#[cfg(test)]
|
|
|
+mod tests {
|
|
|
+ use super::*;
|
|
|
+
|
|
|
+ #[test]
|
|
|
+ fn test_is_version_string_valid_versions() {
|
|
|
+ // Test valid versions that should pass validation
|
|
|
+ assert!(is_version_string("1.2.3").is_ok());
|
|
|
+ assert!(is_version_string("v2.1.0").is_ok());
|
|
|
+ assert!(is_version_string("1.32").is_ok());
|
|
|
+ assert!(is_version_string("v1.32").is_ok());
|
|
|
+ assert!(is_version_string("0.1").is_ok());
|
|
|
+ assert!(is_version_string("v0.1").is_ok());
|
|
|
+ assert!(is_version_string("10.20.30").is_ok());
|
|
|
+ assert!(is_version_string("v10.20.30").is_ok());
|
|
|
+ }
|
|
|
+
|
|
|
+ #[test]
|
|
|
+ fn test_is_version_string_invalid_versions() {
|
|
|
+ // Test invalid versions that should fail validation
|
|
|
+ assert!(is_version_string("1.2.3abc").is_err());
|
|
|
+ assert!(is_version_string("v2.1.0-extra").is_err());
|
|
|
+ assert!(is_version_string("abc1.2.3").is_err());
|
|
|
+ assert!(is_version_string("1").is_err());
|
|
|
+ assert!(is_version_string("v1").is_err());
|
|
|
+ assert!(is_version_string("1.2.3.4.5").is_err());
|
|
|
+ assert!(is_version_string("").is_err());
|
|
|
+ assert!(is_version_string("v").is_err());
|
|
|
+ assert!(is_version_string("1.").is_err());
|
|
|
+ assert!(is_version_string("v1.").is_err());
|
|
|
+ assert!(is_version_string(".1.2").is_err());
|
|
|
+ assert!(is_version_string("1.2.3-beta").is_err());
|
|
|
+ assert!(is_version_string("v1.2.3+build").is_err());
|
|
|
+ }
|
|
|
+
|
|
|
+ #[test]
|
|
|
+ fn test_is_version_string_error_message() {
|
|
|
+ // Test that error message is descriptive
|
|
|
+ let result = is_version_string("invalid");
|
|
|
+ assert!(result.is_err());
|
|
|
+ let error_msg = result.unwrap_err();
|
|
|
+ assert!(error_msg.contains("version string may start with 'v'"));
|
|
|
+ assert!(error_msg.contains("major and minor version numbers"));
|
|
|
+ assert!(error_msg.contains("separated by a dot"));
|
|
|
+ }
|
|
|
+}
|