open Alcotest open Fixgen let parse (s : string) = let lexbuf = Lexing.from_string s in let ast = Parser.prog Lexer.read lexbuf in ast let test_parse s () = let ast = parse s in check bool "Parses" (Option.is_some ast) true let rows_suite = [ "Can parse uuidv4", `Quick, test_parse "user (1): id _uuidv4" ; ( "Can parse multiple tables" , `Quick , test_parse "user (1): id _uuidv4\npurchases (1): id _uuidv4" ) ; "Supports names", `Quick, test_parse "purchases (1): name _name" ; "Supports const", `Quick, test_parse "purchases (1): name \"hello\"" ; "Supports ints with min/max", `Quick, test_parse "purchases (1): name _int(1,20)" ; ( "Supports a list of potential values" , `Quick , test_parse "purchases (1): name (\"a\",\"b\",\"c\")" ) ; ( "Supports setting amount of fixture to generate" , `Quick , test_parse "purchases (5): name _int(1,20)" ) ] let relations_suite = [ ( "Can reference other tables" , `Quick , test_parse "user (2): id _uuidv4\npurchases (3): id _uuidv4, userid user.id" ) ; ( "Can use ; as a separator" , `Quick , test_parse "user (2): id _uuidv4; purchases (5): id _uuidv4" ) ; ( "Supports multiple newlines" , `Quick , test_parse "user (2): id _uuidv4\n\n\n\n\npurchases (5): id _uuidv4" ) ] let () = Alcotest.run "Parsing" [ "Rows", rows_suite; "Relations", relations_suite ]