mte/unikernel/duniverse/ocaml-re/lib_test/expect/test_glob.ml
2025-11-11 02:07:51 +01:00

258 lines
7 KiB
OCaml

open Import
let glob ?match_backslashes ?expand_braces ?anchored ?pathname ?period re s =
let re =
Re.Glob.glob ?match_backslashes ?expand_braces ?anchored ?pathname ?period re
|> Re.compile
in
Format.printf "%b@." (Re.execp re s)
;;
let%expect_test "glob" =
glob "foo*" "foobar";
[%expect {| true |}];
glob "fo?bar" "fobar";
[%expect {| false |}];
glob "fo?bar" "foobar";
[%expect {| true |}];
glob "fo?bar" "foo0bar";
[%expect {| false |}];
glob "?oobar" "foobar";
[%expect {| true |}];
glob "*bar" "foobar";
[%expect {| true |}];
glob "\\*bar" "foobar";
[%expect {| false |}];
glob "\\*bar" "*bar";
[%expect {| true |}];
glob "[ab]foo" "afoo";
[%expect {| true |}];
glob "[ab]foo" "bfoo";
[%expect {| true |}];
glob "[ab]foo" "cfoo";
[%expect {| false |}];
glob "c[ab]foo" "cabfoo";
[%expect {| false |}];
glob ".foo" ".foo";
[%expect {| true |}];
glob ".foo" "afoo";
[%expect {| false |}];
glob "*[.]foo" "a.foo";
[%expect {| true |}];
glob "*[.]foo" "ba.foo";
[%expect {| true |}];
glob "*.foo" ".foo";
[%expect {| false |}];
glob "*[.]foo" ".foo";
[%expect {| false |}];
glob ~anchored:true "*/foo" "/foo";
[%expect {| true |}];
glob ~anchored:true "foo/*" "foo/";
[%expect {| true |}];
glob "/[^f]" "/foo";
[%expect {| false |}];
glob "/[^f]" "/bar";
[%expect {| true |}];
glob ~anchored:true "/[^f]" "/bar";
[%expect {| false |}];
glob ~anchored:true "*" ".bar";
[%expect {| false |}];
glob "foo[.]bar" "foo.bar";
[%expect {| true |}];
glob "[.]foo" ".foo";
[%expect {| false |}];
glob "foo[/]bar" "foo/bar";
[%expect {| false |}];
glob ~anchored:true "*bar" "foobar";
[%expect {| true |}];
glob "foo" "foobar";
[%expect {| true |}];
glob "bar" "foobar";
[%expect {| true |}];
glob ~anchored:true "foo" "foobar";
[%expect {| false |}];
glob ~anchored:true "bar" "foobar";
[%expect {| false |}];
glob "{foo,bar}bar" "foobar";
[%expect {| false |}];
glob "{foo,bar}bar" "{foo,bar}bar";
[%expect {| true |}];
glob "foo?bar" "foo/bar";
[%expect {| false |}];
let pathname = true in
let period = true in
glob ~pathname ~period "?oobar" ".oobar";
[%expect {| false |}];
glob ~pathname ~period "?oobar" "/oobar";
[%expect {| false |}];
glob ~pathname ~period "f?obar" "f/obar";
[%expect {| false |}];
glob ~pathname ~period "f?obar" "f.obar";
[%expect {| true |}];
glob ~pathname ~period "f*.bar" "f.bar";
[%expect {| true |}];
glob ~pathname ~period "f?.bar" "fo.bar";
[%expect {| true |}];
glob ~pathname ~period "/.bar" "/.bar";
[%expect {| true |}];
glob ~pathname ~period "*.bar" ".bar";
[%expect {| false |}];
glob ~pathname ~period "?" ".";
[%expect {| false |}];
glob ~pathname ~period "/*bar" "/.bar";
[%expect {| false |}];
glob "?oobar" ".oobar";
[%expect {| false |}];
glob "?oobar" "/oobar";
[%expect {| false |}];
let pathname = true in
let period = false in
glob ~pathname ~period "?oobar" "/oobar";
[%expect {| false |}];
glob ~pathname ~period "?oobar" ".oobar";
[%expect {| true |}];
glob ~pathname ~period "f?obar" "f/obar";
[%expect {| false |}];
glob ~pathname ~period "f?obar" "f.obar";
[%expect {| true |}];
let pathname = false in
let period = false in
glob ~pathname ~period "?oobar" ".oobar";
[%expect {| true |}];
glob ~pathname ~period "?oobar" "/oobar";
[%expect {| true |}];
glob ~expand_braces:true "{foo,far}bar" "foobar";
[%expect {| true |}];
glob ~expand_braces:true "{foo,far}bar" "farbar";
[%expect {| true |}];
glob ~expand_braces:true "{foo,far}bar" "{foo,far}bar";
[%expect {| false |}]
;;
let%expect_test "double asterisk" =
let glob = glob ~anchored:true in
glob "**" "foobar";
[%expect {| true |}];
glob "**" "foo/bar";
[%expect {| true |}];
glob "**/bar" "foo/bar";
[%expect {| true |}];
glob "**/bar" "foo/far/bar";
[%expect {| true |}];
glob "foo/**" "foo";
[%expect {| false |}];
glob "foo/**" "foo/bar";
[%expect {| true |}];
glob "foo/**" "foo/far/bar";
[%expect {| true |}];
glob "foo/**/bar" "foo/far/bar";
[%expect {| true |}];
glob "foo/**/bar" "foo/far/oof/bar";
[%expect {| true |}];
glob "foo/**bar" "foo/far/oofbar";
[%expect {| true |}];
glob "foo/**bar" "foo/bar";
[%expect {| true |}];
glob "foo/**bar" "foo/foobar";
[%expect {| true |}];
glob "/**" "//foo";
[%expect {| true |}];
glob "/**" "/";
[%expect {| true |}];
glob "/**" "/x";
[%expect {| true |}];
glob "**" "foo//bar";
[%expect {| true |}];
glob "foo/bar/**/*.ml" "foo/bar/baz/foobar.ml";
[%expect {| true |}];
glob "foo/bar/**/*.ml" "foo/bar/foobar.ml";
[%expect {| true |}];
glob "foo/**/bar/**/baz" "foo/bar/baz";
[%expect {| true |}];
glob "foo/**/bar/**/baz" "foo/bar/x/y/z/baz";
[%expect {| true |}];
glob "foo/**/bar/**/baz" "foo/x/y/z/bar/baz";
[%expect {| true |}];
glob "foo/**/bar/**/baz" "foo/bar/x/bar/x/baz";
[%expect {| true |}];
glob "foo/**/bar/**/baz" "foo/bar/../x/baz";
[%expect {| false |}];
glob "foo/**/bar/**/baz" "foo/bar/./x/baz";
[%expect {| false |}];
((* Interaction with [~period] *)
let glob = glob ~period:true in
glob "**" ".foobar";
[%expect {| false |}];
glob "**" ".foo/bar";
[%expect {| false |}];
glob "foo/**" "foo/.bar";
[%expect {| false |}];
glob "**" "foo/.bar/bat";
[%expect {| false |}];
glob "foo/**/bat" "foo/.bar/bat";
[%expect {| false |}];
glob "/**/bat" "/foo/.bar/bat";
[%expect {| false |}];
glob "/**/bat" "/.bar/bat";
[%expect {| false |}];
glob "/**bat" "/bar/.bat";
[%expect {| false |}];
glob ".**" ".foobar";
[%expect {| true |}];
glob ".**" ".foo/bar";
[%expect {| true |}];
glob "foo/.**" "foo/.bar";
[%expect {| true |}]);
let glob = glob ~period:false in
glob "**" ".foobar";
[%expect {| true |}];
glob "**" ".foo/bar";
[%expect {| true |}];
glob "foo/**" "foo/.bar";
[%expect {| true |}];
glob "**" "foo/.bar/bat";
[%expect {| true |}];
glob "foo/**/bat" "foo/.bar/bat";
[%expect {| true |}];
glob "/**/bat" "/foo/.bar/bat";
[%expect {| true |}];
glob "/**/bat" "/.bar/bat";
[%expect {| true |}];
glob "/**bat" "/bar/.bat";
[%expect {| true |}]
;;
let%expect_test "backslash handling" =
let anchored = true in
let glob = glob ~anchored in
(let glob = glob ~match_backslashes:false in
glob "a/b/c" "a\\b/c";
[%expect {| false |}];
glob "a\\b" "ab";
[%expect {| true |}];
glob "a/*.ml" "a/b\\c.ml";
[%expect {| true |}];
glob "a/b/*.ml" "a\\b\\c.ml";
[%expect {| false |}];
glob "/" "\\";
[%expect {| false |}];
glob "/?" "\\a";
[%expect {| false |}];
glob "a/**.ml" "a\\c\\.b.ml";
[%expect {| true |}]);
let glob = glob ~match_backslashes:true in
glob "a/b/c" "a\\b/c";
[%expect {| true |}];
glob "a\\b" "ab";
[%expect {| true |}];
glob "a/*.ml" "a/b\\c.ml";
[%expect {| false |}];
glob "a/b/*.ml" "a\\b\\c.ml";
[%expect {| true |}];
glob "/" "\\";
[%expect {| true |}];
glob "/?" "\\a";
[%expect {| true |}];
glob "a/**.ml" "a\\c\\.b.ml";
[%expect {| false |}]
;;