From b832feb3894d95a82e88da05bb9fa29c6da26211 Mon Sep 17 00:00:00 2001 From: "Rafael G. Martins" Date: Sun, 1 Jan 2017 18:14:22 +0100 Subject: make: added a bunch of tests --- .gitignore | 3 + Makefile.am | 44 ++ configure.ac | 3 +- src/blogc-make/exec.h | 2 + tests/blogc-make/check_atom.c | 154 ++++++ tests/blogc-make/check_blogc_make.sh.in | 796 ++++++++++++++++++++++++++++++++ tests/blogc-make/check_exec.c | 138 ++++++ 7 files changed, 1139 insertions(+), 1 deletion(-) create mode 100644 tests/blogc-make/check_atom.c create mode 100755 tests/blogc-make/check_blogc_make.sh.in create mode 100644 tests/blogc-make/check_exec.c diff --git a/.gitignore b/.gitignore index 844d416..b6ded60 100644 --- a/.gitignore +++ b/.gitignore @@ -67,6 +67,9 @@ blogc*.html /tests/blogc-git-receiver/check_post_receive.sh /tests/blogc-git-receiver/check_shell_command_parser /tests/blogc-git-receiver/check_shell.sh +/tests/blogc-make/check_atom +/tests/blogc-make/check_blogc_make.sh +/tests/blogc-make/check_exec /tests/blogc-make/check_settings /tests/blogc-runserver/check_httpd_utils /tests/blogc-runserver/check_mime diff --git a/Makefile.am b/Makefile.am index bd69302..7650ccc 100644 --- a/Makefile.am +++ b/Makefile.am @@ -406,6 +406,12 @@ check_SCRIPTS += \ endif endif +if BUILD_MAKE +check_SCRIPTS += \ + tests/blogc-make/check_blogc_make.sh \ + $(NULL) +endif + check_SCRIPTS += \ tests/blogc/check_blogc.sh \ $(NULL) @@ -731,9 +737,47 @@ endif if BUILD_MAKE_LIB check_PROGRAMS += \ + tests/blogc-make/check_atom \ + tests/blogc-make/check_exec \ tests/blogc-make/check_settings \ $(NULL) +tests_blogc_make_check_atom_SOURCES = \ + tests/blogc-make/check_atom.c \ + $(NULL) + +tests_blogc_make_check_atom_CFLAGS = \ + $(CMOCKA_CFLAGS) \ + $(NULL) + +tests_blogc_make_check_atom_LDFLAGS = \ + -no-install \ + $(NULL) + +tests_blogc_make_check_atom_LDADD = \ + $(CMOCKA_LIBS) \ + libblogc_make.la \ + libblogc_common.la \ + $(NULL) + +tests_blogc_make_check_exec_SOURCES = \ + tests/blogc-make/check_exec.c \ + $(NULL) + +tests_blogc_make_check_exec_CFLAGS = \ + $(CMOCKA_CFLAGS) \ + $(NULL) + +tests_blogc_make_check_exec_LDFLAGS = \ + -no-install \ + $(NULL) + +tests_blogc_make_check_exec_LDADD = \ + $(CMOCKA_LIBS) \ + libblogc_make.la \ + libblogc_common.la \ + $(NULL) + tests_blogc_make_check_settings_SOURCES = \ tests/blogc-make/check_settings.c \ $(NULL) diff --git a/configure.ac b/configure.ac index cc08106..0fdbf6a 100644 --- a/configure.ac +++ b/configure.ac @@ -227,7 +227,8 @@ AC_CONFIG_FILES([tests/blogc-git-receiver/check_post_receive.sh], [chmod +x tests/blogc-git-receiver/check_post_receive.sh]) AC_CONFIG_FILES([tests/blogc-git-receiver/check_shell.sh], [chmod +x tests/blogc-git-receiver/check_shell.sh]) - +AC_CONFIG_FILES([tests/blogc-make/check_blogc_make.sh], + [chmod +x tests/blogc-make/check_blogc_make.sh]) AC_OUTPUT AS_ECHO(" diff --git a/src/blogc-make/exec.h b/src/blogc-make/exec.h index ecc7f2c..04bd44e 100644 --- a/src/blogc-make/exec.h +++ b/src/blogc-make/exec.h @@ -9,8 +9,10 @@ #ifndef _MAKE_EXEC_H #define _MAKE_EXEC_H +#include #include "../common/error.h" #include "../common/utils.h" +#include "ctx.h" #include "settings.h" int bm_exec_command(const char *cmd, const char *input, char **output, diff --git a/tests/blogc-make/check_atom.c b/tests/blogc-make/check_atom.c new file mode 100644 index 0000000..cceec23 --- /dev/null +++ b/tests/blogc-make/check_atom.c @@ -0,0 +1,154 @@ +/* + * blogc: A blog compiler. + * Copyright (C) 2015-2016 Rafael G. Martins + * + * This program can be distributed under the terms of the BSD License. + * See the file LICENSE. + */ + +#include +#include +#include +#include + +#include +#include + +#include "../../src/blogc-make/atom.h" +#include "../../src/blogc-make/settings.h" +#include "../../src/common/file.h" +#include "../../src/common/error.h" +#include "../../src/common/utils.h" + + +static void +test_atom_file(void **state) +{ + bm_settings_t *settings = bc_malloc(sizeof(bm_settings_t)); + settings->settings = bc_trie_new(free); + bc_trie_insert(settings->settings, "atom_prefix", bc_strdup("atom")); + bc_trie_insert(settings->settings, "atom_ext", bc_strdup(".xml")); + bc_trie_insert(settings->settings, "post_prefix", bc_strdup("post")); + + bc_error_t *err = NULL; + char *rv = bm_atom_deploy(settings, &err); + + assert_non_null(rv); + assert_null(err); + + size_t cmp_len; + char *cmp = bc_file_get_contents(rv, true, &cmp_len, &err); + + assert_non_null(cmp); + assert_null(err); + + assert_string_equal(cmp, + "\n" + "\n" + " {{ SITE_TITLE }}{% ifdef FILTER_TAG %} - " + "{{ FILTER_TAG }}{% endif %}\n" + " {{ BASE_URL }}/atom{% ifdef FILTER_TAG %}/{{ FILTER_TAG }}" + "{% endif %}.xml\n" + " {{ DATE_FIRST_FORMATTED }}\n" + " \n" + " \n" + " \n" + " {{ AUTHOR_NAME }}\n" + " {{ AUTHOR_EMAIL }}\n" + " \n" + " {{ SITE_TAGLINE }}\n" + " {% block listing %}\n" + " \n" + " {{ TITLE }}\n" + " {{ BASE_URL }}/post/{{ FILENAME }}/\n" + " {{ DATE_FORMATTED }}\n" + " {{ DATE_FORMATTED }}\n" + " \n" + " \n" + " {{ AUTHOR_NAME }}\n" + " {{ AUTHOR_EMAIL }}\n" + " \n" + " \n" + " \n" + " {% endblock %}\n" + "\n"); + + free(cmp); + bm_atom_destroy(rv); + free(rv); + bc_trie_free(settings->settings); + free(settings); +} + + +static void +test_atom_dir(void **state) +{ + bm_settings_t *settings = bc_malloc(sizeof(bm_settings_t)); + settings->settings = bc_trie_new(free); + bc_trie_insert(settings->settings, "atom_prefix", bc_strdup("atom")); + bc_trie_insert(settings->settings, "atom_ext", bc_strdup("/index.xml")); + bc_trie_insert(settings->settings, "post_prefix", bc_strdup("post")); + + bc_error_t *err = NULL; + char *rv = bm_atom_deploy(settings, &err); + + assert_non_null(rv); + assert_null(err); + + size_t cmp_len; + char *cmp = bc_file_get_contents(rv, true, &cmp_len, &err); + + assert_non_null(cmp); + assert_null(err); + + assert_string_equal(cmp, + "\n" + "\n" + " {{ SITE_TITLE }}{% ifdef FILTER_TAG %} - " + "{{ FILTER_TAG }}{% endif %}\n" + " {{ BASE_URL }}/atom{% ifdef FILTER_TAG %}/{{ FILTER_TAG }}" + "{% endif %}/index.xml\n" + " {{ DATE_FIRST_FORMATTED }}\n" + " \n" + " \n" + " \n" + " {{ AUTHOR_NAME }}\n" + " {{ AUTHOR_EMAIL }}\n" + " \n" + " {{ SITE_TAGLINE }}\n" + " {% block listing %}\n" + " \n" + " {{ TITLE }}\n" + " {{ BASE_URL }}/post/{{ FILENAME }}/\n" + " {{ DATE_FORMATTED }}\n" + " {{ DATE_FORMATTED }}\n" + " \n" + " \n" + " {{ AUTHOR_NAME }}\n" + " {{ AUTHOR_EMAIL }}\n" + " \n" + " \n" + " \n" + " {% endblock %}\n" + "\n"); + + free(cmp); + bm_atom_destroy(rv); + free(rv); + bc_trie_free(settings->settings); + free(settings); +} + + +int +main(void) +{ + const UnitTest tests[] = { + unit_test(test_atom_file), + unit_test(test_atom_dir), + }; + return run_tests(tests); +} diff --git a/tests/blogc-make/check_blogc_make.sh.in b/tests/blogc-make/check_blogc_make.sh.in new file mode 100755 index 0000000..2139664 --- /dev/null +++ b/tests/blogc-make/check_blogc_make.sh.in @@ -0,0 +1,796 @@ +#!@BASH@ + +set -xe -o pipefail + +export LC_ALL=C + +TEMP="$(mktemp -d)" +[[ -n "${TEMP}" ]] + +trap_func() { + [[ -e "${TEMP}/output.txt" ]] && cat "${TEMP}/output.txt" + [[ -n "${TEMP}" ]] && rm -rf "${TEMP}" +} + +trap trap_func EXIT + +mkdir -p "${TEMP}"/proj{,/templates,/content/post} + + +### minimal settings, will produce no file + +cat > "${TEMP}/proj/settings.ini" <&1 + + +### default settings with some posts + +cat > "${TEMP}/proj/content/post/foo.txt" < "${TEMP}/proj/content/post/bar.txt" < "${TEMP}/proj/templates/main.tmpl" <> "${TEMP}/proj/settings.ini" <&1 | tee "${TEMP}/output.txt" +grep "_build/index\\.html" "${TEMP}/output.txt" +grep "_build/atom\\.xml" "${TEMP}/output.txt" +grep "_build/page/1/index\\.html" "${TEMP}/output.txt" +grep "_build/post/foo/index\\.html" "${TEMP}/output.txt" +grep "_build/post/bar/index\\.html" "${TEMP}/output.txt" + +rm "${TEMP}/output.txt" + +cat > "${TEMP}/expected-index.html" < "${TEMP}/expected-atom.xml" < + + Lol's Website + /atom.xml + 2016-10-01T00:00:00Z + + + + Lol + author@example.com + + WAT?! + + + Foo + /post/foo/ + 2016-10-01T00:00:00Z + 2016-10-01T00:00:00Z + + + Lol + author@example.com + + This is foo.

+]]>
+
+ + + Bar + /post/bar/ + 2016-09-01T00:00:00Z + 2016-09-01T00:00:00Z + + + Lol + author@example.com + + This is bar.

