Sebastian Thielthanks clippy8e96ed31 year agoHistory
152 lines · 4.8 KB · Rust
RawDownload
use gix_pathspec::parse::Error; use crate::parse::check_against_baseline; #[test]fn empty_input() {    let input = "";     assert!(!check_against_baseline(input), "This pathspec is valid in git: {input}");     let output = gix_pathspec::parse(input.as_bytes(), Default::default());    assert!(output.is_err());    assert!(matches!(output.unwrap_err(), Error::EmptyString));} #[test]fn invalid_short_signatures() {    let inputs = vec![        ":\"()", ":#()", ":%()", ":&()", ":'()", ":,()", ":-()", ":;()", ":<()", ":=()", ":>()", ":@()", ":_()",        ":`()", ":~()",    ];     for input in inputs.into_iter() {        assert!(!check_against_baseline(input), "This pathspec is valid in git: {input}");         let output = gix_pathspec::parse(input.as_bytes(), Default::default());        assert!(output.is_err());        assert!(matches!(output.unwrap_err(), Error::Unimplemented { .. }));    }} #[test]fn invalid_keywords() {    let inputs = vec![        ":( )some/path",        ":(tp)some/path",        ":(top, exclude)some/path",        ":(top,exclude,icse)some/path",    ];     for input in inputs.into_iter() {        assert!(!check_against_baseline(input), "This pathspec is valid in git: {input}");         let output = gix_pathspec::parse(input.as_bytes(), Default::default());        assert!(output.is_err());        assert!(matches!(output.unwrap_err(), Error::InvalidKeyword { .. }));    }} #[test]fn invalid_attributes() {    let inputs = vec![        ":(attr:+invalidAttr)some/path",        ":(attr:validAttr +invalidAttr)some/path",        ":(attr:+invalidAttr,attr:valid)some/path",        r":(attr:inva\lid)some/path",    ];     for input in inputs {        assert!(!check_against_baseline(input), "This pathspec is valid in git: {input}");         let output = gix_pathspec::parse(input.as_bytes(), Default::default());        assert!(output.is_err(), "This pathspec did not produce an error {input}");        assert!(matches!(output.unwrap_err(), Error::InvalidAttribute { .. }));    }} #[test]fn invalid_attribute_values() {    let inputs = vec![        r":(attr:v=inva#lid)some/path",        r":(attr:v=inva\\lid)some/path",        r":(attr:v=invalid\\)some/path",        r":(attr:v=invalid\#)some/path",        r":(attr:v=inva\=lid)some/path",        r":(attr:a=valid b=inva\#lid)some/path",        ":(attr:v=val��)",        ":(attr:pr=pre��x:,)�",    ];     for input in inputs {        assert!(!check_against_baseline(input), "This pathspec is valid in git: {input}");         let output = gix_pathspec::parse(input.as_bytes(), Default::default());        assert!(output.is_err(), "This pathspec did not produce an error {input}");        assert!(            matches!(output.unwrap_err(), Error::InvalidAttributeValue { .. }),            "Errors did not match for pathspec: {input}"        );    }} #[test]fn escape_character_at_end_of_attribute_value() {    let inputs = vec![        r":(attr:v=invalid\)some/path",        r":(attr:v=invalid\ )some/path",        r":(attr:v=invalid\ valid)some/path",    ];     for input in inputs {        assert!(!check_against_baseline(input), "This pathspec is valid in git: {input}");         let output = gix_pathspec::parse(input.as_bytes(), Default::default());        assert!(output.is_err(), "This pathspec did not produce an error {input}");        assert!(matches!(output.unwrap_err(), Error::TrailingEscapeCharacter));    }} #[test]fn empty_attribute_specification() {    let input = ":(attr:)";     assert!(!check_against_baseline(input), "This pathspec is valid in git: {input}");     let output = gix_pathspec::parse(input.as_bytes(), Default::default());    assert!(output.is_err());    assert!(matches!(output.unwrap_err(), Error::EmptyAttribute));} #[test]fn multiple_attribute_specifications() {    let input = ":(attr:one,attr:two)some/path";     assert!(!check_against_baseline(input), "This pathspec is valid in git: {input}");     let output = gix_pathspec::parse(input.as_bytes(), Default::default());    assert!(output.is_err());    assert!(matches!(output.unwrap_err(), Error::MultipleAttributeSpecifications));} #[test]fn missing_parentheses() {    let input = ":(top";     assert!(!check_against_baseline(input), "This pathspec is valid in git: {input}");     let output = gix_pathspec::parse(input.as_bytes(), Default::default());    assert!(output.is_err());    assert!(matches!(output.unwrap_err(), Error::MissingClosingParenthesis));} #[test]fn glob_and_literal_keywords_present() {    let input = ":(glob,literal)some/path";     assert!(!check_against_baseline(input), "This pathspec is valid in git: {input}");     let output = gix_pathspec::parse(input.as_bytes(), Default::default());    assert!(output.is_err());    assert!(matches!(output.unwrap_err(), Error::IncompatibleSearchModes));}