1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52
|
(* TEST
native;
*)
(** Test that the right message errors are emitted by Arg *)
let usage= "Arg module testing"
let test total i (spec,anon,argv) =
let argv = Array.of_list ("testerror" :: argv) in
try Arg.parse_argv ~current:(ref 0) argv spec anon usage with
| Arg.Bad s-> Printf.printf "(%d/%d) Bad:\n%s\n" (i+1) total s
| Arg.Help s -> Printf.printf "(%d/%d) Help:\n%s\n" (i+1) total s
let tests = [
(** missing argument error *)
["-s", Arg.String ignore, "missing arg"], ignore, ["-s"]
(** No argument expected *)
; ["-set", Arg.Set (ref false), "no argument expected"], ignore, ["-set=true"]
(** help message *)
; [], ignore, ["-help" ]
(** wrong argument type *)
; ["-int", Arg.Int ignore, "wrong argument type" ], ignore,
["-int"; "not_an_int" ]
(** unknown option *)
; [], ignore, [ "-an-unknown-option" ]
(** user-error in anon fun *)
; [], (fun _ -> raise @@ Arg.Bad("User-raised error")), [ "argument" ]
(** user-error in anon fun *)
; ["-error",
Arg.Unit (fun () -> raise @@ Arg.Bad("User-raised error bis")),
"user raised error"]
, ignore, [ "-error" ]
(* bad keyword in various places*)
; [ "-rest", Arg.Rest ignore, "help"], ignore, [ "-rest=1" ]
; [ "-tuple", Arg.Tuple [Arg.Int print_int; Arg.Int print_int ], "help" ]
, ignore, [ "-tuple=1" ]
; [ "-unit", Arg.Unit ignore, "" ], ignore, [ "-unit=1" ]
]
let () =
let n = List.length tests in
List.iteri (test n) tests
|