From 7dba9d4eeafb6f9fdf30a62f849dc80bb8c98070 Mon Sep 17 00:00:00 2001 From: Michael Date: Fri, 8 Dec 2023 22:35:51 +0100 Subject: [PATCH 1/6] Add test_special_characters_matches for StringMatcher::from_str --- crates/rattler_conda_types/src/match_spec/matcher.rs | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/crates/rattler_conda_types/src/match_spec/matcher.rs b/crates/rattler_conda_types/src/match_spec/matcher.rs index 665a31ce9..80cc53215 100644 --- a/crates/rattler_conda_types/src/match_spec/matcher.rs +++ b/crates/rattler_conda_types/src/match_spec/matcher.rs @@ -151,4 +151,12 @@ mod tests { .unwrap() .matches("foobar")); } + + #[test] + fn test_special_characters_matches() { + let special_characters = "~!@#$%^&*()_-+={}[]|;:'<>,.?/"; + for special_character in special_characters.chars() { + assert!(StringMatcher::from_str(&special_character.to_string()).unwrap().matches(&special_character.to_string())); + } + } } From c597cc31d9ce270d1a03e93aff4d6f351aef28e3 Mon Sep 17 00:00:00 2001 From: Michael Date: Sat, 9 Dec 2023 11:04:50 +0100 Subject: [PATCH 2/6] Move ParseMatchSpecError::InvalidBracket tests to separate testcase --- .../src/match_spec/parse.rs | 21 +++++++++++-------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/crates/rattler_conda_types/src/match_spec/parse.rs b/crates/rattler_conda_types/src/match_spec/parse.rs index b1b8ceea9..1894b647d 100644 --- a/crates/rattler_conda_types/src/match_spec/parse.rs +++ b/crates/rattler_conda_types/src/match_spec/parse.rs @@ -506,15 +506,6 @@ mod tests { assert_eq!(result.0, "bla "); let expected: BracketVec = smallvec![("version", "1.2.3"), ("build_number", "1")]; assert_eq!(result.1, expected); - - assert_matches!( - strip_brackets(r#"bla [version="1.2.3", build_number=]"#), - Err(ParseMatchSpecError::InvalidBracket) - ); - assert_matches!( - strip_brackets(r#"bla [version="1.2.3, build_number=1]"#), - Err(ParseMatchSpecError::InvalidBracket) - ); } #[test] @@ -730,4 +721,16 @@ mod tests { .collect(); insta::assert_yaml_snapshot!("parsed matchspecs", evaluated); } + + #[test] + fn test_invalid_bracket() { + assert_matches!( + strip_brackets(r#"bla [version="1.2.3", build_number=]"#), + Err(ParseMatchSpecError::InvalidBracket) + ); + assert_matches!( + strip_brackets(r#"bla [version="1.2.3, build_number=1]"#), + Err(ParseMatchSpecError::InvalidBracket) + ); + } } From c78cfbd680632b40f6cbd233a635def75ebcea1d Mon Sep 17 00:00:00 2001 From: Michael Date: Sat, 9 Dec 2023 11:06:04 +0100 Subject: [PATCH 3/6] Add ParseMatchSpecError::InvalidBracketKey test --- crates/rattler_conda_types/src/match_spec/parse.rs | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/crates/rattler_conda_types/src/match_spec/parse.rs b/crates/rattler_conda_types/src/match_spec/parse.rs index 1894b647d..20d09fd68 100644 --- a/crates/rattler_conda_types/src/match_spec/parse.rs +++ b/crates/rattler_conda_types/src/match_spec/parse.rs @@ -733,4 +733,11 @@ mod tests { Err(ParseMatchSpecError::InvalidBracket) ); } + + #[test] + fn test_invalid_bracket_key() { + let _unknown_key = String::from("unknown"); + let spec = MatchSpec::from_str("conda-forge::foo[unknown=1.0.*]"); + assert_matches!(spec, Err(ParseMatchSpecError::InvalidBracketKey(_unknown_key))); + } } From 65bc7156529453a3812e9160298674b953a6b9fa Mon Sep 17 00:00:00 2001 From: Michael Date: Sat, 9 Dec 2023 22:20:24 +0100 Subject: [PATCH 4/6] Add tests for parse errors InvalidNumberOfColons MissingPackageName --- crates/rattler_conda_types/src/match_spec/parse.rs | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/crates/rattler_conda_types/src/match_spec/parse.rs b/crates/rattler_conda_types/src/match_spec/parse.rs index 20d09fd68..ebd66eb52 100644 --- a/crates/rattler_conda_types/src/match_spec/parse.rs +++ b/crates/rattler_conda_types/src/match_spec/parse.rs @@ -474,7 +474,7 @@ mod tests { use std::sync::Arc; use super::{ - split_version_and_build, strip_brackets, BracketVec, MatchSpec, ParseMatchSpecError, + split_version_and_build, strip_brackets, BracketVec, MatchSpec, ParseMatchSpecError, strip_package_name, }; use crate::match_spec::parse::parse_bracket_list; use crate::{BuildNumberSpec, Channel, NamelessMatchSpec, VersionSpec}; @@ -740,4 +740,16 @@ mod tests { let spec = MatchSpec::from_str("conda-forge::foo[unknown=1.0.*]"); assert_matches!(spec, Err(ParseMatchSpecError::InvalidBracketKey(_unknown_key))); } + + #[test] + fn test_invalid_number_of_colons() { + let spec = MatchSpec::from_str("conda-forge::::foo[version=\"1.0.*\"]"); + assert_matches!(spec, Err(ParseMatchSpecError::InvalidNumberOfColons)); + } + + #[test] + fn test_missing_package_name() { + let package_name = strip_package_name(""); + assert_matches!(package_name, Err(ParseMatchSpecError::MissingPackageName)); + } } From b74c905179eb5c8a2e0332425d48b9c44b809fb8 Mon Sep 17 00:00:00 2001 From: Michael Date: Sat, 9 Dec 2023 23:07:52 +0100 Subject: [PATCH 5/6] Add ParseMatchSpecError tests for invalid regex and glob --- .../rattler_conda_types/src/match_spec/matcher.rs | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/crates/rattler_conda_types/src/match_spec/matcher.rs b/crates/rattler_conda_types/src/match_spec/matcher.rs index 80cc53215..12423d5b8 100644 --- a/crates/rattler_conda_types/src/match_spec/matcher.rs +++ b/crates/rattler_conda_types/src/match_spec/matcher.rs @@ -116,6 +116,7 @@ impl Serialize for StringMatcher { #[cfg(test)] mod tests { use super::*; + use assert_matches::assert_matches; #[test] fn test_string_matcher() { @@ -158,5 +159,17 @@ mod tests { for special_character in special_characters.chars() { assert!(StringMatcher::from_str(&special_character.to_string()).unwrap().matches(&special_character.to_string())); } - } + } + + #[test] + fn test_invalid_regex() { + let _invalid_regex = "^.*[oo|bar.*$"; + assert_matches!(StringMatcher::from_str(_invalid_regex), Err(StringMatcherParseError::InvalidRegex { regex: _invalid_regex, })); + } + + #[test] + fn test_invalid_glob() { + let _invalid_glob = "[foo*"; + assert_matches!(StringMatcher::from_str(_invalid_glob), Err(StringMatcherParseError::InvalidGlob { glob: _invalid_glob, })); + } } From 1e2084e0f32215eee9bb35ba39b705d3252645e2 Mon Sep 17 00:00:00 2001 From: Michael Date: Sun, 10 Dec 2023 10:50:51 +0100 Subject: [PATCH 6/6] Format code using rstfmt --- .../src/match_spec/matcher.rs | 22 ++++++++++++++----- .../src/match_spec/parse.rs | 12 ++++++---- 2 files changed, 25 insertions(+), 9 deletions(-) diff --git a/crates/rattler_conda_types/src/match_spec/matcher.rs b/crates/rattler_conda_types/src/match_spec/matcher.rs index 12423d5b8..256d5d4d4 100644 --- a/crates/rattler_conda_types/src/match_spec/matcher.rs +++ b/crates/rattler_conda_types/src/match_spec/matcher.rs @@ -156,20 +156,32 @@ mod tests { #[test] fn test_special_characters_matches() { let special_characters = "~!@#$%^&*()_-+={}[]|;:'<>,.?/"; - for special_character in special_characters.chars() { - assert!(StringMatcher::from_str(&special_character.to_string()).unwrap().matches(&special_character.to_string())); - } + for special_character in special_characters.chars() { + assert!(StringMatcher::from_str(&special_character.to_string()) + .unwrap() + .matches(&special_character.to_string())); + } } #[test] fn test_invalid_regex() { let _invalid_regex = "^.*[oo|bar.*$"; - assert_matches!(StringMatcher::from_str(_invalid_regex), Err(StringMatcherParseError::InvalidRegex { regex: _invalid_regex, })); + assert_matches!( + StringMatcher::from_str(_invalid_regex), + Err(StringMatcherParseError::InvalidRegex { + regex: _invalid_regex, + }) + ); } #[test] fn test_invalid_glob() { let _invalid_glob = "[foo*"; - assert_matches!(StringMatcher::from_str(_invalid_glob), Err(StringMatcherParseError::InvalidGlob { glob: _invalid_glob, })); + assert_matches!( + StringMatcher::from_str(_invalid_glob), + Err(StringMatcherParseError::InvalidGlob { + glob: _invalid_glob, + }) + ); } } diff --git a/crates/rattler_conda_types/src/match_spec/parse.rs b/crates/rattler_conda_types/src/match_spec/parse.rs index ebd66eb52..6380222a3 100644 --- a/crates/rattler_conda_types/src/match_spec/parse.rs +++ b/crates/rattler_conda_types/src/match_spec/parse.rs @@ -474,7 +474,8 @@ mod tests { use std::sync::Arc; use super::{ - split_version_and_build, strip_brackets, BracketVec, MatchSpec, ParseMatchSpecError, strip_package_name, + split_version_and_build, strip_brackets, strip_package_name, BracketVec, MatchSpec, + ParseMatchSpecError, }; use crate::match_spec::parse::parse_bracket_list; use crate::{BuildNumberSpec, Channel, NamelessMatchSpec, VersionSpec}; @@ -738,18 +739,21 @@ mod tests { fn test_invalid_bracket_key() { let _unknown_key = String::from("unknown"); let spec = MatchSpec::from_str("conda-forge::foo[unknown=1.0.*]"); - assert_matches!(spec, Err(ParseMatchSpecError::InvalidBracketKey(_unknown_key))); + assert_matches!( + spec, + Err(ParseMatchSpecError::InvalidBracketKey(_unknown_key)) + ); } #[test] fn test_invalid_number_of_colons() { let spec = MatchSpec::from_str("conda-forge::::foo[version=\"1.0.*\"]"); - assert_matches!(spec, Err(ParseMatchSpecError::InvalidNumberOfColons)); + assert_matches!(spec, Err(ParseMatchSpecError::InvalidNumberOfColons)); } #[test] fn test_missing_package_name() { let package_name = strip_package_name(""); - assert_matches!(package_name, Err(ParseMatchSpecError::MissingPackageName)); + assert_matches!(package_name, Err(ParseMatchSpecError::MissingPackageName)); } }