+]]>
+
+ +
+EOF +diff -uN "${TEMP}/proj/_build/atom.xml" "${TEMP}/expected-atom.xml" + +cat > "${TEMP}/expected-post-foo.html" <This is foo.

+ + +EOF +diff -uN "${TEMP}/proj/_build/post/foo/index.html" "${TEMP}/expected-post-foo.html" + +cat > "${TEMP}/expected-post-bar.html" <This is bar.

+ + +EOF +diff -uN "${TEMP}/proj/_build/post/bar/index.html" "${TEMP}/expected-post-bar.html" + +rm -rf "${TEMP}/proj/_build" + + +### default settings with some posts and tags + +cat > "${TEMP}/proj/content/post/baz.txt" <> "${TEMP}/proj/settings.ini" <&1 | tee "${TEMP}/output.txt" +grep "_build/index\\.html" "${TEMP}/output.txt" +grep "_build/atom\\.xml" "${TEMP}/output.txt" +grep "_build/atom/tag1\\.xml" "${TEMP}/output.txt" +grep "_build/atom/tag2\\.xml" "${TEMP}/output.txt" +grep "_build/page/1/index\\.html" "${TEMP}/output.txt" +grep "_build/post/foo/index\\.html" "${TEMP}/output.txt" +grep "_build/post/bar/index\\.html" "${TEMP}/output.txt" +grep "_build/post/baz/index\\.html" "${TEMP}/output.txt" +grep "_build/tag/tag1/index\\.html" "${TEMP}/output.txt" +grep "_build/tag/tag2/index\\.html" "${TEMP}/output.txt" + +rm "${TEMP}/output.txt" + +cat > "${TEMP}/expected-index.html" < "${TEMP}/expected-atom.xml" < + + Lol's Website + /atom.xml + 2016-10-01T00:00:00Z + + + + Lol + author@example.com + + WAT?! + + + Foo + /post/foo/ + 2016-10-01T00:00:00Z + 2016-10-01T00:00:00Z + + + Lol + author@example.com + + This is foo.

