diff options
| author | Daniil Baturin <daniil@baturin.org> | 2015-04-15 17:57:34 +0600 |
|---|---|---|
| committer | Daniil Baturin <daniil@baturin.org> | 2015-04-15 17:57:34 +0600 |
| commit | f9aad533ee80268a5acac34179098a097968a48d (patch) | |
| tree | 9bb08fe59b3a53ff45d73992affe55469cb80133 | |
| parent | b6de92f819638538fb646c0d4096cb2f01a939d3 (diff) | |
| download | vyconf-f9aad533ee80268a5acac34179098a097968a48d.tar.gz vyconf-f9aad533ee80268a5acac34179098a097968a48d.zip | |
Add value validator module.
| -rw-r--r-- | _oasis | 14 | ||||
| -rw-r--r-- | src/value_checker.ml | 18 | ||||
| -rw-r--r-- | src/value_checker.mli | 5 | ||||
| -rw-r--r-- | test/value_checker_test.ml | 45 |
4 files changed, 82 insertions, 0 deletions
@@ -48,6 +48,14 @@ Executable "vylist_test" Install: false BuildDepends: oUnit, vyconf +Executable "value_checker_test" + Path: test + MainIs: value_checker_test.ml + Build$: flag(tests) + CompiledObject: best + Install: false + BuildDepends: oUnit, pcre, vyconf + Test "vyconf_tree_test" Run$: flag(tests) TestTools: vyconf_tree_test @@ -59,3 +67,9 @@ Test "vylist_test" TestTools: vylist_test Command: $vylist_test WorkingDirectory: test + +Test "value_checker_test" + Run$: flag(tests) + TestTools: value_checker_test + Command: $value_checker_test + WorkingDirectory: test diff --git a/src/value_checker.ml b/src/value_checker.ml new file mode 100644 index 0000000..ed7c5d1 --- /dev/null +++ b/src/value_checker.ml @@ -0,0 +1,18 @@ +type value_constraint = Regex of string | External of string * string + +exception Bad_validator of string + +let validate_value validators value_constraint value = + match value_constraint with + | Regex s -> + (try + let _ = Pcre.exec ~pat:s value in true + with Not_found -> false) + | External (t, c) -> + try + let validator = Hashtbl.find validators t in + let result = Unix.system (Printf.sprintf "%s %s %s" validator c value) in + match result with + | Unix.WEXITED 0 -> true + | _ -> false + with Not_found -> raise (Bad_validator t) diff --git a/src/value_checker.mli b/src/value_checker.mli new file mode 100644 index 0000000..96d8f3c --- /dev/null +++ b/src/value_checker.mli @@ -0,0 +1,5 @@ +type value_constraint = Regex of string | External of string * string + +exception Bad_validator of string + +val validate_value : (string, string) Hashtbl.t -> value_constraint -> string -> bool diff --git a/test/value_checker_test.ml b/test/value_checker_test.ml new file mode 100644 index 0000000..f7161f2 --- /dev/null +++ b/test/value_checker_test.ml @@ -0,0 +1,45 @@ +open OUnit2 +open Value_checker + +let validators = Hashtbl.create 256 +let () = Hashtbl.add validators "anything" "true"; + Hashtbl.add validators "nothing" "false" + +let test_check_regex_valid test_ctxt = + let c = Regex "[a-z]+" in + let v = "fgsfds" in + assert_equal (validate_value validators c v) true + +let test_check_regex_invalid test_ctxt = + let c = Regex "[a-z]+" in + let v = "FGSFDS" in + assert_equal (validate_value validators c v) false + +let test_check_external_valid test_ctxt = + let c = External ("anything", "") in + let v = "fgsfds" in + assert_equal (validate_value validators c v) true + +let test_check_external_invalid test_ctxt = + let c = External ("nothing", "") in + let v = "fgsfds" in + assert_equal (validate_value validators c v) false + +let test_check_external_bad_validator test_ctxt = + let c = External ("invalid", "") in + let v = "fgsfds" in + assert_raises (Bad_validator "invalid") (fun () -> validate_value validators c v) + + +let suite = + "VyConf value checker tests" >::: [ + "test_check_regex_valid" >:: test_check_regex_valid; + "test_check_regex_invalid" >:: test_check_regex_invalid; + "test_check_external_valid" >:: test_check_external_valid; + "test_check_external_invalid" >:: test_check_external_invalid; + "test_check_external_bad_validator" >:: test_check_external_bad_validator; + ] + +let () = + run_test_tt_main suite + |
