115 lines
2.9 KiB
OCaml
115 lines
2.9 KiB
OCaml
open Scfg
|
|
|
|
(** Testing other functions in Parse module. *)
|
|
let () =
|
|
let chan = open_in "test_chan.scfg" in
|
|
match Parse.from_channel chan with
|
|
| Error _e -> assert false
|
|
| Ok config ->
|
|
let expected = "a b c" in
|
|
let s = Format.asprintf "%a" Pp.config config in
|
|
assert (s = expected)
|
|
|
|
let () =
|
|
let s = {|a b c|} in
|
|
match Parse.from_string s with
|
|
| Error (`Msg e) ->
|
|
Format.eprintf "ERROR: %s@\n" e;
|
|
assert false
|
|
| Ok config ->
|
|
let expected = {|a b c|} in
|
|
let s = Format.asprintf "%a" Pp.config config in
|
|
assert (s = expected)
|
|
|
|
(** Testing queries. *)
|
|
let file =
|
|
match Fpath.of_string "query.scfg" with
|
|
| Error _e -> assert false
|
|
| Ok file -> file
|
|
|
|
let () =
|
|
let config =
|
|
match Parse.from_file file with
|
|
| Error _e -> assert false
|
|
| Ok config -> config
|
|
in
|
|
assert (List.length config = 5);
|
|
let n1 = Query.get_dirs "n1" config in
|
|
assert (List.length n1 = 2);
|
|
let n11 = Query.get_dir "n1" n1 in
|
|
let n11 = match n11 with None -> assert false | Some n11 -> n11 in
|
|
let n12 =
|
|
match Query.get_dir "n1.2" n11.children with
|
|
| None -> assert false
|
|
| Some n12 -> n12
|
|
in
|
|
let pn12 =
|
|
match Query.get_params 2 n12 with
|
|
| Error _e -> assert false
|
|
| Ok pn12 -> pn12
|
|
in
|
|
assert (pn12 = [ "p1"; "p2" ]);
|
|
begin match Query.get_params 3 n12 with
|
|
| Error (`Msg "directive n1.2: want 3 params, got only 2") -> ()
|
|
| Error _ | Ok _ -> assert false
|
|
end;
|
|
begin match Query.get_param 0 n12 with
|
|
| Error _ -> assert false
|
|
| Ok p -> assert (p = "p1")
|
|
end;
|
|
match Query.get_param 5 n12 with
|
|
| Error (`Msg "directive n1.2: want param at index 5, got only 2") -> ()
|
|
| Error _ | Ok _ -> assert false
|
|
|
|
(** Testing schema. *)
|
|
module Test_schema = struct
|
|
open Schema
|
|
|
|
let rev_string : (string, param) t -> (string, param) t =
|
|
let decode =
|
|
fun s ->
|
|
let len = String.length s in
|
|
let s_rev = String.init len (fun i -> String.get s (len - i - 1)) in
|
|
Ok s_rev
|
|
in
|
|
custom decode
|
|
|
|
let len_string : (string, param) t -> (int, param) t =
|
|
let decode = fun s -> String.length s |> Result.ok in
|
|
custom decode
|
|
|
|
let schema =
|
|
directive "dir" (t3 bool string string)
|
|
(t2
|
|
(directive "dir_1"
|
|
(t2 bool (rev_string string))
|
|
(directive "dir_1_1" nil nil) )
|
|
(directive "dir_2" (t2 string (len_string string)) nil) )
|
|
|
|
let txt =
|
|
Parse.from_string
|
|
{|dir true str1 "str2" {
|
|
dir_1 false naquadah {
|
|
dir_1_1
|
|
}
|
|
dir_2 str3 four
|
|
}|}
|
|
|> Result.get_ok
|
|
|
|
let () =
|
|
let v = conv schema txt |> Result.get_ok in
|
|
assert (
|
|
v
|
|
= { name = "dir"
|
|
; params = (true, "str1", "str2")
|
|
; children =
|
|
( { name = "dir_1"
|
|
; params = (false, "hadauqan")
|
|
; children = { name = "dir_1_1"; params = Nil; children = Nil }
|
|
}
|
|
, { name = "dir_2"; params = ("str3", 4); children = Nil } )
|
|
} );
|
|
()
|
|
end
|
|
|
|
let () = Format.printf "all tests OK! 🐱"
|