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
---
tests/blogc-make/check_atom.c | 154 ++++++
tests/blogc-make/check_blogc_make.sh.in | 796 ++++++++++++++++++++++++++++++++
tests/blogc-make/check_exec.c | 138 ++++++
3 files changed, 1088 insertions(+)
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
(limited to 'tests')
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