+]]>
+
+ + + Bar + /post/bar/ + 2016-09-01T00:00:00Z + 2016-09-01T00:00:00Z + + + Lol + author@example.com + + This is bar.

+]]>
+
+ + + Baz + /post/baz/ + 2016-08-01T00:00:00Z + 2016-08-01T00:00:00Z + + + Lol + author@example.com + + This is baz.

+]]>
+
+ +
+EOF +diff -uN "${TEMP}/proj/_build/atom.xml" "${TEMP}/expected-atom.xml" + +cat > "${TEMP}/expected-atom-tag1.xml" < + + Lol's Website - tag1 + /atom/tag1.xml + 2016-08-01T00:00:00Z + + + + Lol + author@example.com + + WAT?! + + + Baz + /post/baz/ + 2016-08-01T00:00:00Z + 2016-08-01T00:00:00Z + + + Lol + author@example.com + + This is baz.

+]]>
+
+ +
+EOF +diff -uN "${TEMP}/proj/_build/atom/tag1.xml" "${TEMP}/expected-atom-tag1.xml" + +cat > "${TEMP}/expected-atom-tag2.xml" < + + Lol's Website - tag2 + /atom/tag2.xml + 2016-08-01T00:00:00Z + + + + Lol + author@example.com + + WAT?! + + + Baz + /post/baz/ + 2016-08-01T00:00:00Z + 2016-08-01T00:00:00Z + + + Lol + author@example.com + + This is baz.

