mte/unikernel/duniverse/mirage-bootvar/test/test.ml

72 lines
2.3 KiB
OCaml
Raw Normal View History

2025-11-11 02:07:51 +01:00
(*
* Copyright (c) 2016 Citrix Systems Inc
*
* Permission to use, copy, modify, and distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
* copyright notice and this permission notice appear in all copies.
*
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*
*)
open OUnit
let verbose = ref false
let log =
Printf.ksprintf (fun s -> if !verbose then Printf.fprintf stdout "%s\n%!" s)
let tests =
[
("foo bar baz", [ "foo"; "bar"; "baz" ]);
({|foo "bar" baz|}, [ "foo"; "bar"; "baz" ]);
({|f\ oo b\"r baz|}, [ "f oo"; "b\"r"; "baz" ]);
({|foo bar"bie"boo baz|}, [ "foo"; "barbieboo"; "baz" ]);
({|foo "bar baz"|}, [ "foo"; "bar baz" ]);
({|foo bar\ baz|}, [ "foo"; "bar baz" ]);
(" ", []);
]
let test_parse () =
let tostr l =
String.concat "," (List.map (fun x -> Printf.sprintf "'%s'" x) l)
in
List.iter
(fun (input, expected) ->
log "checking '%s'" input;
match Mirage_bootvar_parse_argv.parse input with
| Error e ->
Printf.eprintf "Error - failed to parse: %s (input %s) " e input
| Ok l ->
if l <> expected then
Printf.fprintf stderr
"Error - failed to parse. Got:\n%s\nExpected\n%s\n" (tostr l)
(tostr expected);
assert (l = expected))
tests
let negative_test () =
let str = " \\" in
log "Testing parse of %s (should fail)" str;
match Mirage_bootvar_parse_argv.parse str with
| Ok _ -> assert false
| Error _ -> ()
let _ =
Arg.parse
[ ("-verbose", Arg.Unit (fun _ -> verbose := true), "Run in verbose mode") ]
(fun x -> Printf.fprintf stderr "Ignoring argument: %s" x)
"Test argv parser";
let suite =
"parser"
>::: [ "test parse" >:: test_parse; "negative test" >:: negative_test ]
in
run_test_tt ~verbose:!verbose suite