diff options
Diffstat (limited to 'ocamltest/main.ml')
-rw-r--r-- | ocamltest/main.ml | 32 |
1 files changed, 22 insertions, 10 deletions
diff --git a/ocamltest/main.ml b/ocamltest/main.ml index ae49bacd09..f0643e56b6 100644 --- a/ocamltest/main.ml +++ b/ocamltest/main.ml @@ -29,23 +29,29 @@ let announce_test_error test_filename error = Printf.printf " ... testing '%s' => unexpected error (%s)\n%!" (Filename.basename test_filename) error -let tsl_block_of_file test_filename = +exception Syntax_error of Lexing.position + +let tsl_parse_file test_filename = let input_channel = open_in test_filename in let lexbuf = Lexing.from_channel input_channel in Location.init lexbuf test_filename; - match Tsl_parser.tsl_block Tsl_lexer.token lexbuf with + match Tsl_parser.tsl_script Tsl_lexer.token lexbuf with + | exception Parsing.Parse_error -> + raise (Syntax_error lexbuf.Lexing.lex_start_p) | exception e -> close_in input_channel; raise e | _ as tsl_block -> close_in input_channel; tsl_block -let tsl_block_of_file_safe test_filename = - try tsl_block_of_file test_filename with +let tsl_parse_file_safe test_filename = + try tsl_parse_file test_filename with | Sys_error message -> Printf.eprintf "%s\n%!" message; announce_test_error test_filename message; exit 1 - | Parsing.Parse_error -> - Printf.eprintf "Could not read test block in %s\n%!" test_filename; - announce_test_error test_filename "could not read test block"; + | Syntax_error p -> + let open Lexing in + Printf.eprintf "%s:%d.%d: syntax error in test script\n%!" + test_filename p.pos_lnum (p.pos_cnum - p.pos_bol); + announce_test_error test_filename "could not read test script"; exit 1 let print_usage () = @@ -115,8 +121,8 @@ let init_tests_to_skip () = let test_file test_filename = let start = if Options.show_timings then Unix.gettimeofday () else 0.0 in let skip_test = List.mem test_filename !tests_to_skip in - let tsl_block = tsl_block_of_file_safe test_filename in - let (rootenv_statements, test_trees) = test_trees_of_tsl_block tsl_block in + let tsl_ast = tsl_parse_file_safe test_filename in + let (rootenv_statements, test_trees) = test_trees_of_tsl_ast tsl_ast in let test_trees = match test_trees with | [] -> let default_tests = Tests.default_tests() in @@ -263,6 +269,12 @@ let () = let doit f x = work_done := true; f x in List.iter (doit find_test_dirs) Options.find_test_dirs; List.iter (doit list_tests) Options.list_tests; - List.iter (doit test_file) Options.files_to_test; + let do_file = + if Options.translate then + Translate.file ~style:Options.style ~compact:Options.compact + else + test_file + in + List.iter (doit do_file) Options.files_to_test; if not !work_done then print_usage(); if !failed || not !work_done then exit 1 |