+]]>
+
+ +
+EOF +diff -uN "${TEMP}/proj/_build/atom/tag2.xml" "${TEMP}/expected-atom-tag2.xml" + +cat > "${TEMP}/expected-post-baz.html" <This is baz.

+ + +EOF +diff -uN "${TEMP}/proj/_build/post/foo/index.html" "${TEMP}/expected-post-foo.html" +diff -uN "${TEMP}/proj/_build/post/bar/index.html" "${TEMP}/expected-post-bar.html" +diff -uN "${TEMP}/proj/_build/post/baz/index.html" "${TEMP}/expected-post-baz.html" + +cat > "${TEMP}/expected-tag1.html" < "${TEMP}/expected-tag2.html" < "${TEMP}/proj/content/page1.txt" < "${TEMP}/proj/content/page2.txt" <> "${TEMP}/proj/settings.ini" <&1 | tee "${TEMP}/output.txt" +grep "_build/index\\.html" "${TEMP}/output.txt" +grep "_build/atom\\.xml" "${TEMP}/output.txt" +grep "_build/atom/tag1\\.xml" "${TEMP}/output.txt" +grep "_build/atom/tag2\\.xml" "${TEMP}/output.txt" +grep "_build/page/1/index\\.html" "${TEMP}/output.txt" +grep "_build/post/foo/index\\.html" "${TEMP}/output.txt" +grep "_build/post/bar/index\\.html" "${TEMP}/output.txt" +grep "_build/post/baz/index\\.html" "${TEMP}/output.txt" +grep "_build/tag/tag1/index\\.html" "${TEMP}/output.txt" +grep "_build/tag/tag2/index\\.html" "${TEMP}/output.txt" +grep "_build/page1/index\\.html" "${TEMP}/output.txt" +grep "_build/page2/index\\.html" "${TEMP}/output.txt" + +rm "${TEMP}/output.txt" + +diff -uN "${TEMP}/proj/_build/index.html" "${TEMP}/expected-index.html" +diff -uN "${TEMP}/proj/_build/page/1/index.html" "${TEMP}/expected-index.html" + +diff -uN "${TEMP}/proj/_build/atom.xml" "${TEMP}/expected-atom.xml" + +diff -uN "${TEMP}/proj/_build/atom/tag1.xml" "${TEMP}/expected-atom-tag1.xml" +diff -uN "${TEMP}/proj/_build/atom/tag2.xml" "${TEMP}/expected-atom-tag2.xml" + +diff -uN "${TEMP}/proj/_build/post/foo/index.html" "${TEMP}/expected-post-foo.html" +diff -uN "${TEMP}/proj/_build/post/bar/index.html" "${TEMP}/expected-post-bar.html" +diff -uN "${TEMP}/proj/_build/post/baz/index.html" "${TEMP}/expected-post-baz.html" + +diff -uN "${TEMP}/proj/_build/tag/tag1/index.html" "${TEMP}/expected-tag1.html" +diff -uN "${TEMP}/proj/_build/tag/tag2/index.html" "${TEMP}/expected-tag2.html" + +cat > "${TEMP}/expected-page1.html" <This is page 1.

