summaryrefslogtreecommitdiff
path: root/ocamltest/main.ml
diff options
context:
space:
mode:
Diffstat (limited to 'ocamltest/main.ml')
-rw-r--r--ocamltest/main.ml32
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