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
|
val tests = [
"\"hello\\\"",
"c:\\foo.bah",
"",
"hi\\",
"hi\"",
"evil\narg",
"evil\targ",
"evil arg",
"evil\rarg",
"evil\farg",
"\"bar\\",
"\\bah",
"bah \\bar",
"bah\\bar",
"bah\\\\",
"ba h\\\\",
"holy\"smoke",
"holy \"smoke" ]
val cmd = CommandLine.name ()
val args = CommandLine.arguments ()
fun loop ([], []) = print "OK!\n"
| loop (x::r, y::s) =
(if x <> y then print ("FAIL: "^x^":"^y^"\n") else (); loop (r, s))
| loop (_, _) = print "Wrong argument count\n"
open Posix.Process
open MLton.Process
val () =
if List.length args = 0
then let
val pid = spawn {path = cmd, args = cmd::tests}
val status = waitpid (W_CHILD pid, [])
in
()
end
else loop (tests, args)
|