+ + +EOF +diff -uN "${TEMP}/proj/_build/page1/index.html" "${TEMP}/expected-page1.html" + +cat > "${TEMP}/expected-page2.html" <This is page 2.

+ + +EOF +diff -uN "${TEMP}/proj/_build/page2/index.html" "${TEMP}/expected-page2.html" + +rm -rf "${TEMP}/proj" +mkdir -p "${TEMP}"/proj{,/temp,/contents/poost} + + +### custom settings with some posts + +cat > "${TEMP}/proj/contents/poost/foo.blogc" < "${TEMP}/proj/contents/poost/bar.blogc" < "${TEMP}/proj/temp/main.html" < "${TEMP}/proj/settings.ini" <&1 | tee "${TEMP}/output.txt" +grep "_blogc_build/posts\\.html" "${TEMP}/output.txt" +grep "_blogc_build/atoom/index\\.xml" "${TEMP}/output.txt" +grep "_blogc_build/pagination/1\\.html" "${TEMP}/output.txt" +grep "_blogc_build/pagination/2\\.html" "${TEMP}/output.txt" +grep "_blogc_build/poost/foo\\.html" "${TEMP}/output.txt" +grep "_blogc_build/poost/bar\\.html" "${TEMP}/output.txt" + +rm "${TEMP}/output.txt" + +cat > "${TEMP}/expected-index.html" < "${TEMP}/expected-page-2.html" < "${TEMP}/expected-atom.xml" < + + Lol's Website + /atoom/index.xml + 2016-10-01T00:00:00Z + + + + Lol + author@example.com + + WAT?! + + + Foo + /poost/foo/ + 2016-10-01T00:00:00Z + 2016-10-01T00:00:00Z + + + Lol + author@example.com + + This is foo.

+]]>
+
+ +
+EOF +diff -uN "${TEMP}/proj/_blogc_build/atoom/index.xml" "${TEMP}/expected-atom.xml" + +cat > "${TEMP}/expected-post-foo.html" <This is foo.

+ + +EOF +diff -uN "${TEMP}/proj/_blogc_build/poost/foo.html" "${TEMP}/expected-post-foo.html" + +cat > "${TEMP}/expected-post-bar.html" <This is bar.

