diff options
-rw-r--r-- | src/util.ml | 11 | ||||
-rw-r--r-- | src/util.mli | 2 | ||||
-rw-r--r-- | test/util_test.ml | 27 |
3 files changed, 40 insertions, 0 deletions
diff --git a/src/util.ml b/src/util.ml index 33c90a2..141d25b 100644 --- a/src/util.ml +++ b/src/util.ml @@ -9,3 +9,14 @@ let find_xml_child name xml = match xml with | Xml.Element (_, _, children) -> List.find find_aux children | Xml.PCData _ -> raise Not_found + +(* Dirty pretty printer *) +let string_of_path path = + let rec aux xs acc = + match xs with + | [] -> acc + | x :: xs' -> aux xs' (Printf.sprintf "%s %s" acc x) + in + match path with + | [] -> "[]" + | x :: xs -> Printf.sprintf "[%s%s]" x (aux xs "") diff --git a/src/util.mli b/src/util.mli index e4ced4f..f3699d3 100644 --- a/src/util.mli +++ b/src/util.mli @@ -1 +1,3 @@ val find_xml_child : string -> Xml.xml -> Xml.xml + +val string_of_path : string list -> string diff --git a/test/util_test.ml b/test/util_test.ml new file mode 100644 index 0000000..ecc4b49 --- /dev/null +++ b/test/util_test.ml @@ -0,0 +1,27 @@ +open OUnit2 +open Util + +let test_find_xml_child_existent test_ctxt = + let elem = Xml.Element ("foo", [], + [Xml.Element ("bar", [], []); + Xml.PCData "baz"]) + in assert_equal (Xml.tag (find_xml_child "bar" elem)) "bar" + +let test_find_xml_child_nonexistent test_ctxt = + let elem = Xml.Element ("foo", [], [Xml.Element ("quux", [], [])]) in + assert_raises Not_found (fun () -> find_xml_child "bar" elem) + +let test_string_of_path test_ctxt = + let path = ["foo"; "bar"; "baz"] in + assert_equal (string_of_path path) "[foo bar baz]" + +let suite = + "Util tests" >::: [ + "test_find_xml_child_existent" >:: test_find_xml_child_existent; + "test_find_xml_child_nonexistent" >:: test_find_xml_child_nonexistent; + "test_string_of_path" >:: test_string_of_path; + ] + +let () = + run_test_tt_main suite + |