135 lines
4.5 KiB
OCaml
135 lines
4.5 KiB
OCaml
(* Testglob *)
|
|
|
|
open Bool;;
|
|
open Glob;;
|
|
|
|
let yep f x =
|
|
try
|
|
ignore (f x);
|
|
true
|
|
with
|
|
| _ -> false
|
|
;;
|
|
|
|
let tests1 = [
|
|
"\"hello\"", true;
|
|
"<hello>", true;
|
|
"<hel*lo>", true;
|
|
"<a> and <b> or <c>", true;
|
|
"<a> titi", false
|
|
];;
|
|
|
|
let tests2 = [
|
|
"<[a]>", ["a"], ["b"];
|
|
"<[a-z]>", ["a";"e";"k";"z"], ["0";"A";"~"];
|
|
"<[a-z][0-9]>", ["a0";"b9"], ["a00";"a0a";"b0a";"isduis";""];
|
|
"<hello>", ["hello"], ["helli"];
|
|
"\"hello\"", ["hello"], ["heidi"];
|
|
"<*>", ["";"a";"ax"], [];
|
|
"<a*b>", ["ab";"acb";"axxxxxb";"ababbababb"], ["abx";"xxxxxab";"xab"];
|
|
"<*.ml>", ["hello.ml";".ml"], ["ml"; ""; "toto.mli"];
|
|
"<a>", ["a"], ["";"aa";"ba";"ab";"abaa"];
|
|
"<ab>", ["ab"], ["";"abab";"aba";"abx"];
|
|
"<ab?c>", ["abac";"abxc"], ["abab";"ababab";"ababa"];
|
|
"<*ab?cd*>", ["123abecd345";"abccd";"abccd345";"ababcababccdab"], ["abcd";"aaaaabcdababcd"];
|
|
"<*this*is*a*test*>", ["this is a test";"You know this is a test really";"thisisatest"], ["thisatest"];
|
|
"<b*>", ["bxx";"bx"], ["aaab";""];
|
|
"<*>", ["";"a";"aaa";"aaaaa"], [];
|
|
"<?>", ["a"],["";"aaa";"aaaaa"];
|
|
"<{a,b}>", ["a";"b"],["";"aa";"ab";"ba";"bb";"c"];
|
|
"<toto.{ml,mli}>", ["toto.ml";"toto.mli"],["toto.";"toto.mll"];
|
|
"<{a,b}{c,[de]}{f,g}>", ["acf";"acg";"adf";"adg";"aef";"aeg";"bcf";"bcg";"bdf";"bdg";"bef";"beg"],
|
|
["afg";"af";"aee"];
|
|
"(<*.ml> or <*.mli>) and not \"hello.ml\"",
|
|
["a.ml"; "b.ml"; "a.mli"],
|
|
["hello.ml"; "a.mli.x"];
|
|
"<*>", ["alpha";"beta"], ["alpha/beta";"gamma/delta"];
|
|
"<alpha/**/beta>", ["alpha/beta";"alpha/gamma/beta";"alpha/gamma/delta/beta"],
|
|
["alpha";"beta";"gamma/delta"];
|
|
"<**/*.ml>", ["toto.ml";"toto/tata.ml";"alpha/gamma/delta/beta.ml"],
|
|
["toto.mli"];
|
|
"<toto/**>", ["toto/";"toto/tata";"toto/alpha/gamma/delta/beta.ml";"toto"],
|
|
["toto2/tata"; "tata/titi"]
|
|
];;
|
|
|
|
let tests3 = [
|
|
"%(path:<**/>)lib%(libname:<*> and not <*.*>).a",
|
|
["libfoo.a","","foo";
|
|
"src/bar/libfoo.a","src/bar/","foo";
|
|
"otherlibs/unix/libunix.a","otherlibs/unix/","unix";
|
|
"otherlibsliblib/unlibix/libunix.a","otherlibsliblib/unlibix/","unix";
|
|
"libfoo/libbar.a","libfoo/","bar";
|
|
"src/libfoo/boo/libbar.a","src/libfoo/boo/","bar";
|
|
],
|
|
["bar"; "libbar/foo.a"; "libfoo.b.a"]
|
|
];;
|
|
|
|
let _ =
|
|
let times = 3 in
|
|
List.iter
|
|
begin fun (str, ast) ->
|
|
let ast' = yep Glob.parse str in
|
|
if ast <> ast' then
|
|
begin
|
|
Printf.printf "Globexp parsing failed for %S.\n%!" str;
|
|
exit 1
|
|
end
|
|
else
|
|
Printf.printf "Globexp for %S OK\n%!" str
|
|
end
|
|
tests1;
|
|
List.iter
|
|
begin fun (gstr, yes, no) ->
|
|
let globber = Glob.parse gstr in
|
|
let check polarity =
|
|
List.iter
|
|
begin fun y ->
|
|
if Glob.eval globber y = polarity then
|
|
Printf.printf "Glob.eval %S %S = %b OK\n%!" gstr y polarity
|
|
else
|
|
begin
|
|
Printf.printf "Glob.eval %S %S = %b FAIL\n%!" gstr y (not polarity);
|
|
exit 1
|
|
end
|
|
end
|
|
in
|
|
for k = 1 to times do
|
|
check true yes;
|
|
check false no
|
|
done
|
|
end
|
|
tests2;
|
|
List.iter begin fun (str, yes, no) ->
|
|
let resource = Resource.import_pattern str in
|
|
for k = 1 to times do
|
|
List.iter begin fun (y, path, libname) ->
|
|
let resource' = Resource.import y in
|
|
match Resource.matchit resource resource' with
|
|
| Some env ->
|
|
let path' = Resource.subst env "%(path)" in
|
|
let libname' = Resource.subst env "%(libname)" in
|
|
if path' = path && libname = libname' then
|
|
Printf.printf "Resource.matchit %S %S OK\n%!" str y
|
|
else begin
|
|
Printf.printf "Resource.matchit %S %S FAIL\n%!" str y;
|
|
exit 1
|
|
end
|
|
| None ->
|
|
begin
|
|
Printf.printf "Resource.matchit %S %S = None FAIL\n%!" str y;
|
|
exit 1
|
|
end
|
|
end yes;
|
|
List.iter begin fun y ->
|
|
let resource' = Resource.import y in
|
|
if Resource.matchit resource resource' = None then
|
|
Printf.printf "Resource.matchit %S %S = None OK\n%!" str y
|
|
else begin
|
|
Printf.printf "Resource.matchit %S %S <> None FAIL\n%!" str y;
|
|
exit 1
|
|
end
|
|
end no
|
|
done
|
|
end tests3
|
|
;;
|