+ + +EOF +diff -uN "${TEMP}/proj/_blogc_build/poost/bar.html" "${TEMP}/expected-post-bar.html" + +rm -rf "${TEMP}/proj/_build" + + +### default settings with some posts and tags + +cat > "${TEMP}/proj/contents/poost/baz.blogc" <> "${TEMP}/proj/settings.ini" <&1 | tee "${TEMP}/output.txt" +grep "_blogc_build/posts\\.html" "${TEMP}/output.txt" +grep "_blogc_build/atoom/index\\.xml" "${TEMP}/output.txt" +grep "_blogc_build/atoom/tag1/index\\.xml" "${TEMP}/output.txt" +grep "_blogc_build/atoom/tag2/index\\.xml" "${TEMP}/output.txt" +grep "_blogc_build/pagination/1\\.html" "${TEMP}/output.txt" +grep "_blogc_build/pagination/2\\.html" "${TEMP}/output.txt" +grep "_blogc_build/pagination/3\\.html" "${TEMP}/output.txt" +grep "_blogc_build/poost/foo\\.html" "${TEMP}/output.txt" +grep "_blogc_build/poost/bar\\.html" "${TEMP}/output.txt" +grep "_blogc_build/poost/baz\\.html" "${TEMP}/output.txt" +grep "_blogc_build/taag/tag1\\.html" "${TEMP}/output.txt" +grep "_blogc_build/taag/tag2\\.html" "${TEMP}/output.txt" + +rm "${TEMP}/output.txt" + +diff -uN "${TEMP}/proj/_blogc_build/posts.html" "${TEMP}/expected-index.html" +diff -uN "${TEMP}/proj/_blogc_build/pagination/1.html" "${TEMP}/expected-index.html" +diff -uN "${TEMP}/proj/_blogc_build/pagination/2.html" "${TEMP}/expected-page-2.html" + +cat > "${TEMP}/expected-page-3.html" < "${TEMP}/expected-atom-tag1.xml" < + + Lol's Website - tag1 + /atoom/tag1/index.xml + 2016-08-01T00:00:00Z + + + + Lol + author@example.com + + WAT?! + + + Baz + /poost/baz/ + 2016-08-01T00:00:00Z + 2016-08-01T00:00:00Z + + + Lol + author@example.com + + This is baz.

+]]>
+
+ +
+EOF +diff -uN "${TEMP}/proj/_blogc_build/atoom/tag1/index.xml" "${TEMP}/expected-atom-tag1.xml" + +cat > "${TEMP}/expected-atom-tag2.xml" < + + Lol's Website - tag2 + /atoom/tag2/index.xml + 2016-08-01T00:00:00Z + + + + Lol + author@example.com + + WAT?! + + + Baz + /poost/baz/ + 2016-08-01T00:00:00Z + 2016-08-01T00:00:00Z + + + Lol + author@example.com + + This is baz.

+]]>
+
+ +
+EOF +diff -uN "${TEMP}/proj/_blogc_build/atoom/tag2/index.xml" "${TEMP}/expected-atom-tag2.xml" + +cat > "${TEMP}/expected-post-baz.html" <This is baz.

