diff --git a/Cargo.toml b/Cargo.toml index 30b2252..91c57da 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -64,8 +64,6 @@ optional = true [dev-dependencies] build-fs-tree = "^0.6.0" dunce = "^1.0.0" -# TODO: Try integrating with `speculoos`. If that works well, it will likely -# replace `expect_macro`. expect_macro = "^0.2.0" rstest = "^0.18.0" tempfile = "^3.8.0" diff --git a/src/lib.rs b/src/lib.rs index 2929979..5796ad8 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -2222,53 +2222,34 @@ mod tests { ); } - #[test] - fn query_glob_variance() { - assert!(Glob::new("").unwrap().variance().is_invariant()); - assert!(Glob::new("/a/file.ext").unwrap().variance().is_invariant()); - assert!(Glob::new("/a/{file.ext}") - .unwrap() - .variance() - .is_invariant()); - assert!(Glob::new("{a/b/file.ext}") - .unwrap() - .variance() - .is_invariant()); - assert!(Glob::new("{a,a}").unwrap().variance().is_invariant()); - #[cfg(windows)] - assert!(Glob::new("{a,A}").unwrap().variance().is_invariant()); - assert!(Glob::new("").unwrap().variance().is_invariant()); - #[cfg(unix)] - assert!(Glob::new("/[a]/file.ext") - .unwrap() - .variance() - .is_invariant()); - #[cfg(unix)] - assert!(Glob::new("/[a-a]/file.ext") - .unwrap() - .variance() - .is_invariant()); - #[cfg(unix)] - assert!(Glob::new("/[a-aaa-a]/file.ext") - .unwrap() - .variance() - .is_invariant()); - - assert!(Glob::new("/a/{b,c}").unwrap().variance().is_variant()); - assert!(Glob::new("").unwrap().variance().is_variant()); - assert!(Glob::new("/[ab]/file.ext").unwrap().variance().is_variant()); - assert!(Glob::new("**").unwrap().variance().is_variant()); - assert!(Glob::new("/a/*.ext").unwrap().variance().is_variant()); - assert!(Glob::new("/a/b*").unwrap().variance().is_variant()); - #[cfg(unix)] - assert!(Glob::new("/a/(?i)file.ext") - .unwrap() - .variance() - .is_variant()); - #[cfg(windows)] - assert!(Glob::new("/a/(?-i)file.ext") - .unwrap() - .variance() - .is_variant()); + #[rstest] + #[case("", true)] + #[case("/a/file.ext", true)] + #[case("/a/{file.ext}", true)] + #[case("/a/b/file.ext", true)] + #[case("{a,a}", true)] + #[case("", true)] + #[case("/a/{b,c}", false)] + #[case("", false)] + #[case("/[ab]/file.ext", false)] + #[case("**", false)] + #[case("/a/*.ext", false)] + #[case("/a/b*", false)] + #[cfg_attr(unix, case("/[a]/file.ext", true))] + #[cfg_attr(unix, case("/[a-a]/file.ext", true))] + #[cfg_attr(unix, case("/[a-aaa-a]/file.ext", true))] + #[cfg_attr(unix, case("/a/(?i)file.ext", false))] + #[cfg_attr(windows, case("{a,A}", true))] + #[cfg_attr(windows, case("/a/(?-i)file.ext", false))] + fn query_glob_variance_is_invariant_eq(#[case] expression: &str, #[case] expected: bool) { + let glob = harness::assert_new_glob_is_ok(expression); + let is_invariant = glob.variance().is_invariant(); + assert!( + is_invariant == expected, + "`Variance::is_invariant` is `{}`, but expected `{}`: in `Glob`: `{}`", + is_invariant, + expected, + glob, + ); } }