aboutsummaryrefslogtreecommitdiff
path: root/test/test_parser.ml
blob: c677869935b7ad3554e24a4ee8943055b58ce4b3 (plain)
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
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: id _uuidv4"
  ; ( "Can parse multiple tables"
    , `Quick
    , test_parse "user: id _uuidv4\npurchases: id _uuidv4" )
  ; "Resolves conflicting names", `Quick, test_parse "purchases: name _uuidv4"
  ; "Supports names", `Quick, test_parse "purchases: name _name"
  ]


let relations_suite =
  [ ( "Can reference other tables"
    , `Quick
    , test_parse "user: id _uuidv4\npurchases: id _uuidv4, userid user.id" )
  ; ( "Can use ; as a separator"
    , `Quick
    , test_parse "user: id _uuidv4; purchases: id _uuidv4" )
  ; ( "Supports multiple newlines"
    , `Quick
    , test_parse "user: id _uuidv4\n\n\n\n\npurchases: id _uuidv4" )
  ]


let () = Alcotest.run "Parsing" [ "Rows", rows_suite; "Relations", relations_suite ]