+ + +EOF +diff -uN "${TEMP}/proj/_blogc_build/poost/foo.html" "${TEMP}/expected-post-foo.html" +diff -uN "${TEMP}/proj/_blogc_build/poost/bar.html" "${TEMP}/expected-post-bar.html" +diff -uN "${TEMP}/proj/_blogc_build/poost/baz.html" "${TEMP}/expected-post-baz.html" + +cat > "${TEMP}/expected-tag1.html" < "${TEMP}/expected-tag2.html" < "${TEMP}/proj/contents/page1.blogc" < "${TEMP}/proj/contents/page2.blogc" <> "${TEMP}/proj/settings.ini" <&1 | tee "${TEMP}/output.txt" +grep "_blogc_build/posts\\.html" "${TEMP}/output.txt" +grep "_blogc_build/atoom/index\\.xml" "${TEMP}/output.txt" +grep "_blogc_build/atoom/tag1/index\\.xml" "${TEMP}/output.txt" +grep "_blogc_build/atoom/tag2/index\\.xml" "${TEMP}/output.txt" +grep "_blogc_build/pagination/1\\.html" "${TEMP}/output.txt" +grep "_blogc_build/pagination/2\\.html" "${TEMP}/output.txt" +grep "_blogc_build/pagination/3\\.html" "${TEMP}/output.txt" +grep "_blogc_build/poost/foo\\.html" "${TEMP}/output.txt" +grep "_blogc_build/poost/bar\\.html" "${TEMP}/output.txt" +grep "_blogc_build/poost/baz\\.html" "${TEMP}/output.txt" +grep "_blogc_build/taag/tag1\\.html" "${TEMP}/output.txt" +grep "_blogc_build/taag/tag2\\.html" "${TEMP}/output.txt" +grep "_blogc_build/page1\\.html" "${TEMP}/output.txt" +grep "_blogc_build/page2\\.html" "${TEMP}/output.txt" + +rm "${TEMP}/output.txt" + +diff -uN "${TEMP}/proj/_blogc_build/posts.html" "${TEMP}/expected-index.html" +diff -uN "${TEMP}/proj/_blogc_build/pagination/1.html" "${TEMP}/expected-index.html" +diff -uN "${TEMP}/proj/_blogc_build/pagination/2.html" "${TEMP}/expected-page-2.html" +diff -uN "${TEMP}/proj/_blogc_build/pagination/3.html" "${TEMP}/expected-page-3.html" + +diff -uN "${TEMP}/proj/_blogc_build/atoom/index.xml" "${TEMP}/expected-atom.xml" +diff -uN "${TEMP}/proj/_blogc_build/atoom/tag1/index.xml" "${TEMP}/expected-atom-tag1.xml" +diff -uN "${TEMP}/proj/_blogc_build/atoom/tag2/index.xml" "${TEMP}/expected-atom-tag2.xml" + +diff -uN "${TEMP}/proj/_blogc_build/poost/foo.html" "${TEMP}/expected-post-foo.html" +diff -uN "${TEMP}/proj/_blogc_build/poost/bar.html" "${TEMP}/expected-post-bar.html" +diff -uN "${TEMP}/proj/_blogc_build/poost/baz.html" "${TEMP}/expected-post-baz.html" + +diff -uN "${TEMP}/proj/_blogc_build/taag/tag1.html" "${TEMP}/expected-tag1.html" +diff -uN "${TEMP}/proj/_blogc_build/taag/tag2.html" "${TEMP}/expected-tag2.html" + +cat > "${TEMP}/expected-page1.html" <This is page 1.

+ + +EOF +diff -uN "${TEMP}/proj/_blogc_build/page1.html" "${TEMP}/expected-page1.html" + +cat > "${TEMP}/expected-page2.html" <This is page 2.

