Pino Toscano
2015-Jan-23 10:23 UTC
[Libguestfs] [PATCH 1/2] mllib: tests: add tests for string_lines_split
--- mllib/common_utils_tests.ml | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/mllib/common_utils_tests.ml b/mllib/common_utils_tests.ml index 09d5c51..283e9a1 100644 --- a/mllib/common_utils_tests.ml +++ b/mllib/common_utils_tests.ml @@ -27,6 +27,7 @@ let prog = "common_utils_tests" let assert_equal_string = assert_equal ~printer:(fun x -> x) let assert_equal_int = assert_equal ~printer:(fun x -> string_of_int x) let assert_equal_int64 = assert_equal ~printer:(fun x -> Int64.to_string x) +let assert_equal_stringlist = assert_equal ~printer:(fun x -> "(" ^ (String.escaped (String.concat "," x)) ^ ")") (* Test Common_utils.int_of_le32 and Common_utils.le32_of_int. *) let test_le32 () @@ -110,6 +111,22 @@ let test_string_find () assert_equal_int (-1) (string_find "" "baz"); assert_equal_int (-1) (string_find "foobar" "baz") +(* Test Common_utils.string_lines_split. *) +let test_string_lines_split () + assert_equal_stringlist [""] (string_lines_split ""); + assert_equal_stringlist ["A"] (string_lines_split "A"); + assert_equal_stringlist ["A"; ""] (string_lines_split "A\n"); + assert_equal_stringlist ["A"; "B"] (string_lines_split "A\nB"); + assert_equal_stringlist ["A"; "B"; "C"] (string_lines_split "A\nB\nC"); + assert_equal_stringlist ["A"; "B"; "C"; "D"] (string_lines_split "A\nB\nC\nD"); + assert_equal_stringlist ["A\n"] (string_lines_split "A\\"); + assert_equal_stringlist ["A\nB"] (string_lines_split "A\\\nB"); + assert_equal_stringlist ["A"; "B\nC"] (string_lines_split "A\nB\\\nC"); + assert_equal_stringlist ["A"; "B\nC"; "D"] (string_lines_split "A\nB\\\nC\nD"); + assert_equal_stringlist ["A"; "B\nC\nD"] (string_lines_split "A\nB\\\nC\\\nD"); + assert_equal_stringlist ["A\nB"; ""] (string_lines_split "A\\\nB\n"); + assert_equal_stringlist ["A\nB\n"] (string_lines_split "A\\\nB\\\n") + (* Suites declaration. *) let suite TestList ([ @@ -124,6 +141,7 @@ let suite "prefix" >:: test_string_prefix; "suffix" >:: test_string_suffix; "find" >:: test_string_find; + "string_lines_split" >:: test_string_lines_split; ]; ]) -- 1.9.3
Pino Toscano
2015-Jan-23 10:24 UTC
[Libguestfs] [PATCH 2/2] mllib: add simple tests for the JSON module
--- .gitignore | 1 + mllib/JSON_tests.ml | 245 ++++++++++++++++++++++++++++++++++++++++++++++++++++ mllib/Makefile.am | 15 +++- po/POTFILES-ml | 1 + 4 files changed, 260 insertions(+), 2 deletions(-) create mode 100644 mllib/JSON_tests.ml diff --git a/.gitignore b/.gitignore index 4c1b90c..441cb83 100644 --- a/.gitignore +++ b/.gitignore @@ -308,6 +308,7 @@ Makefile.in /mllib/common_utils_tests /mllib/config.ml /mllib/dummy +/mllib/JSON_tests /mllib/libdir.ml /mllib/link.sh /ocaml/bindtests.bc diff --git a/mllib/JSON_tests.ml b/mllib/JSON_tests.ml new file mode 100644 index 0000000..ea91f7d --- /dev/null +++ b/mllib/JSON_tests.ml @@ -0,0 +1,245 @@ +(* mllib + * Copyright (C) 2015 Red Hat Inc. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + *) + +(* This file tests the JSON module. *) + +open OUnit + +(* Utils. *) +let assert_equal_string = assert_equal ~printer:(fun x -> x) + +(* "basic" suite. *) +let test_empty () + let doc = [] in + assert_equal_string "{}" (JSON.string_of_doc doc); + assert_equal_string "{ +}" (JSON.string_of_doc ~fmt:JSON.Indented doc) + +let test_string () + let doc = [ "test_string", JSON.String "foo"; ] in + assert_equal_string "{ \"test_string\": \"foo\" }" + (JSON.string_of_doc doc); + assert_equal_string "{ + \"test_string\": \"foo\" +}" + (JSON.string_of_doc ~fmt:JSON.Indented doc) + +let test_bool () + let doc = [ "test_true", JSON.Bool true; + "test_false", JSON.Bool false ] in + assert_equal_string + "{ \"test_true\": true, \"test_false\": false }" + (JSON.string_of_doc doc); + assert_equal_string + "{ + \"test_true\": true, + \"test_false\": false +}" + (JSON.string_of_doc ~fmt:JSON.Indented doc) + +let test_int () + let doc = [ "test_zero", JSON.Int 0; + "test_pos", JSON.Int 5; + "test_neg", JSON.Int (-5); + "test_pos64", JSON.Int64 (Int64.of_int 10); + "test_neg64", JSON.Int64 (Int64.of_int (-10)); ] in + assert_equal_string + "{ \"test_zero\": 0, \"test_pos\": 5, \"test_neg\": -5, \"test_pos64\": 10, \"test_neg64\": -10 }" + (JSON.string_of_doc doc); + assert_equal_string + "{ + \"test_zero\": 0, + \"test_pos\": 5, + \"test_neg\": -5, + \"test_pos64\": 10, + \"test_neg64\": -10 +}" + (JSON.string_of_doc ~fmt:JSON.Indented doc) + +let test_list () + let doc = [ "item", JSON.List [ JSON.String "foo"; JSON.Int 10; JSON.Bool true ] ] in + assert_equal_string + "{ \"item\": [ \"foo\", 10, true ] }" + (JSON.string_of_doc doc); + assert_equal_string + "{ + \"item\": [ + \"foo\", + 10, + true + ] +}" + (JSON.string_of_doc ~fmt:JSON.Indented doc) + +let test_nested_dict () + let doc = [ + "item", JSON.Dict [ "int", JSON.Int 5; "string", JSON.String "foo"; ]; + "last", JSON.Int 10; + ] in + assert_equal_string + "{ \"item\": { \"int\": 5, \"string\": \"foo\" }, \"last\": 10 }" + (JSON.string_of_doc doc); + assert_equal_string + "{ + \"item\": { + \"int\": 5, + \"string\": \"foo\" + }, + \"last\": 10 +}" + (JSON.string_of_doc ~fmt:JSON.Indented doc) + +let test_nested_nested_dict () + let doc = [ + "item", JSON.Dict [ "int", JSON.Int 5; + "item2", JSON.Dict [ "int", JSON.Int 0; ]; + ]; + "last", JSON.Int 10; + ] in + assert_equal_string + "{ \"item\": { \"int\": 5, \"item2\": { \"int\": 0 } }, \"last\": 10 }" + (JSON.string_of_doc doc); + assert_equal_string + "{ + \"item\": { + \"int\": 5, + \"item2\": { + \"int\": 0 + } + }, + \"last\": 10 +}" + (JSON.string_of_doc ~fmt:JSON.Indented doc) + +let test_escape () + let doc = [ "test_string", JSON.String "test \" ' \n \b \r \t"; ] in + assert_equal_string "{ \"test_string\": \"test \\\" ' \\n \\b \\r \\t\" }" + (JSON.string_of_doc doc); + assert_equal_string "{ + \"test_string\": \"test \\\" ' \\n \\b \\r \\t\" +}" + (JSON.string_of_doc ~fmt:JSON.Indented doc) + +(* "examples" suite. *) +let test_qemu () + let doc = [ + "file.driver", JSON.String "https"; + "file.url", JSON.String "https://libguestfs.org"; + "file.timeout", JSON.Int 60; + "file.readahead", JSON.Int (64 * 1024 * 1024); + ] in + assert_equal_string + "{ \"file.driver\": \"https\", \"file.url\": \"https://libguestfs.org\", \"file.timeout\": 60, \"file.readahead\": 67108864 }" + (JSON.string_of_doc doc); + assert_equal_string + "{ + \"file.driver\": \"https\", + \"file.url\": \"https://libguestfs.org\", + \"file.timeout\": 60, + \"file.readahead\": 67108864 +}" + (JSON.string_of_doc ~fmt:JSON.Indented doc) + +let test_builder () + let doc = [ + "version", JSON.Int 1; + "sources", JSON.List [ + JSON.Dict [ + "uri", JSON.String "http://libguestfs.org/index"; + ]; + ]; + "templates", JSON.List [ + JSON.Dict [ + "os-version", JSON.String "phony-debian"; + "full-name", JSON.String "Phony Debian"; + "arch", JSON.String "x86_64"; + "size", JSON.Int64 (Int64.of_int 536870912); + "notes", JSON.Dict [ + "C", JSON.String "Phony Debian look-alike used for testing."; + ]; + "hidden", JSON.Bool false; + ]; + JSON.Dict [ + "os-version", JSON.String "phony-fedora"; + "full-name", JSON.String "Phony Fedora"; + "arch", JSON.String "x86_64"; + "size", JSON.Int64 (Int64.of_int 1073741824); + "notes", JSON.Dict [ + "C", JSON.String "Phony Fedora look-alike used for testing."; + ]; + "hidden", JSON.Bool false; + ]; + ]; + ] in + assert_equal_string + "{ + \"version\": 1, + \"sources\": [ + { + \"uri\": \"http://libguestfs.org/index\" + } + ], + \"templates\": [ + { + \"os-version\": \"phony-debian\", + \"full-name\": \"Phony Debian\", + \"arch\": \"x86_64\", + \"size\": 536870912, + \"notes\": { + \"C\": \"Phony Debian look-alike used for testing.\" + }, + \"hidden\": false + }, + { + \"os-version\": \"phony-fedora\", + \"full-name\": \"Phony Fedora\", + \"arch\": \"x86_64\", + \"size\": 1073741824, + \"notes\": { + \"C\": \"Phony Fedora look-alike used for testing.\" + }, + \"hidden\": false + } + ] +}" + (JSON.string_of_doc ~fmt:JSON.Indented doc) + +(* Suites declaration. *) +let suite + TestList ([ + "basic" >::: [ + "empty" >:: test_empty; + "string" >:: test_string; + "bool" >:: test_bool; + "int" >:: test_int; + "list" >:: test_list; + "nested dict" >:: test_nested_dict; + "nested nested dict" >:: test_nested_nested_dict; + "escape" >:: test_escape; + ]; + "examples" >::: [ + "qemu" >:: test_qemu; + "virt-builder" >:: test_builder; + ]; + ]) + +let _ + run_test_tt_main suite + +let () + Printf.fprintf stderr "\n" diff --git a/mllib/Makefile.am b/mllib/Makefile.am index 7b4da0f..96d1e35 100644 --- a/mllib/Makefile.am +++ b/mllib/Makefile.am @@ -21,7 +21,8 @@ EXTRA_DIST = \ $(SOURCES_MLI) \ $(filter-out config.ml libdir.ml,$(SOURCES_ML)) \ $(SOURCES_C) \ - common_utils_tests.ml + common_utils_tests.ml \ + JSON_tests.ml CLEANFILES = *~ *.annot *.cmi *.cmo *.cmx *.cmxa *.o @@ -139,11 +140,21 @@ common_utils_tests.cmx: OCAMLPACKAGES += $(OCAMLPACKAGES_TESTS) common_utils_tests: common_gettext.cmx common_utils.cmx common_utils_tests.cmx $(OCAMLFIND) ocamlopt $(OCAMLFLAGS) $(OCAMLPACKAGES) $(OCAMLPACKAGES_TESTS) \ mlguestfs.cmxa -linkpkg $^ -cclib '$(LIBTINFO_LIBS)' -o $@ + +JSON_tests.cmx: OCAMLPACKAGES += $(OCAMLPACKAGES_TESTS) +JSON_tests: JSON.cmx JSON_tests.cmx + $(OCAMLFIND) ocamlopt $(OCAMLFLAGS) $(OCAMLPACKAGES) $(OCAMLPACKAGES_TESTS) \ + mlguestfs.cmxa -linkpkg $^ -cclib '$(LIBTINFO_LIBS)' -o $@ else common_utils_tests.cmo: OCAMLPACKAGES += $(OCAMLPACKAGES_TESTS) common_utils_tests: common_gettext.cmo common_utils.cmo common_utils_tests.cmo $(OCAMLFIND) ocamlc $(OCAMLFLAGS) $(OCAMLPACKAGES) $(OCAMLPACKAGES_TESTS) \ mlguestfs.cma -linkpkg $^ -cclib '$(LIBTINFO_LIBS)' -custom -o $@ + +JSON_tests.cmo: OCAMLPACKAGES += $(OCAMLPACKAGES_TESTS) +JSON_tests: JSON.cmo JSON_tests.cmo + $(OCAMLFIND) ocamlc $(OCAMLFLAGS) $(OCAMLPACKAGES) $(OCAMLPACKAGES_TESTS) \ + mlguestfs.cma -linkpkg $^ -cclib '$(LIBTINFO_LIBS)' -custom -o $@ endif TESTS_ENVIRONMENT = $(top_builddir)/run --test @@ -151,7 +162,7 @@ TESTS_ENVIRONMENT = $(top_builddir)/run --test TESTS if HAVE_OCAML_PKG_OUNIT -TESTS += common_utils_tests +TESTS += common_utils_tests JSON_tests endif check-valgrind: diff --git a/po/POTFILES-ml b/po/POTFILES-ml index 4ebcc09..6a0acdd 100644 --- a/po/POTFILES-ml +++ b/po/POTFILES-ml @@ -29,6 +29,7 @@ customize/ssh_key.ml customize/timezone.ml customize/urandom.ml mllib/JSON.ml +mllib/JSON_tests.ml mllib/common_gettext.ml mllib/common_utils.ml mllib/common_utils_tests.ml -- 1.9.3
Richard W.M. Jones
2015-Jan-23 12:35 UTC
Re: [Libguestfs] [PATCH 2/2] mllib: add simple tests for the JSON module
ACK series. Rich. -- Richard Jones, Virtualization Group, Red Hat http://people.redhat.com/~rjones Read my programming and virtualization blog: http://rwmj.wordpress.com virt-builder quickly builds VMs from scratch http://libguestfs.org/virt-builder.1.html
Possibly Parallel Threads
- [PATCH 0/4] mltools: JSON unification
- [PATCH 1/2] mllib: Require OUnit2 for tests.
- [PATCH 2/2] mllib: add simple tests for the JSON module
- [PATCH v3 4/4] v2v: Add --print-estimate option to print copy size
- Re: [PATCH 3/5] mltools: add simple tests for external_command