summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/util.ml11
-rw-r--r--src/util.mli2
-rw-r--r--test/util_test.ml27
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
+