258 lines
7 KiB
OCaml
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 |}]
|
|
;;
|