(* Testglob *) open Bool;; open Glob;; let yep f x = try ignore (f x); true with | _ -> false ;; let tests1 = [ "\"hello\"", true; "", true; "", true; " and or ", true; " 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"], ["helli"]; "\"hello\"", ["hello"], ["heidi"]; "<*>", ["";"a";"ax"], []; "", ["ab";"acb";"axxxxxb";"ababbababb"], ["abx";"xxxxxab";"xab"]; "<*.ml>", ["hello.ml";".ml"], ["ml"; ""; "toto.mli"]; "", ["a"], ["";"aa";"ba";"ab";"abaa"]; "", ["ab"], ["";"abab";"aba";"abx"]; "", ["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"]; "", ["bxx";"bx"], ["aaab";""]; "<*>", ["";"a";"aaa";"aaaaa"], []; "", ["a"],["";"aaa";"aaaaa"]; "<{a,b}>", ["a";"b"],["";"aa";"ab";"ba";"bb";"c"]; "", ["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/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/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 ;;