summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/vytree.ml4
-rw-r--r--src/vytree.mli2
-rw-r--r--test/vyconf_tree_test.ml15
3 files changed, 21 insertions, 0 deletions
diff --git a/src/vytree.ml b/src/vytree.ml
index 3177e24..ed5efd2 100644
--- a/src/vytree.ml
+++ b/src/vytree.ml
@@ -93,6 +93,10 @@ let rec get node path =
| [name] -> find_or_fail node name
| name :: names -> get (find_or_fail node name) names
+let exists node path =
+ try ignore (get node path); true
+ with Nonexistent_path -> false
+
let get_existent_path node path =
let rec aux node path acc =
match path with
diff --git a/src/vytree.mli b/src/vytree.mli
index 4f57a0e..4b52727 100644
--- a/src/vytree.mli
+++ b/src/vytree.mli
@@ -30,3 +30,5 @@ val list_children : 'a t -> string list
val get : 'a t -> string list -> 'a t
val get_existent_path : 'a t -> string list -> string list
+
+val exists : 'a t -> string list -> bool
diff --git a/test/vyconf_tree_test.ml b/test/vyconf_tree_test.ml
index 2aa100e..24a6d1e 100644
--- a/test/vyconf_tree_test.ml
+++ b/test/vyconf_tree_test.ml
@@ -106,6 +106,19 @@ let test_get_existent_path test_ctxt =
let node = insert node ["foo"; "bar"] () in
assert_equal (get_existent_path node ["foo"; "bar"; "baz"]) ["foo"; "bar"]
+let test_exists_existent test_ctxt =
+ let node = make () "root" in
+ let node = insert node ["foo"] () in
+ let node = insert node ["foo"; "bar"] () in
+ assert_equal (exists node ["foo"; "bar"]) true
+
+let test_exists_nonexistent test_ctxt =
+ let node = make () "root" in
+ let node = insert node ["foo"] () in
+ let node = insert node ["foo"; "bar"] () in
+ assert_equal (exists node ["foo"; "bar"; "baz"]) false
+
+
let suite =
"VyConf tree tests" >::: [
"test_make_node" >:: test_make_node;
@@ -122,6 +135,8 @@ let suite =
"test_get_child_nonexistent" >:: test_get_child_nonexistent;
"test_update" >:: test_update;
"test_get_existent_path" >:: test_get_existent_path;
+ "test_exists_existent" >:: test_exists_existent;
+ "test_exists_nonexistent" >:: test_exists_nonexistent;
]
let () =