+ + +EOF +diff -uN "${TEMP}/proj/_blogc_build/page2.html" "${TEMP}/expected-page2.html" + +rm -rf "${TEMP}/proj/_blogc_build" diff --git a/tests/blogc-make/check_exec.c b/tests/blogc-make/check_exec.c new file mode 100644 index 0000000..ce87f09 --- /dev/null +++ b/tests/blogc-make/check_exec.c @@ -0,0 +1,138 @@ +/* + * blogc: A blog compiler. + * Copyright (C) 2015-2016 Rafael G. Martins + * + * This program can be distributed under the terms of the BSD License. + * See the file LICENSE. + */ + +#include +#include +#include +#include + +#include +#include + +#include "../../src/blogc-make/exec.h" +#include "../../src/blogc-make/settings.h" +#include "../../src/common/utils.h" + + +static void +test_build_blogc_cmd_with_settings(void **state) +{ + unsetenv("BLOGC"); + + bm_settings_t *settings = bc_malloc(sizeof(bm_settings_t)); + settings->settings = bc_trie_new(free); + bc_trie_insert(settings->settings, "locale", bc_strdup("en_US.utf8")); + settings->env = bc_trie_new(free); + bc_trie_insert(settings->env, "FOO", bc_strdup("BAR")); + bc_trie_insert(settings->env, "BAR", bc_strdup("BAZ")); + bc_trie_t *variables = bc_trie_new(free); + bc_trie_insert(variables, "LOL", bc_strdup("HEHE")); + + char *rv = bm_exec_build_blogc_cmd(settings, variables, true, "main.tmpl", + "foo.html", true); + assert_string_equal(rv, + "LC_ALL='en_US.utf8' blogc -D FOO='BAR' -D BAR='BAZ' -D LOL='HEHE' -l " + "-t 'main.tmpl' -o 'foo.html' -i"); + free(rv); + + rv = bm_exec_build_blogc_cmd(settings, variables, false, NULL, NULL, false); + assert_string_equal(rv, + "LC_ALL='en_US.utf8' blogc -D FOO='BAR' -D BAR='BAZ' -D LOL='HEHE'"); + free(rv); + + rv = bm_exec_build_blogc_cmd(settings, NULL, false, NULL, NULL, false); + assert_string_equal(rv, + "LC_ALL='en_US.utf8' blogc -D FOO='BAR' -D BAR='BAZ'"); + free(rv); + + setenv("BLOGC", "/path/to/blogc", 1); + + rv = bm_exec_build_blogc_cmd(settings, variables, true, "main.tmpl", + "foo.html", true); + assert_string_equal(rv, + "LC_ALL='en_US.utf8' /path/to/blogc -D FOO='BAR' -D BAR='BAZ' " + "-D LOL='HEHE' -l -t 'main.tmpl' -o 'foo.html' -i"); + free(rv); + + rv = bm_exec_build_blogc_cmd(settings, variables, false, NULL, NULL, false); + assert_string_equal(rv, + "LC_ALL='en_US.utf8' /path/to/blogc -D FOO='BAR' -D BAR='BAZ' " + "-D LOL='HEHE'"); + free(rv); + + rv = bm_exec_build_blogc_cmd(settings, NULL, false, NULL, NULL, false); + assert_string_equal(rv, + "LC_ALL='en_US.utf8' /path/to/blogc -D FOO='BAR' -D BAR='BAZ'"); + free(rv); + + unsetenv("BLOGC"); + + bc_trie_free(variables); + bc_trie_free(settings->settings); + bc_trie_free(settings->env); + free(settings); +} + + +static void +test_build_blogc_cmd_without_settings(void **state) +{ + unsetenv("BLOGC"); + + bc_trie_t *variables = bc_trie_new(free); + bc_trie_insert(variables, "LOL", bc_strdup("HEHE")); + + char *rv = bm_exec_build_blogc_cmd(NULL, variables, true, "main.tmpl", + "foo.html", true); + assert_string_equal(rv, + "blogc -D LOL='HEHE' -l -t 'main.tmpl' -o 'foo.html' -i"); + free(rv); + + rv = bm_exec_build_blogc_cmd(NULL, variables, false, NULL, NULL, false); + assert_string_equal(rv, + "blogc -D LOL='HEHE'"); + free(rv); + + rv = bm_exec_build_blogc_cmd(NULL, NULL, false, NULL, NULL, false); + assert_string_equal(rv, + "blogc"); + free(rv); + + setenv("BLOGC", "/path/to/blogc", 1); + + rv = bm_exec_build_blogc_cmd(NULL, variables, true, "main.tmpl", "foo.html", + true); + assert_string_equal(rv, + "/path/to/blogc -D LOL='HEHE' -l -t 'main.tmpl' -o 'foo.html' -i"); + free(rv); + + rv = bm_exec_build_blogc_cmd(NULL, variables, false, NULL, NULL, false); + assert_string_equal(rv, + "/path/to/blogc -D LOL='HEHE'"); + free(rv); + + rv = bm_exec_build_blogc_cmd(NULL, NULL, false, NULL, NULL, false); + assert_string_equal(rv, + "/path/to/blogc"); + free(rv); + + unsetenv("BLOGC"); + + bc_trie_free(variables); +} + + +int +main(void) +{ + const UnitTest tests[] = { + unit_test(test_build_blogc_cmd_with_settings), + unit_test(test_build_blogc_cmd_without_settings), + }; + return run_tests(tests); +} -- cgit v1.2.3-18-g5258