summaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
Diffstat (limited to 'tests')
-rwxr-xr-xtests/blogc-git-receiver/check_post_receive.sh.in116
-rwxr-xr-xtests/blogc-git-receiver/check_pre_receive.sh.in304
-rw-r--r--tests/blogc-git-receiver/check_pre_receive_parser.c134
-rw-r--r--tests/blogc-git-receiver/check_settings.c91
-rwxr-xr-xtests/blogc-git-receiver/check_shell.sh.in95
-rw-r--r--tests/blogc-git-receiver/check_shell_command_parser.c215
-rw-r--r--tests/blogc-make/check_atom.c552
-rwxr-xr-xtests/blogc-make/check_blogc_make.sh.in2463
-rw-r--r--tests/blogc-make/check_exec.c318
-rw-r--r--tests/blogc-make/check_rules.c104
-rw-r--r--tests/blogc-make/check_settings.c394
-rw-r--r--tests/blogc-make/check_utils.c468
-rw-r--r--tests/blogc-runserver/check_httpd_utils.c132
-rw-r--r--tests/blogc-runserver/check_mime.c92
-rwxr-xr-xtests/blogc/check_blogc.sh.in638
-rw-r--r--tests/blogc/check_filelist_parser.c131
-rw-r--r--tests/blogc/check_funcvars.c80
-rw-r--r--tests/blogc/check_loader.c1050
-rw-r--r--tests/blogc/check_renderer.c1435
-rw-r--r--tests/blogc/check_rusage.c127
-rw-r--r--tests/blogc/check_source_parser.c761
-rw-r--r--tests/blogc/check_sysinfo.c261
-rw-r--r--tests/blogc/check_sysinfo2.c49
-rw-r--r--tests/blogc/check_template_parser.c1331
-rw-r--r--tests/blogc/check_toctree.c234
-rw-r--r--tests/check_content_parser.c (renamed from tests/blogc/check_content_parser.c)938
-rw-r--r--tests/check_datetime_parser.c (renamed from tests/blogc/check_datetime_parser.c)210
-rw-r--r--tests/check_error.c (renamed from tests/common/check_error.c)57
-rw-r--r--tests/check_loader.c771
-rw-r--r--tests/check_renderer.c1158
-rw-r--r--tests/check_source_parser.c542
-rw-r--r--tests/check_template_parser.c1184
-rw-r--r--tests/check_utf8.c101
-rw-r--r--tests/check_utils.c (renamed from tests/common/check_utils.c)763
-rw-r--r--tests/common/check_config_parser.c1037
-rw-r--r--tests/common/check_sort.c148
-rw-r--r--tests/common/check_stdin.c58
-rw-r--r--tests/common/check_utf8.c105
38 files changed, 4379 insertions, 14268 deletions
diff --git a/tests/blogc-git-receiver/check_post_receive.sh.in b/tests/blogc-git-receiver/check_post_receive.sh.in
deleted file mode 100755
index 74d4df2..0000000
--- a/tests/blogc-git-receiver/check_post_receive.sh.in
+++ /dev/null
@@ -1,116 +0,0 @@
-#!@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}/repos"
-git init --bare "${TEMP}/repos/foo.git" &> /dev/null
-
-ln -s "@abs_top_builddir@/blogc-git-receiver" "${TEMP}/repos/foo.git/hooks/post-receive"
-
-cat > "${TEMP}/tmp.txt" <<EOF
-blob
-mark :1
-data 4
-bar
-
-reset refs/heads/master
-commit refs/heads/master
-mark :2
-author Rafael G. Martins <rafael@rafaelmartins.eng.br> 1476033730 +0200
-committer Rafael G. Martins <rafael@rafaelmartins.eng.br> 1476033888 +0200
-data 11
-testing...
-M 100644 :1 foo
-
-EOF
-
-cd "${TEMP}/repos/foo.git"
-git fast-import < "${TEMP}/tmp.txt" &> /dev/null
-
-git init --bare "${TEMP}/repos/bar.git" &> /dev/null
-
-HOME="${TEMP}" ${TESTS_ENVIRONMENT} ./hooks/post-receive 2>&1 | tee "${TEMP}/output.txt"
-grep "warning: repository mirroring disabled" "${TEMP}/output.txt" &> /dev/null
-
-git config --local remote.mirror.pushurl "${TEMP}/repos/bar.git"
-HOME="${TEMP}" ${TESTS_ENVIRONMENT} ./hooks/post-receive 2>&1 | tee "${TEMP}/output.txt"
-grep "[new branch] *master" "${TEMP}/output.txt" &> /dev/null
-
-git config --local --unset remote.mirror.pushurl
-git init --bare "${TEMP}/repos/bar2.git" &> /dev/null
-git config --local remote.mirror.url "${TEMP}/repos/bar2.git"
-HOME="${TEMP}" ${TESTS_ENVIRONMENT} ./hooks/post-receive 2>&1 | tee "${TEMP}/output.txt"
-grep "[new branch] *master" "${TEMP}/output.txt" &> /dev/null
-
-git config --local --unset remote.mirror.url
-cat > "${TEMP}/blogc-git-receiver.ini" <<EOF
-[repo:boo.git]
-mirror = 123
-
-[repo:foo.git]
-mirror = ${TEMP}/repos/bar3.git
-
-[repo:bar.git]
-mirror = lol
-EOF
-git init --bare "${TEMP}/repos/bar3.git" &> /dev/null
-HOME="${TEMP}" ${TESTS_ENVIRONMENT} ./hooks/post-receive 2>&1 | tee "${TEMP}/output.txt"
-grep "[new branch] *master" "${TEMP}/output.txt" &> /dev/null
-
-cat > "${TEMP}/blogc-git-receiver.ini" <<EOF
-asd[repo:boo.git]
-mirror = 123
-
-[repo:foo.git]
-mirror = ${TEMP}/repos/bar4.git
-
-[repo:bar.git]
-mirror = lol
-EOF
-git init --bare "${TEMP}/repos/bar4.git" &> /dev/null
-HOME="${TEMP}" ${TESTS_ENVIRONMENT} ./hooks/post-receive 2>&1 | tee "${TEMP}/output.txt"
-grep "warning: failed to parse configuration file " "${TEMP}/output.txt" &> /dev/null
-
-cd ..
-cat > "${TEMP}/blogc-git-receiver.ini" <<EOF
-[repo:boo.git]
-mirror = 123
-
-[repo:foo.git]
-mirror = ${TEMP}/repos/bar5.git
-
-[repo:bar.git]
-mirror = lol
-EOF
-git init --bare "${TEMP}/repos/bar5.git" &> /dev/null
-HOME="${TEMP}" ${TESTS_ENVIRONMENT} ./foo.git/hooks/post-receive 2>&1 | tee "${TEMP}/output.txt"
-grep "[new branch] *master" "${TEMP}/output.txt" &> /dev/null
-
-cd ..
-cat > "${TEMP}/blogc-git-receiver.ini" <<EOF
-[repo:boo.git]
-mirror = 123
-
-[repo:foo.git]
-mirror = ${TEMP}/repos/bar6.git
-
-[repo:bar.git]
-mirror = lol
-EOF
-git init --bare "${TEMP}/repos/bar6.git" &> /dev/null
-BLOGC_GIT_RECEIVER_BASE_DIR="${TEMP}" ${TESTS_ENVIRONMENT} ./repos/foo.git/hooks/post-receive 2>&1 | tee "${TEMP}/output.txt"
-grep "[new branch] *master" "${TEMP}/output.txt" &> /dev/null
-
-rm "${TEMP}/output.txt"
diff --git a/tests/blogc-git-receiver/check_pre_receive.sh.in b/tests/blogc-git-receiver/check_pre_receive.sh.in
deleted file mode 100755
index 2cf3c89..0000000
--- a/tests/blogc-git-receiver/check_pre_receive.sh.in
+++ /dev/null
@@ -1,304 +0,0 @@
-#!@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}/repos"
-git init --bare "${TEMP}/repos/foo.git" &> /dev/null
-
-SELF="@abs_top_builddir@/blogc-git-receiver"
-
-ln -s "${SELF}" "${TEMP}/repos/foo.git/hooks/pre-receive"
-
-cat > "${TEMP}/payload.txt" <<EOF
-0000000000000000000000000000000000000000 0000000000000000000000000000000000000000 refs/heads/foo
-0000000000000000000000000000000000000000 0000000000000000000000000000000000000000 refs/heads/bar
-EOF
-
-cd "${TEMP}/repos/foo.git"
-
-SHELL="${SELF}" HOME="${TEMP}" GIT_DIR=. ${TESTS_ENVIRONMENT} ./hooks/pre-receive < "${TEMP}/payload.txt" 2>&1 | tee "${TEMP}/output.txt"
-grep "warning: no suitable branch found. nothing to deploy." "${TEMP}/output.txt" &> /dev/null
-
-cat > "${TEMP}/tmp.txt" <<EOF
-blob
-mark :1
-data 63
-all:
- mkdir -p \$(OUTPUT_DIR)
- echo lol > \$(OUTPUT_DIR)/foo.txt
-
-reset refs/heads/master
-commit refs/heads/master
-mark :2
-author Rafael G. Martins <rafael@rafaelmartins.eng.br> 1476139736 +0200
-committer Rafael G. Martins <rafael@rafaelmartins.eng.br> 1476139736 +0200
-data 11
-testing...
-M 100644 :1 Makefil
-
-EOF
-
-git fast-import < "${TEMP}/tmp.txt" &> /dev/null
-
-cat > "${TEMP}/payload.txt" <<EOF
-0000000000000000000000000000000000000000 0000000000000000000000000000000000000000 refs/heads/foo
-0000000000000000000000000000000000000000 $(git rev-parse master) refs/heads/master
-0000000000000000000000000000000000000000 0000000000000000000000000000000000000000 refs/heads/main
-EOF
-
-SHELL="${SELF}" HOME="${TEMP}" GIT_DIR=. ${TESTS_ENVIRONMENT} ./hooks/pre-receive < "${TEMP}/payload.txt" 2>&1 | tee "${TEMP}/output.txt"
-grep "warning: no blogcfile or Makefile found. skipping ..." "${TEMP}/output.txt" &> /dev/null
-
-cd "${TEMP}"
-git init --bare "${TEMP}/repos/foo2.git" &> /dev/null
-ln -s "${SELF}" "${TEMP}/repos/foo2.git/hooks/pre-receive"
-
-cat > "${TEMP}/tmp.txt" <<EOF
-blob
-mark :1
-data 63
-all:
- mkdir -p \$(OUTPUT_DIR)
- echo lol > \$(OUTPUT_DIR)/foo.txt
-
-reset refs/heads/main
-commit refs/heads/main
-mark :2
-author Rafael G. Martins <rafael@rafaelmartins.eng.br> 1476139736 +0200
-committer Rafael G. Martins <rafael@rafaelmartins.eng.br> 1476139736 +0200
-data 11
-testing...
-M 100644 :1 Makefile
-
-EOF
-
-cd "${TEMP}/repos/foo2.git"
-git fast-import < "${TEMP}/tmp.txt" &> /dev/null
-
-cat > "${TEMP}/payload.txt" <<EOF
-0000000000000000000000000000000000000000 0000000000000000000000000000000000000000 refs/heads/foo
-0000000000000000000000000000000000000000 $(git rev-parse main) refs/heads/main
-0000000000000000000000000000000000000000 0000000000000000000000000000000000000000 refs/heads/bar
-EOF
-
-cat > "${TEMP}/blogc-git-receiver.ini" <<EOF
-[repo:foo2a.git]
-symlink = ${TEMP}/guda
-EOF
-
-SHELL="${SELF}" HOME="${TEMP}" GIT_DIR=. BLOGC_GIT_RECEIVER_BUILDS_DIR="${TEMP}/foooo" ${TESTS_ENVIRONMENT} ./hooks/pre-receive < "${TEMP}/payload.txt" 2>&1 | tee "${TEMP}/output.txt"
-grep "echo lol" "${TEMP}/output.txt" &> /dev/null
-
-[[ -h htdocs ]]
-[[ "$(cat htdocs/foo.txt)" == "lol" ]]
-
-cat >> "${TEMP}/blogc-git-receiver.ini" <<EOF
-[repo:foo2.git]
-EOF
-
-SHELL="${SELF}" HOME="${TEMP}" GIT_DIR=. BLOGC_GIT_RECEIVER_BUILDS_DIR="${TEMP}/foooo" ${TESTS_ENVIRONMENT} ./hooks/pre-receive < "${TEMP}/payload.txt" 2>&1 | tee "${TEMP}/output.txt"
-grep "echo lol" "${TEMP}/output.txt" &> /dev/null
-
-[[ -h htdocs ]]
-[[ "$(cat htdocs/foo.txt)" == "lol" ]]
-
-cat >> "${TEMP}/blogc-git-receiver.ini" <<EOF
-symlink = ${TEMP}/chunda
-EOF
-
-SHELL="${SELF}" HOME="${TEMP}" GIT_DIR=. BLOGC_GIT_RECEIVER_BUILDS_DIR="${TEMP}/foooo" ${TESTS_ENVIRONMENT} ./hooks/pre-receive < "${TEMP}/payload.txt" 2>&1 | tee "${TEMP}/output.txt"
-grep "echo lol" "${TEMP}/output.txt" &> /dev/null
-
-[[ -h "${TEMP}/chunda" ]]
-[[ "$(cat "${TEMP}/chunda/foo.txt")" == "lol" ]]
-
-DEST="$(readlink "${TEMP}/chunda")"
-[[ -e "${DEST}" ]]
-[[ "${DEST}" == "${TEMP}/foooo/"* ]]
-
-cd "${TEMP}"
-git init --bare "${TEMP}/repos/foo2a.git" &> /dev/null
-ln -s "${SELF}" "${TEMP}/repos/foo2a.git/hooks/pre-receive"
-
-cat > "${TEMP}/tmp.txt" <<EOF
-blob
-mark :1
-data 64
-all:
- mkdir -p \$(OUTPUT_DIR)
- echo lol > \$(OUTPUT_DIR)/foo.txt
-
-
-commit refs/heads/master
-mark :2
-author Rafael G. Martins <rafael@rafaelmartins.eng.br> 1476142917 +0200
-committer Rafael G. Martins <rafael@rafaelmartins.eng.br> 1476142917 +0200
-data 12
-testing2...
-M 100644 :1 Makefile
-
-EOF
-
-cd "${TEMP}/repos/foo2a.git"
-ln -s "${DEST}" "${TEMP}/guda"
-git fast-import < "${TEMP}/tmp.txt" &> /dev/null
-
-cat > "${TEMP}/payload.txt" <<EOF
-0000000000000000000000000000000000000000 0000000000000000000000000000000000000000 refs/heads/foo
-0000000000000000000000000000000000000000 $(git rev-parse master) refs/heads/master
-0000000000000000000000000000000000000000 0000000000000000000000000000000000000000 refs/heads/bar
-EOF
-
-SHELL="${SELF}" HOME="${TEMP}" GIT_DIR=. ${TESTS_ENVIRONMENT} ./hooks/pre-receive < "${TEMP}/payload.txt" 2>&1 | tee "${TEMP}/output.txt"
-grep "echo lol" "${TEMP}/output.txt" &> /dev/null
-
-[[ -h "${TEMP}/guda" ]]
-[[ "$(cat "${TEMP}/guda/foo.txt")" == "lol" ]]
-[[ "${DEST}" != "$(readlink "${TEMP}/guda")" ]]
-[[ ! -e "${DEST}" ]]
-
-DEST="$(readlink "${TEMP}/guda")"
-HOME="${TEMP}" ${TESTS_ENVIRONMENT} ./hooks/pre-receive 2>&1 | tee "${TEMP}/output.txt"
-
-[[ -h "${TEMP}/guda" ]]
-[[ "$(cat "${TEMP}/guda/foo.txt")" == "lol" ]]
-[[ "${DEST}" != "$(readlink "${TEMP}/guda")" ]]
-[[ ! -e "${DEST}" ]]
-
-cd ..
-
-DEST="$(readlink "${TEMP}/guda")"
-HOME="${TEMP}" ${TESTS_ENVIRONMENT} ./foo2a.git/hooks/pre-receive 2>&1 | tee "${TEMP}/output.txt"
-
-[[ -h "${TEMP}/guda" ]]
-[[ "$(cat "${TEMP}/guda/foo.txt")" == "lol" ]]
-[[ "${DEST}" != "$(readlink "${TEMP}/guda")" ]]
-[[ ! -e "${DEST}" ]]
-
-cd ..
-
-DEST="$(readlink "${TEMP}/guda")"
-HOME="${TEMP}" ${TESTS_ENVIRONMENT} ./repos/foo2a.git/hooks/pre-receive 2>&1 | tee "${TEMP}/output.txt"
-
-[[ -h "${TEMP}/guda" ]]
-[[ "$(cat "${TEMP}/guda/foo.txt")" == "lol" ]]
-[[ "${DEST}" != "$(readlink "${TEMP}/guda")" ]]
-[[ ! -e "${DEST}" ]]
-
-DEST="$(readlink "${TEMP}/guda")"
-[[ -e "${DEST}" ]]
-
-cd "${TEMP}"
-git init --bare "${TEMP}/repos/foo3.git" &> /dev/null
-ln -s "${SELF}" "${TEMP}/repos/foo3.git/hooks/pre-receive"
-
-cat > "${TEMP}/tmp.txt" <<EOF
-blob
-mark :1
-data 64
-all:
- mkdir -p \$(OUTPUT_DIR)
- echo lol > \$(OUTPUT_DIR)/foo.txt
-
-
-commit refs/heads/master
-mark :2
-author Rafael G. Martins <rafael@rafaelmartins.eng.br> 1476142917 +0200
-committer Rafael G. Martins <rafael@rafaelmartins.eng.br> 1476142917 +0200
-data 12
-testing2...
-M 100644 :1 Makefile
-
-EOF
-
-cd "${TEMP}/repos/foo3.git"
-ln -s "${DEST}" htdocs
-git fast-import < "${TEMP}/tmp.txt" &> /dev/null
-
-cat > "${TEMP}/payload.txt" <<EOF
-0000000000000000000000000000000000000000 0000000000000000000000000000000000000000 refs/heads/foo
-0000000000000000000000000000000000000000 $(git rev-parse master) refs/heads/master
-0000000000000000000000000000000000000000 0000000000000000000000000000000000000000 refs/heads/bar
-EOF
-
-SHELL="${SELF}" HOME="${TEMP}" GIT_DIR=. ${TESTS_ENVIRONMENT} ./hooks/pre-receive < "${TEMP}/payload.txt" 2>&1 | tee "${TEMP}/output.txt"
-grep "echo lol" "${TEMP}/output.txt" &> /dev/null
-
-[[ -h htdocs ]]
-[[ "$(cat htdocs/foo.txt)" == "lol" ]]
-[[ "${DEST}" != "$(readlink htdocs)" ]]
-[[ ! -e "${DEST}" ]]
-
-DEST="$(readlink htdocs)"
-HOME="${TEMP}" ${TESTS_ENVIRONMENT} ./hooks/pre-receive 2>&1 | tee "${TEMP}/output.txt"
-
-[[ -h htdocs ]]
-[[ "$(cat htdocs/foo.txt)" == "lol" ]]
-[[ "${DEST}" != "$(readlink htdocs)" ]]
-[[ ! -e "${DEST}" ]]
-
-cd ..
-
-DEST="$(readlink foo3.git/htdocs)"
-HOME="${TEMP}" ${TESTS_ENVIRONMENT} ./foo3.git/hooks/pre-receive 2>&1 | tee "${TEMP}/output.txt"
-
-[[ -h foo3.git/htdocs ]]
-[[ "$(cat foo3.git/htdocs/foo.txt)" == "lol" ]]
-[[ "${DEST}" != "$(readlink foo3.git/htdocs)" ]]
-[[ ! -e "${DEST}" ]]
-
-cd ..
-
-DEST="$(readlink repos/foo3.git/htdocs)"
-HOME="${TEMP}" ${TESTS_ENVIRONMENT} ./repos/foo3.git/hooks/pre-receive 2>&1 | tee "${TEMP}/output.txt"
-
-[[ -h repos/foo3.git/htdocs ]]
-[[ "$(cat repos/foo3.git/htdocs/foo.txt)" == "lol" ]]
-[[ "${DEST}" != "$(readlink repos/foo3.git/htdocs)" ]]
-[[ ! -e "${DEST}" ]]
-
-if [[ "x@MAKE_@" == "xenabled" ]]; then
- cd "${TEMP}"
- git init --bare "${TEMP}/repos/foo4.git" &> /dev/null
- ln -s "${SELF}" "${TEMP}/repos/foo4.git/hooks/pre-receive"
-
- cat > "${TEMP}/tmp.txt" <<EOF
-blob
-mark :1
-data 0
-
-reset refs/heads/master
-commit refs/heads/master
-mark :2
-author Rafael G. Martins <rafael@rafaelmartins.eng.br> 1483558736 +0100
-committer Rafael G. Martins <rafael@rafaelmartins.eng.br> 1483558736 +0100
-data 12
-testing3...
-M 100644 :1 blogcfile
-
-EOF
-
- cd "${TEMP}/repos/foo4.git"
- git fast-import < "${TEMP}/tmp.txt" &> /dev/null
-
- cat > "${TEMP}/payload.txt" <<EOF
-0000000000000000000000000000000000000000 $(git rev-parse master) refs/heads/master
-EOF
-
- SHELL="${SELF}" BLOGC_GIT_RECEIVER_BASE_DIR="${TEMP}" PATH="@abs_top_builddir@:${PATH}" GIT_DIR=. ${TESTS_ENVIRONMENT} ./hooks/pre-receive < "${TEMP}/payload.txt" 2>&1 | tee "${TEMP}/output.txt" || true
- grep "blogc-make: error: settings: " "${TEMP}/output.txt" &> /dev/null
-fi
-
-rm "${TEMP}/output.txt"
diff --git a/tests/blogc-git-receiver/check_pre_receive_parser.c b/tests/blogc-git-receiver/check_pre_receive_parser.c
deleted file mode 100644
index cad1421..0000000
--- a/tests/blogc-git-receiver/check_pre_receive_parser.c
+++ /dev/null
@@ -1,134 +0,0 @@
-/*
- * blogc: A blog compiler.
- * Copyright (C) 2014-2020 Rafael G. Martins <rafael@rafaelmartins.eng.br>
- *
- * This program can be distributed under the terms of the BSD License.
- * See the file LICENSE.
- */
-
-#include <stdarg.h>
-#include <stddef.h>
-#include <setjmp.h>
-#include <cmocka.h>
-#include <stdlib.h>
-#include <string.h>
-#include "../../src/blogc-git-receiver/pre-receive-parser.h"
-
-#define _bgr_pre_receive_parse(a) bgr_pre_receive_parse(a, strlen(a))
-
-
-static void
-test_pre_receive_parse(void **state)
-{
- assert_null(_bgr_pre_receive_parse(""));
- assert_null(_bgr_pre_receive_parse(
- "4f1f932f6ef6d6c9770266775c2db072964d7a62"));
- assert_null(_bgr_pre_receive_parse(
- "4f1f932f6ef6d6c9770266775c2db072964d7a62 "));
- assert_null(_bgr_pre_receive_parse(
- "4f1f932f6ef6d6c9770266775c2db072964d7a62 "
- "3fff4bb3172f77b292b0c913749e81bedd3545f3"));
- assert_null(_bgr_pre_receive_parse(
- "4f1f932f6ef6d6c9770266775c2db072964d7a62 "
- "3fff4bb3172f77b292b0c913749e81bedd3545f3 "));
- assert_null(_bgr_pre_receive_parse(
- "4f1f932f6ef6d6c9770266775c2db072964d7a62 "
- "3fff4bb3172f77b292b0c913749e81bedd3545f3 "
- "refs/heads/lol"));
- assert_null(_bgr_pre_receive_parse(
- "4f1f932f6ef6d6c9770266775c2db072964d7a62 "
- "3fff4bb3172f77b292b0c913749e81bedd3545f3 "
- "refs/heads/lol"));
- assert_null(_bgr_pre_receive_parse(
- "4f1f932f6ef6d6c9770266775c2db072964d7a62 "
- "3fff4bb3172f77b292b0c913749e81bedd3545f3 "
- "refs/heads/master"));
- assert_null(_bgr_pre_receive_parse(
- "4f1f932f6ef6d6c9770266775c2db072964d7a62 "
- "3fff4bb3172f77b292b0c913749e81bedd3545f3 "
- "adgfdgdfgfdgdfgdfgdfgdfgdfg\n"));
-
- bc_trie_t *t;
- t = _bgr_pre_receive_parse(
- "4f1f932f6ef6d6c9770266775c2db072964d7a62 "
- "3fff4bb3172f77b292b0c913749e81bedd3545f3 "
- "refs/heads/master asd\n");
- assert_non_null(t);
- assert_int_equal(bc_trie_size(t), 1);
- assert_string_equal(bc_trie_lookup(t, "master asd"),
- "3fff4bb3172f77b292b0c913749e81bedd3545f3");
- bc_trie_free(t);
-
- t = _bgr_pre_receive_parse(
- "4f1f932f6ef6d6c9770266775c2db072964d7a62 "
- "3fff4bb3172f77b292b0c913749e81bedd3545f3 "
- "refs/heads/master\n");
- assert_non_null(t);
- assert_int_equal(bc_trie_size(t), 1);
- assert_string_equal(bc_trie_lookup(t, "master"),
- "3fff4bb3172f77b292b0c913749e81bedd3545f3");
- bc_trie_free(t);
-
- t = _bgr_pre_receive_parse(
- "4f1f932f6ef6d6c9770266775c2db072964d7a62 "
- "3fff4bb3172f77b292b0c913749e81bedd3545fa "
- "refs/heads/master\n"
- "4f1f932f6ef6d6c9770266775c2db072964d7a63 "
- "3fff4bb3172f77b292b0c913749e81bedd3545f4 "
- "refs/heads/bola\n"
- );
- assert_non_null(t);
- assert_int_equal(bc_trie_size(t), 2);
- assert_string_equal(bc_trie_lookup(t, "master"),
- "3fff4bb3172f77b292b0c913749e81bedd3545fa");
- assert_string_equal(bc_trie_lookup(t, "bola"),
- "3fff4bb3172f77b292b0c913749e81bedd3545f4");
- bc_trie_free(t);
-
- t = _bgr_pre_receive_parse(
- "4f1f932f6ef6d6c9770266775c2db072964d7a63 "
- "3fff4bb3172f77b292b0c913749e81bedd3545f4 "
- "refs/heads/bola\n"
- "4f1f932f6ef6d6c9770266775c2db072964d7a62 "
- "3fff4bb3172f77b292b0c913749e81bedd3545fb "
- "refs/heads/master\n"
- );
- assert_non_null(t);
- assert_int_equal(bc_trie_size(t), 2);
- assert_string_equal(bc_trie_lookup(t, "bola"),
- "3fff4bb3172f77b292b0c913749e81bedd3545f4");
- assert_string_equal(bc_trie_lookup(t, "master"),
- "3fff4bb3172f77b292b0c913749e81bedd3545fb");
- bc_trie_free(t);
-
- t = _bgr_pre_receive_parse(
- "4f1f932f6ef6d6c9770266775c2db072964d7a63 "
- "3fff4bb3172f77b292b0c913749e81bedd3545f4 "
- "refs/heads/bola\n"
- "4f1f932f6ef6d6c9770266775c2db072964d7a62 "
- "3fff4bb3172f77b292b0c913749e81bedd3545fc "
- "refs/heads/master\n"
- "4f1f932f6ef6d6c9770266775c2db072964d7a64 "
- "3fff4bb3172f77b292b0c913749e81bedd3545f5 "
- "refs/heads/bolao\n"
- );
- assert_non_null(t);
- assert_int_equal(bc_trie_size(t), 3);
- assert_string_equal(bc_trie_lookup(t, "bola"),
- "3fff4bb3172f77b292b0c913749e81bedd3545f4");
- assert_string_equal(bc_trie_lookup(t, "master"),
- "3fff4bb3172f77b292b0c913749e81bedd3545fc");
- assert_string_equal(bc_trie_lookup(t, "bolao"),
- "3fff4bb3172f77b292b0c913749e81bedd3545f5");
- bc_trie_free(t);
-}
-
-
-int
-main(void)
-{
- const struct CMUnitTest tests[] = {
- cmocka_unit_test(test_pre_receive_parse),
- };
- return cmocka_run_group_tests(tests, NULL, NULL);
-}
diff --git a/tests/blogc-git-receiver/check_settings.c b/tests/blogc-git-receiver/check_settings.c
deleted file mode 100644
index 61cd469..0000000
--- a/tests/blogc-git-receiver/check_settings.c
+++ /dev/null
@@ -1,91 +0,0 @@
-/*
- * blogc: A blog compiler.
- * Copyright (C) 2014-2019 Rafael G. Martins <rafael@rafaelmartins.eng.br>
- *
- * This program can be distributed under the terms of the BSD License.
- * See the file LICENSE.
- */
-
-#include <stdarg.h>
-#include <stddef.h>
-#include <setjmp.h>
-#include <cmocka.h>
-#include <string.h>
-#include <stdlib.h>
-#include "../../src/common/config-parser.h"
-#include "../../src/common/utils.h"
-#include "../../src/blogc-git-receiver/settings.h"
-
-
-char*
-__wrap_realpath(const char *path, char *resolved_path)
-{
- const char *real_path = mock_type(const char*);
- if (real_path == NULL)
- return NULL;
- assert_string_equal(path, real_path);
- return bc_strdup(real_path);
-}
-
-
-static void
-test_settings_get_section(void **state)
-{
- bc_error_t *err = NULL;
-
- setenv("HOME", "/home/blogc", 1);
-
- bc_config_t *config = bc_config_parse("", 0, NULL, &err);
- assert_null(err);
- assert_null(bgr_settings_get_section(config, "/home/blogc/repos/foo.git"));
- bc_config_free(config);
-
- will_return(__wrap_realpath, NULL);
- will_return(__wrap_realpath, "/home/blogc/repos/bar.git");
- const char *conf =
- "[repo:foo.git]\n"
- "mirror = foo\n"
- "\n"
- "[repo:bar.git]\n"
- "mirror = bar\n"
- "\n"
- "[repo:baz.git]\n"
- "mirror = baz\n"
- "\n";
- config = bc_config_parse(conf, strlen(conf), NULL, &err);
- assert_null(err);
- char *s = bgr_settings_get_section(config, "/home/blogc/repos/bar.git");
- assert_string_equal(s, "repo:bar.git");
- free(s);
- bc_config_free(config);
-
- setenv("BLOGC_GIT_RECEIVER_BASE_DIR", "/home/bola", 1);
- will_return(__wrap_realpath, NULL);
- will_return(__wrap_realpath, "/home/bola/repos/asd/bar.git");
- conf =
- "[repo:asd/foo.git]\n"
- "mirror = foo\n"
- "\n"
- "[repo:asd/bar.git]\n"
- "mirror = bar\n"
- "\n"
- "[repo:asd/baz.git]\n"
- "mirror = baz\n"
- "\n";
- config = bc_config_parse(conf, strlen(conf), NULL, &err);
- assert_null(err);
- s = bgr_settings_get_section(config, "/home/bola/repos/asd/bar.git");
- assert_string_equal(s, "repo:asd/bar.git");
- free(s);
- bc_config_free(config);
-}
-
-
-int
-main(void)
-{
- const struct CMUnitTest tests[] = {
- cmocka_unit_test(test_settings_get_section),
- };
- return cmocka_run_group_tests(tests, NULL, NULL);
-}
diff --git a/tests/blogc-git-receiver/check_shell.sh.in b/tests/blogc-git-receiver/check_shell.sh.in
deleted file mode 100755
index f70fc50..0000000
--- a/tests/blogc-git-receiver/check_shell.sh.in
+++ /dev/null
@@ -1,95 +0,0 @@
-#!@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
-
-SELF="@abs_top_builddir@/blogc-git-receiver"
-
-call_bgr() {
- [[ -n "${VALGRIND}" ]] && export __VALGRIND_ENABLED=1
- SHELL="${SELF}" HOME="${TEMP}" ${TESTS_ENVIRONMENT} "${SELF}" "$@"
-}
-
-call_bgr -c "bola 'lol.git'" 2>&1 | tee "${TEMP}/output.txt" || true
-grep "error: invalid git-shell command: bola 'lol\.git'" "${TEMP}/output.txt" &> /dev/null
-
-echo 0000 | call_bgr -c "git-receive-pack 'lol.git'" 2>&1 > "${TEMP}/output.txt"
-if [[ -n "${VALGRIND}" ]]; then
- grep "git-shell -c \"git-receive-pack '.*repos/lol.git'\"" "${TEMP}/output.txt" &> /dev/null
-else
- grep "agent=" "${TEMP}/output.txt" &> /dev/null
-fi
-[[ -d "${TEMP}/repos/lol.git" ]]
-[[ -h "${TEMP}/repos/lol.git/hooks/pre-receive" ]]
-[[ "$(readlink "${TEMP}/repos/lol.git/hooks/pre-receive")" == "${SELF}" ]]
-[[ -h "${TEMP}/repos/lol.git/hooks/post-receive" ]]
-[[ "$(readlink "${TEMP}/repos/lol.git/hooks/post-receive")" == "${SELF}" ]]
-
-rm "${TEMP}/repos/lol.git/hooks/pre-receive"
-ln -s /lolheheasdxd "${TEMP}/repos/lol.git/hooks/pre-receive"
-
-echo 0000 | call_bgr -c "git-receive-pack 'lol.git'" 2>&1 > "${TEMP}/output.txt"
-if [[ -n "${VALGRIND}" ]]; then
- grep "git-shell -c \"git-receive-pack '.*repos/lol.git'\"" "${TEMP}/output.txt" &> /dev/null
-else
- grep "agent=" "${TEMP}/output.txt" &> /dev/null
-fi
-[[ -d "${TEMP}/repos/lol.git" ]]
-[[ -h "${TEMP}/repos/lol.git/hooks/pre-receive" ]]
-[[ "$(readlink "${TEMP}/repos/lol.git/hooks/pre-receive")" == "${SELF}" ]]
-[[ -h "${TEMP}/repos/lol.git/hooks/post-receive" ]]
-[[ "$(readlink "${TEMP}/repos/lol.git/hooks/post-receive")" == "${SELF}" ]]
-
-cat > "${TEMP}/tmp.txt" <<EOF
-blob
-mark :1
-data 4
-bar
-
-reset refs/heads/master
-commit refs/heads/master
-mark :2
-author Rafael G. Martins <rafael@rafaelmartins.eng.br> 1476033730 +0200
-committer Rafael G. Martins <rafael@rafaelmartins.eng.br> 1476033888 +0200
-data 11
-testing...
-M 100644 :1 foo
-
-EOF
-cd "${TEMP}/repos/lol.git"
-git fast-import < "${TEMP}/tmp.txt" &> /dev/null
-cd - > /dev/null
-
-echo 0000 | call_bgr -c "git-upload-pack 'lol.git'" 2>&1 > "${TEMP}/output.txt"
-if [[ -n "${VALGRIND}" ]]; then
- grep "git-shell -c \"git-upload-pack '.*repos/lol.git'\"" "${TEMP}/output.txt" &> /dev/null
-else
- grep "agent=" "${TEMP}/output.txt" &> /dev/null
-fi
-
-echo 0000 | SSH_ORIGINAL_COMMAND="git-upload-pack 'lol.git'" call_bgr 2>&1 > "${TEMP}/output.txt"
-if [[ -n "${VALGRIND}" ]]; then
- grep "git-shell -c \"git-upload-pack '.*repos/lol.git'\"" "${TEMP}/output.txt" &> /dev/null
-else
- grep "agent=" "${TEMP}/output.txt" &> /dev/null
-fi
-
-echo 0000 | call_bgr -c "git-upload-archive 'lol.git'" 2>&1 > "${TEMP}/output.txt" || true
-if [[ -n "${VALGRIND}" ]]; then
- grep "git-shell -c \"git-upload-archive '.*repos/lol.git'\"" "${TEMP}/output.txt" &> /dev/null
-else
- grep "ACK" "${TEMP}/output.txt" &> /dev/null
-fi
-
-rm "${TEMP}/output.txt"
diff --git a/tests/blogc-git-receiver/check_shell_command_parser.c b/tests/blogc-git-receiver/check_shell_command_parser.c
deleted file mode 100644
index eafeabb..0000000
--- a/tests/blogc-git-receiver/check_shell_command_parser.c
+++ /dev/null
@@ -1,215 +0,0 @@
-/*
- * blogc: A blog compiler.
- * Copyright (C) 2014-2019 Rafael G. Martins <rafael@rafaelmartins.eng.br>
- *
- * This program can be distributed under the terms of the BSD License.
- * See the file LICENSE.
- */
-
-#include <stdarg.h>
-#include <stddef.h>
-#include <setjmp.h>
-#include <cmocka.h>
-#include <stdlib.h>
-#include "../../src/blogc-git-receiver/shell-command-parser.h"
-
-
-static void
-test_shell_command_parse(void **state)
-{
- char *t;
- assert_null(bgr_shell_command_parse(""));
- assert_null(bgr_shell_command_parse("bola"));
- assert_null(bgr_shell_command_parse("bola guda"));
- assert_null(bgr_shell_command_parse("bola 'guda'"));
- t = bgr_shell_command_parse("git-receive-pack 'bola.git'");
- assert_string_equal(t, "bola.git");
- free(t);
- t = bgr_shell_command_parse("git-upload-pack 'bolaa.git'");
- assert_string_equal(t, "bolaa.git");
- free(t);
- t = bgr_shell_command_parse("git-upload-archive 'bolab.git'");
- assert_string_equal(t, "bolab.git");
- free(t);
- t = bgr_shell_command_parse("git-receive-pack '/bola1.git'");
- assert_string_equal(t, "bola1.git");
- free(t);
- t = bgr_shell_command_parse("git-receive-pack '/bola2.git/'");
- assert_string_equal(t, "bola2.git/");
- free(t);
- t = bgr_shell_command_parse("git-receive-pack 'bola3.git/'");
- assert_string_equal(t, "bola3.git/");
- free(t);
- t = bgr_shell_command_parse("git-receive-pack 'foo/bola.git'");
- assert_string_equal(t, "foo/bola.git");
- free(t);
- t = bgr_shell_command_parse("git-receive-pack '/foo/bola1.git'");
- assert_string_equal(t, "foo/bola1.git");
- free(t);
- t = bgr_shell_command_parse("git-receive-pack '/foo/bola2.git/'");
- assert_string_equal(t, "foo/bola2.git/");
- free(t);
- t = bgr_shell_command_parse("git-receive-pack 'foo/bola3.git/'");
- assert_string_equal(t, "foo/bola3.git/");
- free(t);
-
- t = bgr_shell_command_parse("git-receive-pack ''\\''bola.git'");
- assert_string_equal(t, "'bola.git");
- free(t);
- t = bgr_shell_command_parse("git-receive-pack ''\\''/bola1.git'");
- assert_string_equal(t, "'/bola1.git");
- free(t);
- t = bgr_shell_command_parse("git-receive-pack ''\\''/bola2.git/'");
- assert_string_equal(t, "'/bola2.git/");
- free(t);
- t = bgr_shell_command_parse("git-receive-pack ''\\''bola3.git/'");
- assert_string_equal(t, "'bola3.git/");
- free(t);
- t = bgr_shell_command_parse("git-receive-pack ''\\''foo/bola.git'");
- assert_string_equal(t, "'foo/bola.git");
- free(t);
- t = bgr_shell_command_parse("git-receive-pack ''\\''/foo/bola1.git'");
- assert_string_equal(t, "'/foo/bola1.git");
- free(t);
- t = bgr_shell_command_parse("git-receive-pack ''\\''/foo/bola2.git/'");
- assert_string_equal(t, "'/foo/bola2.git/");
- free(t);
- t = bgr_shell_command_parse("git-receive-pack ''\\''foo/bola3.git/'");
- assert_string_equal(t, "'foo/bola3.git/");
- free(t);
-
- t = bgr_shell_command_parse("git-receive-pack 'bola.git'\\'''");
- assert_string_equal(t, "bola.git'");
- free(t);
- t = bgr_shell_command_parse("git-receive-pack '/bola1.git'\\'''");
- assert_string_equal(t, "bola1.git'");
- free(t);
- t = bgr_shell_command_parse("git-receive-pack '/bola2.git/'\\'''");
- assert_string_equal(t, "bola2.git/'");
- free(t);
- t = bgr_shell_command_parse("git-receive-pack 'bola3.git/'\\'''");
- assert_string_equal(t, "bola3.git/'");
- free(t);
- t = bgr_shell_command_parse("git-receive-pack 'foo/bola.git'\\'''");
- assert_string_equal(t, "foo/bola.git'");
- free(t);
- t = bgr_shell_command_parse("git-receive-pack '/foo/bola1.git'\\'''");
- assert_string_equal(t, "foo/bola1.git'");
- free(t);
- t = bgr_shell_command_parse("git-receive-pack '/foo/bola2.git/'\\'''");
- assert_string_equal(t, "foo/bola2.git/'");
- free(t);
- t = bgr_shell_command_parse("git-receive-pack 'foo/bola3.git/'\\'''");
- assert_string_equal(t, "foo/bola3.git/'");
- free(t);
-
- t = bgr_shell_command_parse("git-receive-pack 'bo'\\''la.git'");
- assert_string_equal(t, "bo'la.git");
- free(t);
- t = bgr_shell_command_parse("git-receive-pack '/bo'\\''la1.git'");
- assert_string_equal(t, "bo'la1.git");
- free(t);
- t = bgr_shell_command_parse("git-receive-pack '/bo'\\''la2.git/'");
- assert_string_equal(t, "bo'la2.git/");
- free(t);
- t = bgr_shell_command_parse("git-receive-pack 'bo'\\''la3.git/'");
- assert_string_equal(t, "bo'la3.git/");
- free(t);
- t = bgr_shell_command_parse("git-receive-pack 'foo/bo'\\''la.git'");
- assert_string_equal(t, "foo/bo'la.git");
- free(t);
- t = bgr_shell_command_parse("git-receive-pack '/foo/bo'\\''la1.git'");
- assert_string_equal(t, "foo/bo'la1.git");
- free(t);
- t = bgr_shell_command_parse("git-receive-pack '/foo/bo'\\''la2.git/'");
- assert_string_equal(t, "foo/bo'la2.git/");
- free(t);
- t = bgr_shell_command_parse("git-receive-pack 'foo/bo'\\''la3.git/'");
- assert_string_equal(t, "foo/bo'la3.git/");
- free(t);
-
- t = bgr_shell_command_parse("git-receive-pack ''\\!'bola.git'");
- assert_string_equal(t, "!bola.git");
- free(t);
- t = bgr_shell_command_parse("git-receive-pack ''\\!'/bola1.git'");
- assert_string_equal(t, "!/bola1.git");
- free(t);
- t = bgr_shell_command_parse("git-receive-pack ''\\!'/bola2.git/'");
- assert_string_equal(t, "!/bola2.git/");
- free(t);
- t = bgr_shell_command_parse("git-receive-pack ''\\!'bola3.git/'");
- assert_string_equal(t, "!bola3.git/");
- free(t);
- t = bgr_shell_command_parse("git-receive-pack ''\\!'foo/bola.git'");
- assert_string_equal(t, "!foo/bola.git");
- free(t);
- t = bgr_shell_command_parse("git-receive-pack ''\\!'/foo/bola1.git'");
- assert_string_equal(t, "!/foo/bola1.git");
- free(t);
- t = bgr_shell_command_parse("git-receive-pack ''\\!'/foo/bola2.git/'");
- assert_string_equal(t, "!/foo/bola2.git/");
- free(t);
- t = bgr_shell_command_parse("git-receive-pack ''\\!'foo/bola3.git/'");
- assert_string_equal(t, "!foo/bola3.git/");
- free(t);
-
- t = bgr_shell_command_parse("git-receive-pack 'bola.git'\\!''");
- assert_string_equal(t, "bola.git!");
- free(t);
- t = bgr_shell_command_parse("git-receive-pack '/bola1.git'\\!''");
- assert_string_equal(t, "bola1.git!");
- free(t);
- t = bgr_shell_command_parse("git-receive-pack '/bola2.git/'\\!''");
- assert_string_equal(t, "bola2.git/!");
- free(t);
- t = bgr_shell_command_parse("git-receive-pack 'bola3.git/'\\!''");
- assert_string_equal(t, "bola3.git/!");
- free(t);
- t = bgr_shell_command_parse("git-receive-pack 'foo/bola.git'\\!''");
- assert_string_equal(t, "foo/bola.git!");
- free(t);
- t = bgr_shell_command_parse("git-receive-pack '/foo/bola1.git'\\!''");
- assert_string_equal(t, "foo/bola1.git!");
- free(t);
- t = bgr_shell_command_parse("git-receive-pack '/foo/bola2.git/'\\!''");
- assert_string_equal(t, "foo/bola2.git/!");
- free(t);
- t = bgr_shell_command_parse("git-receive-pack 'foo/bola3.git/'\\!''");
- assert_string_equal(t, "foo/bola3.git/!");
- free(t);
-
- t = bgr_shell_command_parse("git-receive-pack 'bo'\\!'la.git'");
- assert_string_equal(t, "bo!la.git");
- free(t);
- t = bgr_shell_command_parse("git-receive-pack '/bo'\\!'la1.git'");
- assert_string_equal(t, "bo!la1.git");
- free(t);
- t = bgr_shell_command_parse("git-receive-pack '/bo'\\!'la2.git/'");
- assert_string_equal(t, "bo!la2.git/");
- free(t);
- t = bgr_shell_command_parse("git-receive-pack 'bo'\\!'la3.git/'");
- assert_string_equal(t, "bo!la3.git/");
- free(t);
- t = bgr_shell_command_parse("git-receive-pack 'foo/bo'\\!'la.git'");
- assert_string_equal(t, "foo/bo!la.git");
- free(t);
- t = bgr_shell_command_parse("git-receive-pack '/foo/bo'\\!'la1.git'");
- assert_string_equal(t, "foo/bo!la1.git");
- free(t);
- t = bgr_shell_command_parse("git-receive-pack '/foo/bo'\\!'la2.git/'");
- assert_string_equal(t, "foo/bo!la2.git/");
- free(t);
- t = bgr_shell_command_parse("git-receive-pack 'foo/bo'\\!'la3.git/'");
- assert_string_equal(t, "foo/bo!la3.git/");
- free(t);
-}
-
-
-int
-main(void)
-{
- const struct CMUnitTest tests[] = {
- cmocka_unit_test(test_shell_command_parse),
- };
- return cmocka_run_group_tests(tests, NULL, NULL);
-}
diff --git a/tests/blogc-make/check_atom.c b/tests/blogc-make/check_atom.c
deleted file mode 100644
index e93bc76..0000000
--- a/tests/blogc-make/check_atom.c
+++ /dev/null
@@ -1,552 +0,0 @@
-/*
- * blogc: A blog compiler.
- * Copyright (C) 2014-2020 Rafael G. Martins <rafael@rafaelmartins.eng.br>
- *
- * This program can be distributed under the terms of the BSD License.
- * See the file LICENSE.
- */
-
-#include <stdarg.h>
-#include <stddef.h>
-#include <setjmp.h>
-#include <cmocka.h>
-
-#include <stdlib.h>
-#include <string.h>
-
-#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_generate_empty_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(""));
- bc_trie_insert(settings->settings, "atom_ext", bc_strdup(".xml"));
- bc_trie_insert(settings->settings, "post_prefix", bc_strdup(""));
- bc_trie_insert(settings->settings, "html_ext", bc_strdup(".html"));
-
- char *cmp = bm_atom_generate(settings);
-
- assert_non_null(cmp);
-
- assert_string_equal(cmp,
- "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n"
- "<feed xmlns=\"http://www.w3.org/2005/Atom\">\n"
- " <title type=\"text\">{{ SITE_TITLE }}{% ifdef FILTER_TAG %} - "
- "{{ FILTER_TAG }}{% endif %}</title>\n"
- " <id>{{ BASE_DOMAIN }}{{ BASE_URL }}{% ifdef FILTER_TAG %}/{{ FILTER_TAG }}"
- "{% else %}/index{% endif %}.xml</id>\n"
- " <updated>{{ DATE_FIRST_FORMATTED }}</updated>\n"
- " <link href=\"{{ BASE_DOMAIN }}{{ BASE_URL }}/\" />\n"
- " <link href=\"{{ BASE_DOMAIN }}{{ BASE_URL }}{% ifdef FILTER_TAG %}"
- "/{{ FILTER_TAG }}{% else %}/index{% endif %}.xml\" rel=\"self\" />\n"
- " <author>\n"
- " <name>{{ AUTHOR_NAME }}</name>\n"
- " <email>{{ AUTHOR_EMAIL }}</email>\n"
- " </author>\n"
- " <subtitle type=\"text\">{{ SITE_TAGLINE }}</subtitle>\n"
- " {%- block listing %}\n"
- " <entry>\n"
- " <title type=\"text\">{{ TITLE }}</title>\n"
- " <id>{{ BASE_DOMAIN }}{{ BASE_URL }}/{{ FILENAME }}.html</id>\n"
- " <updated>{{ DATE_FORMATTED }}</updated>\n"
- " <published>{{ DATE_FORMATTED }}</published>\n"
- " <link href=\"{{ BASE_DOMAIN }}{{ BASE_URL }}/{{ FILENAME }}.html\" />\n"
- " <author>\n"
- " <name>{{ AUTHOR_NAME }}</name>\n"
- " <email>{{ AUTHOR_EMAIL }}</email>\n"
- " </author>\n"
- " <content type=\"html\"><![CDATA[{{ CONTENT }}]]></content>\n"
- " </entry>\n"
- " {%- endblock %}\n"
- "</feed>\n");
-
- free(cmp);
- bc_trie_free(settings->settings);
- free(settings);
-}
-
-
-static void
-test_atom_generate_empty_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(""));
- bc_trie_insert(settings->settings, "atom_ext", bc_strdup("/index.xml"));
- bc_trie_insert(settings->settings, "post_prefix", bc_strdup(""));
- bc_trie_insert(settings->settings, "html_ext", bc_strdup("/index.html"));
-
- char *cmp = bm_atom_generate(settings);
-
- assert_non_null(cmp);
-
- assert_string_equal(cmp,
- "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n"
- "<feed xmlns=\"http://www.w3.org/2005/Atom\">\n"
- " <title type=\"text\">{{ SITE_TITLE }}{% ifdef FILTER_TAG %} - "
- "{{ FILTER_TAG }}{% endif %}</title>\n"
- " <id>{{ BASE_DOMAIN }}{{ BASE_URL }}{% ifdef FILTER_TAG %}/{{ FILTER_TAG }}"
- "{% endif %}/index.xml</id>\n"
- " <updated>{{ DATE_FIRST_FORMATTED }}</updated>\n"
- " <link href=\"{{ BASE_DOMAIN }}{{ BASE_URL }}/\" />\n"
- " <link href=\"{{ BASE_DOMAIN }}{{ BASE_URL }}{% ifdef FILTER_TAG %}"
- "/{{ FILTER_TAG }}{% endif %}/index.xml\" rel=\"self\" />\n"
- " <author>\n"
- " <name>{{ AUTHOR_NAME }}</name>\n"
- " <email>{{ AUTHOR_EMAIL }}</email>\n"
- " </author>\n"
- " <subtitle type=\"text\">{{ SITE_TAGLINE }}</subtitle>\n"
- " {%- block listing %}\n"
- " <entry>\n"
- " <title type=\"text\">{{ TITLE }}</title>\n"
- " <id>{{ BASE_DOMAIN }}{{ BASE_URL }}/{{ FILENAME }}/index.html</id>\n"
- " <updated>{{ DATE_FORMATTED }}</updated>\n"
- " <published>{{ DATE_FORMATTED }}</published>\n"
- " <link href=\"{{ BASE_DOMAIN }}{{ BASE_URL }}/{{ FILENAME }}/index.html\" />\n"
- " <author>\n"
- " <name>{{ AUTHOR_NAME }}</name>\n"
- " <email>{{ AUTHOR_EMAIL }}</email>\n"
- " </author>\n"
- " <content type=\"html\"><![CDATA[{{ CONTENT }}]]></content>\n"
- " </entry>\n"
- " {%- endblock %}\n"
- "</feed>\n");
-
- free(cmp);
- bc_trie_free(settings->settings);
- free(settings);
-}
-
-
-static void
-test_atom_generate_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_trie_insert(settings->settings, "html_ext", bc_strdup(".html"));
-
- char *cmp = bm_atom_generate(settings);
-
- assert_non_null(cmp);
-
- assert_string_equal(cmp,
- "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n"
- "<feed xmlns=\"http://www.w3.org/2005/Atom\">\n"
- " <title type=\"text\">{{ SITE_TITLE }}{% ifdef FILTER_TAG %} - "
- "{{ FILTER_TAG }}{% endif %}</title>\n"
- " <id>{{ BASE_DOMAIN }}{{ BASE_URL }}/atom{% ifdef FILTER_TAG %}/{{ FILTER_TAG }}"
- "{% endif %}.xml</id>\n"
- " <updated>{{ DATE_FIRST_FORMATTED }}</updated>\n"
- " <link href=\"{{ BASE_DOMAIN }}{{ BASE_URL }}/\" />\n"
- " <link href=\"{{ BASE_DOMAIN }}{{ BASE_URL }}/atom{% ifdef FILTER_TAG %}"
- "/{{ FILTER_TAG }}{% endif %}.xml\" rel=\"self\" />\n"
- " <author>\n"
- " <name>{{ AUTHOR_NAME }}</name>\n"
- " <email>{{ AUTHOR_EMAIL }}</email>\n"
- " </author>\n"
- " <subtitle type=\"text\">{{ SITE_TAGLINE }}</subtitle>\n"
- " {%- block listing %}\n"
- " <entry>\n"
- " <title type=\"text\">{{ TITLE }}</title>\n"
- " <id>{{ BASE_DOMAIN }}{{ BASE_URL }}/post/{{ FILENAME }}.html</id>\n"
- " <updated>{{ DATE_FORMATTED }}</updated>\n"
- " <published>{{ DATE_FORMATTED }}</published>\n"
- " <link href=\"{{ BASE_DOMAIN }}{{ BASE_URL }}/post/{{ FILENAME }}.html\" />\n"
- " <author>\n"
- " <name>{{ AUTHOR_NAME }}</name>\n"
- " <email>{{ AUTHOR_EMAIL }}</email>\n"
- " </author>\n"
- " <content type=\"html\"><![CDATA[{{ CONTENT }}]]></content>\n"
- " </entry>\n"
- " {%- endblock %}\n"
- "</feed>\n");
-
- free(cmp);
- bc_trie_free(settings->settings);
- free(settings);
-}
-
-
-static void
-test_atom_generate_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_trie_insert(settings->settings, "html_ext", bc_strdup("/index.html"));
-
- char *cmp = bm_atom_generate(settings);
-
- assert_non_null(cmp);
-
- assert_string_equal(cmp,
- "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n"
- "<feed xmlns=\"http://www.w3.org/2005/Atom\">\n"
- " <title type=\"text\">{{ SITE_TITLE }}{% ifdef FILTER_TAG %} - "
- "{{ FILTER_TAG }}{% endif %}</title>\n"
- " <id>{{ BASE_DOMAIN }}{{ BASE_URL }}/atom{% ifdef FILTER_TAG %}/{{ FILTER_TAG }}"
- "{% endif %}/index.xml</id>\n"
- " <updated>{{ DATE_FIRST_FORMATTED }}</updated>\n"
- " <link href=\"{{ BASE_DOMAIN }}{{ BASE_URL }}/\" />\n"
- " <link href=\"{{ BASE_DOMAIN }}{{ BASE_URL }}/atom{% ifdef FILTER_TAG %}"
- "/{{ FILTER_TAG }}{% endif %}/index.xml\" rel=\"self\" />\n"
- " <author>\n"
- " <name>{{ AUTHOR_NAME }}</name>\n"
- " <email>{{ AUTHOR_EMAIL }}</email>\n"
- " </author>\n"
- " <subtitle type=\"text\">{{ SITE_TAGLINE }}</subtitle>\n"
- " {%- block listing %}\n"
- " <entry>\n"
- " <title type=\"text\">{{ TITLE }}</title>\n"
- " <id>{{ BASE_DOMAIN }}{{ BASE_URL }}/post/{{ FILENAME }}/index.html</id>\n"
- " <updated>{{ DATE_FORMATTED }}</updated>\n"
- " <published>{{ DATE_FORMATTED }}</published>\n"
- " <link href=\"{{ BASE_DOMAIN }}{{ BASE_URL }}/post/{{ FILENAME }}/index.html\" />\n"
- " <author>\n"
- " <name>{{ AUTHOR_NAME }}</name>\n"
- " <email>{{ AUTHOR_EMAIL }}</email>\n"
- " </author>\n"
- " <content type=\"html\"><![CDATA[{{ CONTENT }}]]></content>\n"
- " </entry>\n"
- " {%- endblock %}\n"
- "</feed>\n");
-
- free(cmp);
- bc_trie_free(settings->settings);
- free(settings);
-}
-
-
-static void
-test_atom_empty_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(""));
- bc_trie_insert(settings->settings, "atom_ext", bc_strdup(".xml"));
- bc_trie_insert(settings->settings, "post_prefix", bc_strdup(""));
- bc_trie_insert(settings->settings, "html_ext", bc_strdup(".html"));
-
- 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,
- "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n"
- "<feed xmlns=\"http://www.w3.org/2005/Atom\">\n"
- " <title type=\"text\">{{ SITE_TITLE }}{% ifdef FILTER_TAG %} - "
- "{{ FILTER_TAG }}{% endif %}</title>\n"
- " <id>{{ BASE_DOMAIN }}{{ BASE_URL }}{% ifdef FILTER_TAG %}/{{ FILTER_TAG }}"
- "{% else %}/index{% endif %}.xml</id>\n"
- " <updated>{{ DATE_FIRST_FORMATTED }}</updated>\n"
- " <link href=\"{{ BASE_DOMAIN }}{{ BASE_URL }}/\" />\n"
- " <link href=\"{{ BASE_DOMAIN }}{{ BASE_URL }}{% ifdef FILTER_TAG %}"
- "/{{ FILTER_TAG }}{% else %}/index{% endif %}.xml\" rel=\"self\" />\n"
- " <author>\n"
- " <name>{{ AUTHOR_NAME }}</name>\n"
- " <email>{{ AUTHOR_EMAIL }}</email>\n"
- " </author>\n"
- " <subtitle type=\"text\">{{ SITE_TAGLINE }}</subtitle>\n"
- " {%- block listing %}\n"
- " <entry>\n"
- " <title type=\"text\">{{ TITLE }}</title>\n"
- " <id>{{ BASE_DOMAIN }}{{ BASE_URL }}/{{ FILENAME }}.html</id>\n"
- " <updated>{{ DATE_FORMATTED }}</updated>\n"
- " <published>{{ DATE_FORMATTED }}</published>\n"
- " <link href=\"{{ BASE_DOMAIN }}{{ BASE_URL }}/{{ FILENAME }}.html\" />\n"
- " <author>\n"
- " <name>{{ AUTHOR_NAME }}</name>\n"
- " <email>{{ AUTHOR_EMAIL }}</email>\n"
- " </author>\n"
- " <content type=\"html\"><![CDATA[{{ CONTENT }}]]></content>\n"
- " </entry>\n"
- " {%- endblock %}\n"
- "</feed>\n");
-
- free(cmp);
- bm_atom_destroy(rv);
- free(rv);
- bc_trie_free(settings->settings);
- free(settings);
-}
-
-
-static void
-test_atom_empty_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(""));
- bc_trie_insert(settings->settings, "atom_ext", bc_strdup("/index.xml"));
- bc_trie_insert(settings->settings, "post_prefix", bc_strdup(""));
- bc_trie_insert(settings->settings, "html_ext", bc_strdup("/index.html"));
-
- 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,
- "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n"
- "<feed xmlns=\"http://www.w3.org/2005/Atom\">\n"
- " <title type=\"text\">{{ SITE_TITLE }}{% ifdef FILTER_TAG %} - "
- "{{ FILTER_TAG }}{% endif %}</title>\n"
- " <id>{{ BASE_DOMAIN }}{{ BASE_URL }}{% ifdef FILTER_TAG %}/{{ FILTER_TAG }}"
- "{% endif %}/index.xml</id>\n"
- " <updated>{{ DATE_FIRST_FORMATTED }}</updated>\n"
- " <link href=\"{{ BASE_DOMAIN }}{{ BASE_URL }}/\" />\n"
- " <link href=\"{{ BASE_DOMAIN }}{{ BASE_URL }}{% ifdef FILTER_TAG %}"
- "/{{ FILTER_TAG }}{% endif %}/index.xml\" rel=\"self\" />\n"
- " <author>\n"
- " <name>{{ AUTHOR_NAME }}</name>\n"
- " <email>{{ AUTHOR_EMAIL }}</email>\n"
- " </author>\n"
- " <subtitle type=\"text\">{{ SITE_TAGLINE }}</subtitle>\n"
- " {%- block listing %}\n"
- " <entry>\n"
- " <title type=\"text\">{{ TITLE }}</title>\n"
- " <id>{{ BASE_DOMAIN }}{{ BASE_URL }}/{{ FILENAME }}/index.html</id>\n"
- " <updated>{{ DATE_FORMATTED }}</updated>\n"
- " <published>{{ DATE_FORMATTED }}</published>\n"
- " <link href=\"{{ BASE_DOMAIN }}{{ BASE_URL }}/{{ FILENAME }}/index.html\" />\n"
- " <author>\n"
- " <name>{{ AUTHOR_NAME }}</name>\n"
- " <email>{{ AUTHOR_EMAIL }}</email>\n"
- " </author>\n"
- " <content type=\"html\"><![CDATA[{{ CONTENT }}]]></content>\n"
- " </entry>\n"
- " {%- endblock %}\n"
- "</feed>\n");
-
- free(cmp);
- bm_atom_destroy(rv);
- free(rv);
- bc_trie_free(settings->settings);
- free(settings);
-}
-
-
-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_trie_insert(settings->settings, "html_ext", bc_strdup(".html"));
-
- 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,
- "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n"
- "<feed xmlns=\"http://www.w3.org/2005/Atom\">\n"
- " <title type=\"text\">{{ SITE_TITLE }}{% ifdef FILTER_TAG %} - "
- "{{ FILTER_TAG }}{% endif %}</title>\n"
- " <id>{{ BASE_DOMAIN }}{{ BASE_URL }}/atom{% ifdef FILTER_TAG %}/{{ FILTER_TAG }}"
- "{% endif %}.xml</id>\n"
- " <updated>{{ DATE_FIRST_FORMATTED }}</updated>\n"
- " <link href=\"{{ BASE_DOMAIN }}{{ BASE_URL }}/\" />\n"
- " <link href=\"{{ BASE_DOMAIN }}{{ BASE_URL }}/atom{% ifdef FILTER_TAG %}"
- "/{{ FILTER_TAG }}{% endif %}.xml\" rel=\"self\" />\n"
- " <author>\n"
- " <name>{{ AUTHOR_NAME }}</name>\n"
- " <email>{{ AUTHOR_EMAIL }}</email>\n"
- " </author>\n"
- " <subtitle type=\"text\">{{ SITE_TAGLINE }}</subtitle>\n"
- " {%- block listing %}\n"
- " <entry>\n"
- " <title type=\"text\">{{ TITLE }}</title>\n"
- " <id>{{ BASE_DOMAIN }}{{ BASE_URL }}/post/{{ FILENAME }}.html</id>\n"
- " <updated>{{ DATE_FORMATTED }}</updated>\n"
- " <published>{{ DATE_FORMATTED }}</published>\n"
- " <link href=\"{{ BASE_DOMAIN }}{{ BASE_URL }}/post/{{ FILENAME }}.html\" />\n"
- " <author>\n"
- " <name>{{ AUTHOR_NAME }}</name>\n"
- " <email>{{ AUTHOR_EMAIL }}</email>\n"
- " </author>\n"
- " <content type=\"html\"><![CDATA[{{ CONTENT }}]]></content>\n"
- " </entry>\n"
- " {%- endblock %}\n"
- "</feed>\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_trie_insert(settings->settings, "html_ext", bc_strdup("/index.html"));
-
- 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,
- "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n"
- "<feed xmlns=\"http://www.w3.org/2005/Atom\">\n"
- " <title type=\"text\">{{ SITE_TITLE }}{% ifdef FILTER_TAG %} - "
- "{{ FILTER_TAG }}{% endif %}</title>\n"
- " <id>{{ BASE_DOMAIN }}{{ BASE_URL }}/atom{% ifdef FILTER_TAG %}/{{ FILTER_TAG }}"
- "{% endif %}/index.xml</id>\n"
- " <updated>{{ DATE_FIRST_FORMATTED }}</updated>\n"
- " <link href=\"{{ BASE_DOMAIN }}{{ BASE_URL }}/\" />\n"
- " <link href=\"{{ BASE_DOMAIN }}{{ BASE_URL }}/atom{% ifdef FILTER_TAG %}"
- "/{{ FILTER_TAG }}{% endif %}/index.xml\" rel=\"self\" />\n"
- " <author>\n"
- " <name>{{ AUTHOR_NAME }}</name>\n"
- " <email>{{ AUTHOR_EMAIL }}</email>\n"
- " </author>\n"
- " <subtitle type=\"text\">{{ SITE_TAGLINE }}</subtitle>\n"
- " {%- block listing %}\n"
- " <entry>\n"
- " <title type=\"text\">{{ TITLE }}</title>\n"
- " <id>{{ BASE_DOMAIN }}{{ BASE_URL }}/post/{{ FILENAME }}/index.html</id>\n"
- " <updated>{{ DATE_FORMATTED }}</updated>\n"
- " <published>{{ DATE_FORMATTED }}</published>\n"
- " <link href=\"{{ BASE_DOMAIN }}{{ BASE_URL }}/post/{{ FILENAME }}/index.html\" />\n"
- " <author>\n"
- " <name>{{ AUTHOR_NAME }}</name>\n"
- " <email>{{ AUTHOR_EMAIL }}</email>\n"
- " </author>\n"
- " <content type=\"html\"><![CDATA[{{ CONTENT }}]]></content>\n"
- " </entry>\n"
- " {%- endblock %}\n"
- "</feed>\n");
-
- free(cmp);
- bm_atom_destroy(rv);
- free(rv);
- bc_trie_free(settings->settings);
- free(settings);
-}
-
-
-static void
-test_atom_legacy_entry_id_empty(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(""));
- bc_trie_insert(settings->settings, "atom_ext", bc_strdup(".xml"));
- bc_trie_insert(settings->settings, "post_prefix", bc_strdup(""));
- bc_trie_insert(settings->settings, "html_ext", bc_strdup(".html"));
- bc_trie_insert(settings->settings, "atom_legacy_entry_id", bc_strdup("1"));
-
- bc_error_t *err = NULL;
- char *rv = bm_atom_deploy(settings, &err);
-
- assert_null(rv);
- assert_non_null(err);
-
- assert_int_equal(err->type, BLOGC_MAKE_ERROR_ATOM);
- assert_string_equal(err->msg,
- "'atom_legacy_entry_id' setting is not supported anymore. see "
- "https://blogc.rgm.io/news/blogc-0.16.1/ for details");
-
- bc_error_free(err);
- bc_trie_free(settings->settings);
- free(settings);
-}
-
-
-static void
-test_atom_legacy_entry_id(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_trie_insert(settings->settings, "html_ext", bc_strdup(".html"));
- bc_trie_insert(settings->settings, "atom_legacy_entry_id", bc_strdup("1"));
-
- bc_error_t *err = NULL;
- char *rv = bm_atom_deploy(settings, &err);
-
- assert_null(rv);
- assert_non_null(err);
-
- assert_int_equal(err->type, BLOGC_MAKE_ERROR_ATOM);
- assert_string_equal(err->msg,
- "'atom_legacy_entry_id' setting is not supported anymore. see "
- "https://blogc.rgm.io/news/blogc-0.16.1/ for details");
-
- bc_error_free(err);
- bc_trie_free(settings->settings);
- free(settings);
-}
-
-
-int
-main(void)
-{
- const struct CMUnitTest tests[] = {
- cmocka_unit_test(test_atom_generate_empty_file),
- cmocka_unit_test(test_atom_generate_empty_dir),
- cmocka_unit_test(test_atom_generate_file),
- cmocka_unit_test(test_atom_generate_dir),
- cmocka_unit_test(test_atom_empty_file),
- cmocka_unit_test(test_atom_empty_dir),
- cmocka_unit_test(test_atom_file),
- cmocka_unit_test(test_atom_dir),
- cmocka_unit_test(test_atom_legacy_entry_id_empty),
- cmocka_unit_test(test_atom_legacy_entry_id),
- };
- return cmocka_run_group_tests(tests, NULL, NULL);
-}
diff --git a/tests/blogc-make/check_blogc_make.sh.in b/tests/blogc-make/check_blogc_make.sh.in
deleted file mode 100755
index 73393d4..0000000
--- a/tests/blogc-make/check_blogc_make.sh.in
+++ /dev/null
@@ -1,2463 +0,0 @@
-#!@BASH@
-
-set -xe -o pipefail
-
-export LC_ALL=C
-
-export BLOGC=@abs_top_builddir@/blogc
-
-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/blogcfile" <<EOF
-[global]
-AUTHOR_NAME = Lol
-AUTHOR_EMAIL = author@example.com
-SITE_TITLE = Lol's Website
-SITE_TAGLINE = WAT?!
-BASE_DOMAIN = http://example.org
-EOF
-
-${TESTS_ENVIRONMENT} @abs_top_builddir@/blogc-make -f "${TEMP}/proj/blogcfile" 2>&1
-
-
-### default settings with some posts
-
-cat > "${TEMP}/proj/content/post/foo.txt" <<EOF
-TITLE: Foo
-DATE: 2016-10-01
-TAGS: qwe
-----------------
-This is foo.
-EOF
-
-cat > "${TEMP}/proj/content/post/bar.txt" <<EOF
-TITLE: Bar
-DATE: 2016-09-01
-TAGS: qwe
-----------------
-This is bar.
-EOF
-
-for i in $(seq -f "%02g" 1 11); do
- cat > "${TEMP}/proj/content/post/post${i}.txt" <<EOF
-TITLE: Post ${i}
-DATE: 2016-09-${i}
-TAGS: asd
-----------------
-This is Post ${i}.
-EOF
-done
-
-cat > "${TEMP}/proj/templates/main.tmpl" <<EOF
-{% block listing_entry %}{{ CONTENT }}{% endblock %}{% block listing %}
-Listing: {% ifdef FILTER_TAG %}{{ FILTER_TAG }} - {% endif %}{{ TITLE }} - {{ DATE_FORMATTED }}
-{% endblock %}
-{% block entry %}
-{{ TITLE }}{% if MAKE_TYPE == "post" %} - {{ DATE_FORMATTED }}{% endif %}
-
-{{ CONTENT }}
-{% endblock %}
-EOF
-
-cat >> "${TEMP}/proj/blogcfile" <<EOF
-[posts]
-foo
-bar
-EOF
-
-${TESTS_ENVIRONMENT} @abs_top_builddir@/blogc-make -f "${TEMP}/proj/blogcfile" 2>&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 -v "_build/page/2/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" <<EOF
-
-Listing: Bar - Sep 01, 2016, 12:00 AM GMT
-
-Listing: Foo - Oct 01, 2016, 12:00 AM GMT
-
-
-EOF
-diff -uN "${TEMP}/proj/_build/index.html" "${TEMP}/expected-index.html"
-diff -uN "${TEMP}/proj/_build/page/1/index.html" "${TEMP}/expected-index.html"
-
-cat > "${TEMP}/expected-atom.xml" <<EOF
-<?xml version="1.0" encoding="utf-8"?>
-<feed xmlns="http://www.w3.org/2005/Atom">
- <title type="text">Lol's Website</title>
- <id>http://example.org/atom.xml</id>
- <updated>2016-09-01T00:00:00Z</updated>
- <link href="http://example.org/" />
- <link href="http://example.org/atom.xml" rel="self" />
- <author>
- <name>Lol</name>
- <email>author@example.com</email>
- </author>
- <subtitle type="text">WAT?!</subtitle>
- <entry>
- <title type="text">Bar</title>
- <id>http://example.org/post/bar/index.html</id>
- <updated>2016-09-01T00:00:00Z</updated>
- <published>2016-09-01T00:00:00Z</published>
- <link href="http://example.org/post/bar/index.html" />
- <author>
- <name>Lol</name>
- <email>author@example.com</email>
- </author>
- <content type="html"><![CDATA[<p>This is bar.</p>
-]]></content>
- </entry>
- <entry>
- <title type="text">Foo</title>
- <id>http://example.org/post/foo/index.html</id>
- <updated>2016-10-01T00:00:00Z</updated>
- <published>2016-10-01T00:00:00Z</published>
- <link href="http://example.org/post/foo/index.html" />
- <author>
- <name>Lol</name>
- <email>author@example.com</email>
- </author>
- <content type="html"><![CDATA[<p>This is foo.</p>
-]]></content>
- </entry>
-</feed>
-EOF
-diff -uN "${TEMP}/proj/_build/atom.xml" "${TEMP}/expected-atom.xml"
-
-cat > "${TEMP}/expected-post-foo.html" <<EOF
-
-
-Foo - Oct 01, 2016, 12:00 AM GMT
-
-<p>This is foo.</p>
-
-
-EOF
-diff -uN "${TEMP}/proj/_build/post/foo/index.html" "${TEMP}/expected-post-foo.html"
-
-cat > "${TEMP}/expected-post-bar.html" <<EOF
-
-
-Bar - Sep 01, 2016, 12:00 AM GMT
-
-<p>This is bar.</p>
-
-
-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, posts per page -1
-
-cat > "${TEMP}/proj/blogcfile" <<EOF
-[global]
-AUTHOR_NAME = Lol
-AUTHOR_EMAIL = author@example.com
-SITE_TITLE = Lol's Website
-SITE_TAGLINE = WAT?!
-BASE_DOMAIN = http://example.org
-
-[settings]
-posts_per_page = -1
-atom_posts_per_page = -1
-
-[posts]
-post01
-post02
-post03
-post04
-post05
-post06
-post07
-post08
-post09
-post10
-post11
-EOF
-
-${TESTS_ENVIRONMENT} @abs_top_builddir@/blogc-make -f "${TEMP}/proj/blogcfile" 2>&1 | tee "${TEMP}/output.txt"
-grep "_build/index\\.html" "${TEMP}/output.txt"
-grep "_build/atom\\.xml" "${TEMP}/output.txt"
-grep "_build/post/post01/index\\.html" "${TEMP}/output.txt"
-grep "_build/post/post02/index\\.html" "${TEMP}/output.txt"
-grep "_build/post/post03/index\\.html" "${TEMP}/output.txt"
-grep "_build/post/post04/index\\.html" "${TEMP}/output.txt"
-grep "_build/post/post05/index\\.html" "${TEMP}/output.txt"
-grep "_build/post/post06/index\\.html" "${TEMP}/output.txt"
-grep "_build/post/post07/index\\.html" "${TEMP}/output.txt"
-grep "_build/post/post08/index\\.html" "${TEMP}/output.txt"
-grep "_build/post/post09/index\\.html" "${TEMP}/output.txt"
-grep "_build/post/post10/index\\.html" "${TEMP}/output.txt"
-grep "_build/post/post11/index\\.html" "${TEMP}/output.txt"
-
-rm "${TEMP}/output.txt"
-
-cat > "${TEMP}/expected-index.html" <<EOF
-
-Listing: Post 11 - Sep 11, 2016, 12:00 AM GMT
-
-Listing: Post 10 - Sep 10, 2016, 12:00 AM GMT
-
-Listing: Post 09 - Sep 09, 2016, 12:00 AM GMT
-
-Listing: Post 08 - Sep 08, 2016, 12:00 AM GMT
-
-Listing: Post 07 - Sep 07, 2016, 12:00 AM GMT
-
-Listing: Post 06 - Sep 06, 2016, 12:00 AM GMT
-
-Listing: Post 05 - Sep 05, 2016, 12:00 AM GMT
-
-Listing: Post 04 - Sep 04, 2016, 12:00 AM GMT
-
-Listing: Post 03 - Sep 03, 2016, 12:00 AM GMT
-
-Listing: Post 02 - Sep 02, 2016, 12:00 AM GMT
-
-Listing: Post 01 - Sep 01, 2016, 12:00 AM GMT
-
-
-EOF
-diff -uN "${TEMP}/proj/_build/index.html" "${TEMP}/expected-index.html"
-
-cat > "${TEMP}/expected-atom.xml" <<EOF
-<?xml version="1.0" encoding="utf-8"?>
-<feed xmlns="http://www.w3.org/2005/Atom">
- <title type="text">Lol's Website</title>
- <id>http://example.org/atom.xml</id>
- <updated>2016-09-11T00:00:00Z</updated>
- <link href="http://example.org/" />
- <link href="http://example.org/atom.xml" rel="self" />
- <author>
- <name>Lol</name>
- <email>author@example.com</email>
- </author>
- <subtitle type="text">WAT?!</subtitle>
- <entry>
- <title type="text">Post 11</title>
- <id>http://example.org/post/post11/index.html</id>
- <updated>2016-09-11T00:00:00Z</updated>
- <published>2016-09-11T00:00:00Z</published>
- <link href="http://example.org/post/post11/index.html" />
- <author>
- <name>Lol</name>
- <email>author@example.com</email>
- </author>
- <content type="html"><![CDATA[<p>This is Post 11.</p>
-]]></content>
- </entry>
- <entry>
- <title type="text">Post 10</title>
- <id>http://example.org/post/post10/index.html</id>
- <updated>2016-09-10T00:00:00Z</updated>
- <published>2016-09-10T00:00:00Z</published>
- <link href="http://example.org/post/post10/index.html" />
- <author>
- <name>Lol</name>
- <email>author@example.com</email>
- </author>
- <content type="html"><![CDATA[<p>This is Post 10.</p>
-]]></content>
- </entry>
- <entry>
- <title type="text">Post 09</title>
- <id>http://example.org/post/post09/index.html</id>
- <updated>2016-09-09T00:00:00Z</updated>
- <published>2016-09-09T00:00:00Z</published>
- <link href="http://example.org/post/post09/index.html" />
- <author>
- <name>Lol</name>
- <email>author@example.com</email>
- </author>
- <content type="html"><![CDATA[<p>This is Post 09.</p>
-]]></content>
- </entry>
- <entry>
- <title type="text">Post 08</title>
- <id>http://example.org/post/post08/index.html</id>
- <updated>2016-09-08T00:00:00Z</updated>
- <published>2016-09-08T00:00:00Z</published>
- <link href="http://example.org/post/post08/index.html" />
- <author>
- <name>Lol</name>
- <email>author@example.com</email>
- </author>
- <content type="html"><![CDATA[<p>This is Post 08.</p>
-]]></content>
- </entry>
- <entry>
- <title type="text">Post 07</title>
- <id>http://example.org/post/post07/index.html</id>
- <updated>2016-09-07T00:00:00Z</updated>
- <published>2016-09-07T00:00:00Z</published>
- <link href="http://example.org/post/post07/index.html" />
- <author>
- <name>Lol</name>
- <email>author@example.com</email>
- </author>
- <content type="html"><![CDATA[<p>This is Post 07.</p>
-]]></content>
- </entry>
- <entry>
- <title type="text">Post 06</title>
- <id>http://example.org/post/post06/index.html</id>
- <updated>2016-09-06T00:00:00Z</updated>
- <published>2016-09-06T00:00:00Z</published>
- <link href="http://example.org/post/post06/index.html" />
- <author>
- <name>Lol</name>
- <email>author@example.com</email>
- </author>
- <content type="html"><![CDATA[<p>This is Post 06.</p>
-]]></content>
- </entry>
- <entry>
- <title type="text">Post 05</title>
- <id>http://example.org/post/post05/index.html</id>
- <updated>2016-09-05T00:00:00Z</updated>
- <published>2016-09-05T00:00:00Z</published>
- <link href="http://example.org/post/post05/index.html" />
- <author>
- <name>Lol</name>
- <email>author@example.com</email>
- </author>
- <content type="html"><![CDATA[<p>This is Post 05.</p>
-]]></content>
- </entry>
- <entry>
- <title type="text">Post 04</title>
- <id>http://example.org/post/post04/index.html</id>
- <updated>2016-09-04T00:00:00Z</updated>
- <published>2016-09-04T00:00:00Z</published>
- <link href="http://example.org/post/post04/index.html" />
- <author>
- <name>Lol</name>
- <email>author@example.com</email>
- </author>
- <content type="html"><![CDATA[<p>This is Post 04.</p>
-]]></content>
- </entry>
- <entry>
- <title type="text">Post 03</title>
- <id>http://example.org/post/post03/index.html</id>
- <updated>2016-09-03T00:00:00Z</updated>
- <published>2016-09-03T00:00:00Z</published>
- <link href="http://example.org/post/post03/index.html" />
- <author>
- <name>Lol</name>
- <email>author@example.com</email>
- </author>
- <content type="html"><![CDATA[<p>This is Post 03.</p>
-]]></content>
- </entry>
- <entry>
- <title type="text">Post 02</title>
- <id>http://example.org/post/post02/index.html</id>
- <updated>2016-09-02T00:00:00Z</updated>
- <published>2016-09-02T00:00:00Z</published>
- <link href="http://example.org/post/post02/index.html" />
- <author>
- <name>Lol</name>
- <email>author@example.com</email>
- </author>
- <content type="html"><![CDATA[<p>This is Post 02.</p>
-]]></content>
- </entry>
- <entry>
- <title type="text">Post 01</title>
- <id>http://example.org/post/post01/index.html</id>
- <updated>2016-09-01T00:00:00Z</updated>
- <published>2016-09-01T00:00:00Z</published>
- <link href="http://example.org/post/post01/index.html" />
- <author>
- <name>Lol</name>
- <email>author@example.com</email>
- </author>
- <content type="html"><![CDATA[<p>This is Post 01.</p>
-]]></content>
- </entry>
-</feed>
-EOF
-diff -uN "${TEMP}/proj/_build/atom.xml" "${TEMP}/expected-atom.xml"
-
-cat > "${TEMP}/expected-post-post01.html" <<EOF
-
-
-Post 01 - Sep 01, 2016, 12:00 AM GMT
-
-<p>This is Post 01.</p>
-
-
-EOF
-diff -uN "${TEMP}/proj/_build/post/post01/index.html" "${TEMP}/expected-post-post01.html"
-
-cat > "${TEMP}/expected-post-post11.html" <<EOF
-
-
-Post 11 - Sep 11, 2016, 12:00 AM GMT
-
-<p>This is Post 11.</p>
-
-
-EOF
-diff -uN "${TEMP}/proj/_build/post/post11/index.html" "${TEMP}/expected-post-post11.html"
-
-rm -rf "${TEMP}/proj/_build"
-
-
-### default settings with some posts, custom atom template
-
-cat > "${TEMP}/proj/blogcfile" <<EOF
-[global]
-AUTHOR_NAME = Lol
-AUTHOR_EMAIL = author@example.com
-SITE_TITLE = Lol's Website
-SITE_TAGLINE = WAT?!
-BASE_DOMAIN = http://example.org
-
-[settings]
-posts_per_page = -1
-atom_posts_per_page = -1
-atom_template = atom.tmpl
-
-[posts]
-post01
-post02
-post03
-post04
-post05
-post06
-post07
-post08
-post09
-post10
-post11
-EOF
-
-cat > "${TEMP}/proj/templates/atom.tmpl" <<EOF
-<?xml version="1.0" encoding="utf-8"?>
-<feed xmlns="http://www.w3.org/2005/Atom">
- <title type="text">{{ SITE_TITLE }}{% ifdef FILTER_TAG %} - {{ FILTER_TAG }}{% endif %}</title>
- <id>{{ BASE_DOMAIN }}{{ BASE_URL }}/atom/{% ifdef FILTER_TAG %}{{ FILTER_TAG }}/{% endif %}</id>
- <updated>{{ DATE_FIRST_FORMATTED }}</updated>
- <link href="{{ BASE_DOMAIN }}{{ BASE_URL }}/" />
- <link href="{{ BASE_DOMAIN }}{{ BASE_URL }}/atom/{% ifdef FILTER_TAG %}{{ FILTER_TAG }}/{% endif %}" rel="self" />
- <author>
- <name>{{ AUTHOR_NAME }}</name>
- <email>{{ AUTHOR_EMAIL }}</email>
- </author>
- <subtitle type="text">{{ SITE_TAGLINE }}</subtitle>
- {%- block listing %}
- <entry>
- <title type="text">{{ TITLE }}</title>
- <id>{{ BASE_DOMAIN }}{{ BASE_URL }}/post/{{ FILENAME }}/</id>
- <updated>{{ DATE_FORMATTED }}</updated>
- <published>{{ DATE_FORMATTED }}</published>
- <link href="{{ BASE_DOMAIN }}{{ BASE_URL }}/post/{{ FILENAME }}/" />
- <author>
- <name>{{ AUTHOR_NAME }}</name>
- <email>{{ AUTHOR_EMAIL }}</email>
- </author>
- <content type="html"><![CDATA[{{ CONTENT }}]]></content>
- </entry>
- {%- endblock %}
-</feed>
-EOF
-
-${TESTS_ENVIRONMENT} @abs_top_builddir@/blogc-make -f "${TEMP}/proj/blogcfile" 2>&1 | tee "${TEMP}/output.txt"
-grep "_build/index\\.html" "${TEMP}/output.txt"
-grep "_build/atom\\.xml" "${TEMP}/output.txt"
-grep "_build/post/post01/index\\.html" "${TEMP}/output.txt"
-grep "_build/post/post02/index\\.html" "${TEMP}/output.txt"
-grep "_build/post/post03/index\\.html" "${TEMP}/output.txt"
-grep "_build/post/post04/index\\.html" "${TEMP}/output.txt"
-grep "_build/post/post05/index\\.html" "${TEMP}/output.txt"
-grep "_build/post/post06/index\\.html" "${TEMP}/output.txt"
-grep "_build/post/post07/index\\.html" "${TEMP}/output.txt"
-grep "_build/post/post08/index\\.html" "${TEMP}/output.txt"
-grep "_build/post/post09/index\\.html" "${TEMP}/output.txt"
-grep "_build/post/post10/index\\.html" "${TEMP}/output.txt"
-grep "_build/post/post11/index\\.html" "${TEMP}/output.txt"
-
-rm "${TEMP}/output.txt"
-
-cat > "${TEMP}/expected-atom.xml" <<EOF
-<?xml version="1.0" encoding="utf-8"?>
-<feed xmlns="http://www.w3.org/2005/Atom">
- <title type="text">Lol's Website</title>
- <id>http://example.org/atom/</id>
- <updated>2016-09-11T00:00:00Z</updated>
- <link href="http://example.org/" />
- <link href="http://example.org/atom/" rel="self" />
- <author>
- <name>Lol</name>
- <email>author@example.com</email>
- </author>
- <subtitle type="text">WAT?!</subtitle>
- <entry>
- <title type="text">Post 11</title>
- <id>http://example.org/post/post11/</id>
- <updated>2016-09-11T00:00:00Z</updated>
- <published>2016-09-11T00:00:00Z</published>
- <link href="http://example.org/post/post11/" />
- <author>
- <name>Lol</name>
- <email>author@example.com</email>
- </author>
- <content type="html"><![CDATA[<p>This is Post 11.</p>
-]]></content>
- </entry>
- <entry>
- <title type="text">Post 10</title>
- <id>http://example.org/post/post10/</id>
- <updated>2016-09-10T00:00:00Z</updated>
- <published>2016-09-10T00:00:00Z</published>
- <link href="http://example.org/post/post10/" />
- <author>
- <name>Lol</name>
- <email>author@example.com</email>
- </author>
- <content type="html"><![CDATA[<p>This is Post 10.</p>
-]]></content>
- </entry>
- <entry>
- <title type="text">Post 09</title>
- <id>http://example.org/post/post09/</id>
- <updated>2016-09-09T00:00:00Z</updated>
- <published>2016-09-09T00:00:00Z</published>
- <link href="http://example.org/post/post09/" />
- <author>
- <name>Lol</name>
- <email>author@example.com</email>
- </author>
- <content type="html"><![CDATA[<p>This is Post 09.</p>
-]]></content>
- </entry>
- <entry>
- <title type="text">Post 08</title>
- <id>http://example.org/post/post08/</id>
- <updated>2016-09-08T00:00:00Z</updated>
- <published>2016-09-08T00:00:00Z</published>
- <link href="http://example.org/post/post08/" />
- <author>
- <name>Lol</name>
- <email>author@example.com</email>
- </author>
- <content type="html"><![CDATA[<p>This is Post 08.</p>
-]]></content>
- </entry>
- <entry>
- <title type="text">Post 07</title>
- <id>http://example.org/post/post07/</id>
- <updated>2016-09-07T00:00:00Z</updated>
- <published>2016-09-07T00:00:00Z</published>
- <link href="http://example.org/post/post07/" />
- <author>
- <name>Lol</name>
- <email>author@example.com</email>
- </author>
- <content type="html"><![CDATA[<p>This is Post 07.</p>
-]]></content>
- </entry>
- <entry>
- <title type="text">Post 06</title>
- <id>http://example.org/post/post06/</id>
- <updated>2016-09-06T00:00:00Z</updated>
- <published>2016-09-06T00:00:00Z</published>
- <link href="http://example.org/post/post06/" />
- <author>
- <name>Lol</name>
- <email>author@example.com</email>
- </author>
- <content type="html"><![CDATA[<p>This is Post 06.</p>
-]]></content>
- </entry>
- <entry>
- <title type="text">Post 05</title>
- <id>http://example.org/post/post05/</id>
- <updated>2016-09-05T00:00:00Z</updated>
- <published>2016-09-05T00:00:00Z</published>
- <link href="http://example.org/post/post05/" />
- <author>
- <name>Lol</name>
- <email>author@example.com</email>
- </author>
- <content type="html"><![CDATA[<p>This is Post 05.</p>
-]]></content>
- </entry>
- <entry>
- <title type="text">Post 04</title>
- <id>http://example.org/post/post04/</id>
- <updated>2016-09-04T00:00:00Z</updated>
- <published>2016-09-04T00:00:00Z</published>
- <link href="http://example.org/post/post04/" />
- <author>
- <name>Lol</name>
- <email>author@example.com</email>
- </author>
- <content type="html"><![CDATA[<p>This is Post 04.</p>
-]]></content>
- </entry>
- <entry>
- <title type="text">Post 03</title>
- <id>http://example.org/post/post03/</id>
- <updated>2016-09-03T00:00:00Z</updated>
- <published>2016-09-03T00:00:00Z</published>
- <link href="http://example.org/post/post03/" />
- <author>
- <name>Lol</name>
- <email>author@example.com</email>
- </author>
- <content type="html"><![CDATA[<p>This is Post 03.</p>
-]]></content>
- </entry>
- <entry>
- <title type="text">Post 02</title>
- <id>http://example.org/post/post02/</id>
- <updated>2016-09-02T00:00:00Z</updated>
- <published>2016-09-02T00:00:00Z</published>
- <link href="http://example.org/post/post02/" />
- <author>
- <name>Lol</name>
- <email>author@example.com</email>
- </author>
- <content type="html"><![CDATA[<p>This is Post 02.</p>
-]]></content>
- </entry>
- <entry>
- <title type="text">Post 01</title>
- <id>http://example.org/post/post01/</id>
- <updated>2016-09-01T00:00:00Z</updated>
- <published>2016-09-01T00:00:00Z</published>
- <link href="http://example.org/post/post01/" />
- <author>
- <name>Lol</name>
- <email>author@example.com</email>
- </author>
- <content type="html"><![CDATA[<p>This is Post 01.</p>
-]]></content>
- </entry>
-</feed>
-EOF
-diff -uN "${TEMP}/proj/_build/atom.xml" "${TEMP}/expected-atom.xml"
-
-rm -rf "${TEMP}/proj/_build"
-
-
-### default settings with some posts, atom posts per page 0
-
-cat > "${TEMP}/proj/blogcfile" <<EOF
-[global]
-AUTHOR_NAME = Lol
-AUTHOR_EMAIL = author@example.com
-SITE_TITLE = Lol's Website
-SITE_TAGLINE = WAT?!
-BASE_DOMAIN = http://example.org
-
-[settings]
-atom_posts_per_page = 0
-posts_per_page = 0
-
-[posts]
-post01
-post02
-post03
-post04
-post05
-post06
-post07
-post08
-post09
-post10
-post11
-EOF
-
-${TESTS_ENVIRONMENT} @abs_top_builddir@/blogc-make -f "${TEMP}/proj/blogcfile" 2>&1 | tee "${TEMP}/output.txt"
-grep "_build/post/post01/index\\.html" "${TEMP}/output.txt"
-grep "_build/post/post02/index\\.html" "${TEMP}/output.txt"
-grep "_build/post/post03/index\\.html" "${TEMP}/output.txt"
-grep "_build/post/post04/index\\.html" "${TEMP}/output.txt"
-grep "_build/post/post05/index\\.html" "${TEMP}/output.txt"
-grep "_build/post/post06/index\\.html" "${TEMP}/output.txt"
-grep "_build/post/post07/index\\.html" "${TEMP}/output.txt"
-grep "_build/post/post08/index\\.html" "${TEMP}/output.txt"
-grep "_build/post/post09/index\\.html" "${TEMP}/output.txt"
-grep "_build/post/post10/index\\.html" "${TEMP}/output.txt"
-grep "_build/post/post11/index\\.html" "${TEMP}/output.txt"
-
-rm "${TEMP}/output.txt"
-
-cat > "${TEMP}/expected-post-post01.html" <<EOF
-
-
-Post 01 - Sep 01, 2016, 12:00 AM GMT
-
-<p>This is Post 01.</p>
-
-
-EOF
-diff -uN "${TEMP}/proj/_build/post/post01/index.html" "${TEMP}/expected-post-post01.html"
-
-cat > "${TEMP}/expected-post-post11.html" <<EOF
-
-
-Post 11 - Sep 11, 2016, 12:00 AM GMT
-
-<p>This is Post 11.</p>
-
-
-EOF
-diff -uN "${TEMP}/proj/_build/post/post11/index.html" "${TEMP}/expected-post-post11.html"
-
-rm -rf "${TEMP}/proj/_build"
-
-
-### default settings with some posts and tags pagination
-
-cat > "${TEMP}/proj/blogcfile" <<EOF
-[global]
-AUTHOR_NAME = Lol
-AUTHOR_EMAIL = author@example.com
-SITE_TITLE = Lol's Website
-SITE_TAGLINE = WAT?!
-BASE_DOMAIN = http://example.org
-
-[settings]
-atom_posts_per_page = 0
-posts_per_page = 3
-
-[posts]
-foo
-bar
-post01
-post02
-post03
-post04
-post05
-post06
-post07
-post08
-post09
-post10
-post11
-
-[tags]
-qwe
-asd
-EOF
-
-${TESTS_ENVIRONMENT} @abs_top_builddir@/blogc-make -f "${TEMP}/proj/blogcfile" 2>&1 | tee "${TEMP}/output.txt"
-grep "_build/post/post01/index\\.html" "${TEMP}/output.txt"
-grep "_build/post/post02/index\\.html" "${TEMP}/output.txt"
-grep "_build/post/post03/index\\.html" "${TEMP}/output.txt"
-grep "_build/post/post04/index\\.html" "${TEMP}/output.txt"
-grep "_build/post/post05/index\\.html" "${TEMP}/output.txt"
-grep "_build/post/post06/index\\.html" "${TEMP}/output.txt"
-grep "_build/post/post07/index\\.html" "${TEMP}/output.txt"
-grep "_build/post/post08/index\\.html" "${TEMP}/output.txt"
-grep "_build/post/post09/index\\.html" "${TEMP}/output.txt"
-grep "_build/post/post10/index\\.html" "${TEMP}/output.txt"
-grep "_build/post/post11/index\\.html" "${TEMP}/output.txt"
-grep "_build/tag/asd/index\\.html" "${TEMP}/output.txt"
-grep "_build/tag/asd/page/1/index\\.html" "${TEMP}/output.txt"
-grep "_build/tag/asd/page/2/index\\.html" "${TEMP}/output.txt"
-grep "_build/tag/asd/page/3/index\\.html" "${TEMP}/output.txt"
-grep "_build/tag/asd/page/4/index\\.html" "${TEMP}/output.txt"
-grep -v "_build/tag/asd/page/5/index\\.html" "${TEMP}/output.txt"
-grep "_build/tag/qwe/index\\.html" "${TEMP}/output.txt"
-grep "_build/tag/qwe/page/1/index\\.html" "${TEMP}/output.txt"
-grep -v "_build/tag/qwe/page/2/index\\.html" "${TEMP}/output.txt"
-
-rm "${TEMP}/output.txt"
-
-cat > "${TEMP}/expected-tag-asd1.html" <<EOF
-
-Listing: asd - Post 11 - Sep 11, 2016, 12:00 AM GMT
-
-Listing: asd - Post 10 - Sep 10, 2016, 12:00 AM GMT
-
-Listing: asd - Post 09 - Sep 09, 2016, 12:00 AM GMT
-
-
-EOF
-diff -uN "${TEMP}/proj/_build/tag/asd/index.html" "${TEMP}/expected-tag-asd1.html"
-diff -uN "${TEMP}/proj/_build/tag/asd/page/1/index.html" "${TEMP}/expected-tag-asd1.html"
-
-cat > "${TEMP}/expected-tag-asd2.html" <<EOF
-
-Listing: asd - Post 08 - Sep 08, 2016, 12:00 AM GMT
-
-Listing: asd - Post 07 - Sep 07, 2016, 12:00 AM GMT
-
-Listing: asd - Post 06 - Sep 06, 2016, 12:00 AM GMT
-
-
-EOF
-diff -uN "${TEMP}/proj/_build/tag/asd/page/2/index.html" "${TEMP}/expected-tag-asd2.html"
-
-cat > "${TEMP}/expected-tag-asd3.html" <<EOF
-
-Listing: asd - Post 05 - Sep 05, 2016, 12:00 AM GMT
-
-Listing: asd - Post 04 - Sep 04, 2016, 12:00 AM GMT
-
-Listing: asd - Post 03 - Sep 03, 2016, 12:00 AM GMT
-
-
-EOF
-diff -uN "${TEMP}/proj/_build/tag/asd/page/3/index.html" "${TEMP}/expected-tag-asd3.html"
-
-cat > "${TEMP}/expected-tag-asd4.html" <<EOF
-
-Listing: asd - Post 02 - Sep 02, 2016, 12:00 AM GMT
-
-Listing: asd - Post 01 - Sep 01, 2016, 12:00 AM GMT
-
-
-EOF
-diff -uN "${TEMP}/proj/_build/tag/asd/page/4/index.html" "${TEMP}/expected-tag-asd4.html"
-
-cat > "${TEMP}/expected-tag-qwe1.html" <<EOF
-
-Listing: qwe - Bar - Sep 01, 2016, 12:00 AM GMT
-
-Listing: qwe - Foo - Oct 01, 2016, 12:00 AM GMT
-
-
-EOF
-diff -uN "${TEMP}/proj/_build/tag/qwe/index.html" "${TEMP}/expected-tag-qwe1.html"
-diff -uN "${TEMP}/proj/_build/tag/qwe/page/1/index.html" "${TEMP}/expected-tag-qwe1.html"
-
-rm -rf "${TEMP}/proj/_build"
-
-
-### default settings with some posts, order asc, posts_sort
-
-cat > "${TEMP}/proj/blogcfile" <<EOF
-[global]
-AUTHOR_NAME = Lol
-AUTHOR_EMAIL = author@example.com
-SITE_TITLE = Lol's Website
-SITE_TAGLINE = WAT?!
-BASE_DOMAIN = http://example.org
-
-[settings]
-html_order = asc
-atom_order = asc
-posts_sort = yes
-
-[posts]
-foo
-bar
-EOF
-
-${TESTS_ENVIRONMENT} @abs_top_builddir@/blogc-make -f "${TEMP}/proj/blogcfile" 2>&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 -v "_build/page/2/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" <<EOF
-
-Listing: Bar - Sep 01, 2016, 12:00 AM GMT
-
-Listing: Foo - Oct 01, 2016, 12:00 AM GMT
-
-
-EOF
-diff -uN "${TEMP}/proj/_build/index.html" "${TEMP}/expected-index.html"
-diff -uN "${TEMP}/proj/_build/page/1/index.html" "${TEMP}/expected-index.html"
-
-cat > "${TEMP}/expected-atom.xml" <<EOF
-<?xml version="1.0" encoding="utf-8"?>
-<feed xmlns="http://www.w3.org/2005/Atom">
- <title type="text">Lol's Website</title>
- <id>http://example.org/atom.xml</id>
- <updated>2016-09-01T00:00:00Z</updated>
- <link href="http://example.org/" />
- <link href="http://example.org/atom.xml" rel="self" />
- <author>
- <name>Lol</name>
- <email>author@example.com</email>
- </author>
- <subtitle type="text">WAT?!</subtitle>
- <entry>
- <title type="text">Bar</title>
- <id>http://example.org/post/bar/index.html</id>
- <updated>2016-09-01T00:00:00Z</updated>
- <published>2016-09-01T00:00:00Z</published>
- <link href="http://example.org/post/bar/index.html" />
- <author>
- <name>Lol</name>
- <email>author@example.com</email>
- </author>
- <content type="html"><![CDATA[<p>This is bar.</p>
-]]></content>
- </entry>
- <entry>
- <title type="text">Foo</title>
- <id>http://example.org/post/foo/index.html</id>
- <updated>2016-10-01T00:00:00Z</updated>
- <published>2016-10-01T00:00:00Z</published>
- <link href="http://example.org/post/foo/index.html" />
- <author>
- <name>Lol</name>
- <email>author@example.com</email>
- </author>
- <content type="html"><![CDATA[<p>This is foo.</p>
-]]></content>
- </entry>
-</feed>
-EOF
-diff -uN "${TEMP}/proj/_build/atom.xml" "${TEMP}/expected-atom.xml"
-
-cat > "${TEMP}/expected-post-foo.html" <<EOF
-
-
-Foo - Oct 01, 2016, 12:00 AM GMT
-
-<p>This is foo.</p>
-
-
-EOF
-diff -uN "${TEMP}/proj/_build/post/foo/index.html" "${TEMP}/expected-post-foo.html"
-
-cat > "${TEMP}/expected-post-bar.html" <<EOF
-
-
-Bar - Sep 01, 2016, 12:00 AM GMT
-
-<p>This is bar.</p>
-
-
-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, order desc, posts_sort
-
-cat > "${TEMP}/proj/blogcfile" <<EOF
-[global]
-AUTHOR_NAME = Lol
-AUTHOR_EMAIL = author@example.com
-SITE_TITLE = Lol's Website
-SITE_TAGLINE = WAT?!
-BASE_DOMAIN = http://example.org
-
-[settings]
-posts_sort = yes
-
-[posts]
-foo
-bar
-EOF
-
-${TESTS_ENVIRONMENT} @abs_top_builddir@/blogc-make -f "${TEMP}/proj/blogcfile" 2>&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 -v "_build/page/2/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" <<EOF
-
-Listing: Foo - Oct 01, 2016, 12:00 AM GMT
-
-Listing: Bar - Sep 01, 2016, 12:00 AM GMT
-
-
-EOF
-diff -uN "${TEMP}/proj/_build/index.html" "${TEMP}/expected-index.html"
-diff -uN "${TEMP}/proj/_build/page/1/index.html" "${TEMP}/expected-index.html"
-
-cat > "${TEMP}/expected-atom.xml" <<EOF
-<?xml version="1.0" encoding="utf-8"?>
-<feed xmlns="http://www.w3.org/2005/Atom">
- <title type="text">Lol's Website</title>
- <id>http://example.org/atom.xml</id>
- <updated>2016-10-01T00:00:00Z</updated>
- <link href="http://example.org/" />
- <link href="http://example.org/atom.xml" rel="self" />
- <author>
- <name>Lol</name>
- <email>author@example.com</email>
- </author>
- <subtitle type="text">WAT?!</subtitle>
- <entry>
- <title type="text">Foo</title>
- <id>http://example.org/post/foo/index.html</id>
- <updated>2016-10-01T00:00:00Z</updated>
- <published>2016-10-01T00:00:00Z</published>
- <link href="http://example.org/post/foo/index.html" />
- <author>
- <name>Lol</name>
- <email>author@example.com</email>
- </author>
- <content type="html"><![CDATA[<p>This is foo.</p>
-]]></content>
- </entry>
- <entry>
- <title type="text">Bar</title>
- <id>http://example.org/post/bar/index.html</id>
- <updated>2016-09-01T00:00:00Z</updated>
- <published>2016-09-01T00:00:00Z</published>
- <link href="http://example.org/post/bar/index.html" />
- <author>
- <name>Lol</name>
- <email>author@example.com</email>
- </author>
- <content type="html"><![CDATA[<p>This is bar.</p>
-]]></content>
- </entry>
-</feed>
-EOF
-diff -uN "${TEMP}/proj/_build/atom.xml" "${TEMP}/expected-atom.xml"
-
-cat > "${TEMP}/expected-post-foo.html" <<EOF
-
-
-Foo - Oct 01, 2016, 12:00 AM GMT
-
-<p>This is foo.</p>
-
-
-EOF
-diff -uN "${TEMP}/proj/_build/post/foo/index.html" "${TEMP}/expected-post-foo.html"
-
-cat > "${TEMP}/expected-post-bar.html" <<EOF
-
-
-Bar - Sep 01, 2016, 12:00 AM GMT
-
-<p>This is bar.</p>
-
-
-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, order asc, listing_entry
-
-cat > "${TEMP}/proj/content/hue.txt" <<EOF
-TITLE: Hue
-----------------
-This is hue.
-EOF
-
-cat > "${TEMP}/proj/blogcfile" <<EOF
-[global]
-AUTHOR_NAME = Lol
-AUTHOR_EMAIL = author@example.com
-SITE_TITLE = Lol's Website
-SITE_TAGLINE = WAT?!
-BASE_DOMAIN = http://example.org
-
-[settings]
-html_order = ASC
-atom_order = ASC
-listing_entry = hue
-
-[posts]
-foo
-bar
-EOF
-
-${TESTS_ENVIRONMENT} @abs_top_builddir@/blogc-make -f "${TEMP}/proj/blogcfile" 2>&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 -v "_build/page/2/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" <<EOF
-<p>This is hue.</p>
-
-Listing: Foo - Oct 01, 2016, 12:00 AM GMT
-
-Listing: Bar - Sep 01, 2016, 12:00 AM GMT
-
-
-EOF
-diff -uN "${TEMP}/proj/_build/index.html" "${TEMP}/expected-index.html"
-diff -uN "${TEMP}/proj/_build/page/1/index.html" "${TEMP}/expected-index.html"
-
-cat > "${TEMP}/expected-atom.xml" <<EOF
-<?xml version="1.0" encoding="utf-8"?>
-<feed xmlns="http://www.w3.org/2005/Atom">
- <title type="text">Lol's Website</title>
- <id>http://example.org/atom.xml</id>
- <updated>2016-10-01T00:00:00Z</updated>
- <link href="http://example.org/" />
- <link href="http://example.org/atom.xml" rel="self" />
- <author>
- <name>Lol</name>
- <email>author@example.com</email>
- </author>
- <subtitle type="text">WAT?!</subtitle>
- <entry>
- <title type="text">Foo</title>
- <id>http://example.org/post/foo/index.html</id>
- <updated>2016-10-01T00:00:00Z</updated>
- <published>2016-10-01T00:00:00Z</published>
- <link href="http://example.org/post/foo/index.html" />
- <author>
- <name>Lol</name>
- <email>author@example.com</email>
- </author>
- <content type="html"><![CDATA[<p>This is foo.</p>
-]]></content>
- </entry>
- <entry>
- <title type="text">Bar</title>
- <id>http://example.org/post/bar/index.html</id>
- <updated>2016-09-01T00:00:00Z</updated>
- <published>2016-09-01T00:00:00Z</published>
- <link href="http://example.org/post/bar/index.html" />
- <author>
- <name>Lol</name>
- <email>author@example.com</email>
- </author>
- <content type="html"><![CDATA[<p>This is bar.</p>
-]]></content>
- </entry>
-</feed>
-EOF
-diff -uN "${TEMP}/proj/_build/atom.xml" "${TEMP}/expected-atom.xml"
-
-cat > "${TEMP}/expected-post-foo.html" <<EOF
-
-
-Foo - Oct 01, 2016, 12:00 AM GMT
-
-<p>This is foo.</p>
-
-
-EOF
-diff -uN "${TEMP}/proj/_build/post/foo/index.html" "${TEMP}/expected-post-foo.html"
-
-cat > "${TEMP}/expected-post-bar.html" <<EOF
-
-
-Bar - Sep 01, 2016, 12:00 AM GMT
-
-<p>This is bar.</p>
-
-
-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, order asc, listing_entry
-
-cat > "${TEMP}/proj/content/post/baz.txt" <<EOF
-TITLE: Baz
-DATE: 2016-08-01
-TAGS: tag1 tag2
-----------------
-This is baz.
-EOF
-
-cat >> "${TEMP}/proj/blogcfile" <<EOF
-baz
-[tags]
-tag1
-tag2
-EOF
-
-${TESTS_ENVIRONMENT} @abs_top_builddir@/blogc-make -f "${TEMP}/proj/blogcfile" 2>&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 -v "_build/page/2/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/tag1/page/1/index\\.html" "${TEMP}/output.txt"
-grep -v "_build/tag/tag1/page/2/index\\.html" "${TEMP}/output.txt"
-grep "_build/tag/tag2/index\\.html" "${TEMP}/output.txt"
-grep "_build/tag/tag2/page/1/index\\.html" "${TEMP}/output.txt"
-grep -v "_build/tag/tag2/page/2/index\\.html" "${TEMP}/output.txt"
-
-rm "${TEMP}/output.txt"
-
-cat > "${TEMP}/expected-index.html" <<EOF
-<p>This is hue.</p>
-
-Listing: Foo - Oct 01, 2016, 12:00 AM GMT
-
-Listing: Bar - Sep 01, 2016, 12:00 AM GMT
-
-Listing: Baz - Aug 01, 2016, 12:00 AM GMT
-
-
-EOF
-diff -uN "${TEMP}/proj/_build/index.html" "${TEMP}/expected-index.html"
-diff -uN "${TEMP}/proj/_build/page/1/index.html" "${TEMP}/expected-index.html"
-
-cat > "${TEMP}/expected-atom.xml" <<EOF
-<?xml version="1.0" encoding="utf-8"?>
-<feed xmlns="http://www.w3.org/2005/Atom">
- <title type="text">Lol's Website</title>
- <id>http://example.org/atom.xml</id>
- <updated>2016-10-01T00:00:00Z</updated>
- <link href="http://example.org/" />
- <link href="http://example.org/atom.xml" rel="self" />
- <author>
- <name>Lol</name>
- <email>author@example.com</email>
- </author>
- <subtitle type="text">WAT?!</subtitle>
- <entry>
- <title type="text">Foo</title>
- <id>http://example.org/post/foo/index.html</id>
- <updated>2016-10-01T00:00:00Z</updated>
- <published>2016-10-01T00:00:00Z</published>
- <link href="http://example.org/post/foo/index.html" />
- <author>
- <name>Lol</name>
- <email>author@example.com</email>
- </author>
- <content type="html"><![CDATA[<p>This is foo.</p>
-]]></content>
- </entry>
- <entry>
- <title type="text">Bar</title>
- <id>http://example.org/post/bar/index.html</id>
- <updated>2016-09-01T00:00:00Z</updated>
- <published>2016-09-01T00:00:00Z</published>
- <link href="http://example.org/post/bar/index.html" />
- <author>
- <name>Lol</name>
- <email>author@example.com</email>
- </author>
- <content type="html"><![CDATA[<p>This is bar.</p>
-]]></content>
- </entry>
- <entry>
- <title type="text">Baz</title>
- <id>http://example.org/post/baz/index.html</id>
- <updated>2016-08-01T00:00:00Z</updated>
- <published>2016-08-01T00:00:00Z</published>
- <link href="http://example.org/post/baz/index.html" />
- <author>
- <name>Lol</name>
- <email>author@example.com</email>
- </author>
- <content type="html"><![CDATA[<p>This is baz.</p>
-]]></content>
- </entry>
-</feed>
-EOF
-diff -uN "${TEMP}/proj/_build/atom.xml" "${TEMP}/expected-atom.xml"
-
-cat > "${TEMP}/expected-atom-tag1.xml" <<EOF
-<?xml version="1.0" encoding="utf-8"?>
-<feed xmlns="http://www.w3.org/2005/Atom">
- <title type="text">Lol's Website - tag1</title>
- <id>http://example.org/atom/tag1.xml</id>
- <updated>2016-08-01T00:00:00Z</updated>
- <link href="http://example.org/" />
- <link href="http://example.org/atom/tag1.xml" rel="self" />
- <author>
- <name>Lol</name>
- <email>author@example.com</email>
- </author>
- <subtitle type="text">WAT?!</subtitle>
- <entry>
- <title type="text">Baz</title>
- <id>http://example.org/post/baz/index.html</id>
- <updated>2016-08-01T00:00:00Z</updated>
- <published>2016-08-01T00:00:00Z</published>
- <link href="http://example.org/post/baz/index.html" />
- <author>
- <name>Lol</name>
- <email>author@example.com</email>
- </author>
- <content type="html"><![CDATA[<p>This is baz.</p>
-]]></content>
- </entry>
-</feed>
-EOF
-diff -uN "${TEMP}/proj/_build/atom/tag1.xml" "${TEMP}/expected-atom-tag1.xml"
-
-cat > "${TEMP}/expected-atom-tag2.xml" <<EOF
-<?xml version="1.0" encoding="utf-8"?>
-<feed xmlns="http://www.w3.org/2005/Atom">
- <title type="text">Lol's Website - tag2</title>
- <id>http://example.org/atom/tag2.xml</id>
- <updated>2016-08-01T00:00:00Z</updated>
- <link href="http://example.org/" />
- <link href="http://example.org/atom/tag2.xml" rel="self" />
- <author>
- <name>Lol</name>
- <email>author@example.com</email>
- </author>
- <subtitle type="text">WAT?!</subtitle>
- <entry>
- <title type="text">Baz</title>
- <id>http://example.org/post/baz/index.html</id>
- <updated>2016-08-01T00:00:00Z</updated>
- <published>2016-08-01T00:00:00Z</published>
- <link href="http://example.org/post/baz/index.html" />
- <author>
- <name>Lol</name>
- <email>author@example.com</email>
- </author>
- <content type="html"><![CDATA[<p>This is baz.</p>
-]]></content>
- </entry>
-</feed>
-EOF
-diff -uN "${TEMP}/proj/_build/atom/tag2.xml" "${TEMP}/expected-atom-tag2.xml"
-
-cat > "${TEMP}/expected-post-baz.html" <<EOF
-
-
-Baz - Aug 01, 2016, 12:00 AM GMT
-
-<p>This is baz.</p>
-
-
-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" <<EOF
-<p>This is hue.</p>
-
-Listing: tag1 - Baz - Aug 01, 2016, 12:00 AM GMT
-
-
-EOF
-diff -uN "${TEMP}/proj/_build/tag/tag1/index.html" "${TEMP}/expected-tag1.html"
-diff -uN "${TEMP}/proj/_build/tag/tag1/page/1/index.html" "${TEMP}/expected-tag1.html"
-
-cat > "${TEMP}/expected-tag2.html" <<EOF
-<p>This is hue.</p>
-
-Listing: tag2 - Baz - Aug 01, 2016, 12:00 AM GMT
-
-
-EOF
-diff -uN "${TEMP}/proj/_build/tag/tag2/index.html" "${TEMP}/expected-tag2.html"
-diff -uN "${TEMP}/proj/_build/tag/tag2/page/1/index.html" "${TEMP}/expected-tag2.html"
-
-rm -rf "${TEMP}/proj/_build"
-
-
-### default settings with some posts, pages and tags, order asc
-
-cat > "${TEMP}/proj/content/page1.txt" <<EOF
-TITLE: Page 1
--------------
-This is page 1.
-EOF
-
-cat > "${TEMP}/proj/content/page2.txt" <<EOF
-TITLE: Page 2
--------------
-This is page 2.
-EOF
-
-cat >> "${TEMP}/proj/blogcfile" <<EOF
-[pages]
-page1
-page2
-EOF
-
-${TESTS_ENVIRONMENT} @abs_top_builddir@/blogc-make -f "${TEMP}/proj/blogcfile" 2>&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 -v "_build/page/2/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/tag1/page/1/index\\.html" "${TEMP}/output.txt"
-grep -v "_build/tag/tag1/page/2/index\\.html" "${TEMP}/output.txt"
-grep "_build/tag/tag2/index\\.html" "${TEMP}/output.txt"
-grep "_build/tag/tag2/page/1/index\\.html" "${TEMP}/output.txt"
-grep -v "_build/tag/tag2/page/2/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/tag1/page/1/index.html" "${TEMP}/expected-tag1.html"
-diff -uN "${TEMP}/proj/_build/tag/tag2/index.html" "${TEMP}/expected-tag2.html"
-diff -uN "${TEMP}/proj/_build/tag/tag2/page/1/index.html" "${TEMP}/expected-tag2.html"
-
-cat > "${TEMP}/expected-page1.html" <<EOF
-
-
-Page 1
-
-<p>This is page 1.</p>
-
-
-EOF
-diff -uN "${TEMP}/proj/_build/page1/index.html" "${TEMP}/expected-page1.html"
-
-cat > "${TEMP}/expected-page2.html" <<EOF
-
-
-Page 2
-
-<p>This is page 2.</p>
-
-
-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" <<EOF
-TITLE: Foo
-DATE: 2016-10-01
-----------------
-This is foo.
-EOF
-
-cat > "${TEMP}/proj/contents/poost/bar.blogc" <<EOF
-TITLE: Bar
-DATE: 2016-09-01
-----------------
-This is bar.
-EOF
-
-cat > "${TEMP}/proj/temp/main.html" <<EOF
-{% block listing %}
-Listing: {% ifdef FILTER_TAG %}{{ FILTER_TAG }} - {% endif %}{{ TITLE }} - {{ DATE_FORMATTED }}
-{% endblock %}
-{% block entry %}
-{{ TITLE }}{% if MAKE_TYPE == "post" %} - {{ DATE_FORMATTED }}{% endif %}
-
-{{ CONTENT }}
-{% endblock %}
-EOF
-
-cat > "${TEMP}/proj/blogcfile" <<EOF
-[settings]
-content_dir = contents
-template_dir = temp
-main_template = main.html
-source_ext = .blogc
-pagination_prefix = pagination
-posts_per_page = 1
-atom_posts_per_page = 1
-html_ext = .html
-index_prefix = posts
-post_prefix = poost
-tag_prefix = taag
-atom_prefix = atoom
-atom_ext = /index.xml
-date_format = %b %d, %Y
-locale = en_US.utf8
-html_order = ASC
-atom_order = ASC
-
-[global]
-AUTHOR_NAME = Lol
-AUTHOR_EMAIL = author@example.com
-SITE_TITLE = Lol's Website
-SITE_TAGLINE = WAT?!
-BASE_DOMAIN = http://example.org
-
-[posts]
-foo
-bar
-EOF
-
-${TESTS_ENVIRONMENT} @abs_top_builddir@/blogc-make -f "${TEMP}/proj/blogcfile" 2>&1 | tee "${TEMP}/output.txt"
-grep "_build/posts\\.html" "${TEMP}/output.txt"
-grep "_build/atoom/index\\.xml" "${TEMP}/output.txt"
-grep "_build/pagination/1\\.html" "${TEMP}/output.txt"
-grep "_build/pagination/2\\.html" "${TEMP}/output.txt"
-grep -v "_build/pagination/3\\.html" "${TEMP}/output.txt"
-grep "_build/poost/foo\\.html" "${TEMP}/output.txt"
-grep "_build/poost/bar\\.html" "${TEMP}/output.txt"
-
-rm "${TEMP}/output.txt"
-
-cat > "${TEMP}/expected-index.html" <<EOF
-
-Listing: Foo - Oct 01, 2016
-
-
-EOF
-diff -uN "${TEMP}/proj/_build/posts.html" "${TEMP}/expected-index.html"
-diff -uN "${TEMP}/proj/_build/pagination/1.html" "${TEMP}/expected-index.html"
-
-cat > "${TEMP}/expected-page-2.html" <<EOF
-
-Listing: Bar - Sep 01, 2016
-
-
-EOF
-diff -uN "${TEMP}/proj/_build/pagination/2.html" "${TEMP}/expected-page-2.html"
-
-cat > "${TEMP}/expected-atom.xml" <<EOF
-<?xml version="1.0" encoding="utf-8"?>
-<feed xmlns="http://www.w3.org/2005/Atom">
- <title type="text">Lol's Website</title>
- <id>http://example.org/atoom/index.xml</id>
- <updated>2016-10-01T00:00:00Z</updated>
- <link href="http://example.org/" />
- <link href="http://example.org/atoom/index.xml" rel="self" />
- <author>
- <name>Lol</name>
- <email>author@example.com</email>
- </author>
- <subtitle type="text">WAT?!</subtitle>
- <entry>
- <title type="text">Foo</title>
- <id>http://example.org/poost/foo.html</id>
- <updated>2016-10-01T00:00:00Z</updated>
- <published>2016-10-01T00:00:00Z</published>
- <link href="http://example.org/poost/foo.html" />
- <author>
- <name>Lol</name>
- <email>author@example.com</email>
- </author>
- <content type="html"><![CDATA[<p>This is foo.</p>
-]]></content>
- </entry>
-</feed>
-EOF
-diff -uN "${TEMP}/proj/_build/atoom/index.xml" "${TEMP}/expected-atom.xml"
-
-cat > "${TEMP}/expected-post-foo.html" <<EOF
-
-
-Foo - Oct 01, 2016
-
-<p>This is foo.</p>
-
-
-EOF
-diff -uN "${TEMP}/proj/_build/poost/foo.html" "${TEMP}/expected-post-foo.html"
-
-cat > "${TEMP}/expected-post-bar.html" <<EOF
-
-
-Bar - Sep 01, 2016
-
-<p>This is bar.</p>
-
-
-EOF
-diff -uN "${TEMP}/proj/_build/poost/bar.html" "${TEMP}/expected-post-bar.html"
-
-rm -rf "${TEMP}/proj/_build"
-
-
-### custom settings with some posts and tags
-
-cat > "${TEMP}/proj/contents/poost/baz.blogc" <<EOF
-TITLE: Baz
-DATE: 2016-08-01
-TAGS: tag1 tag2
-----------------
-This is baz.
-EOF
-
-cat >> "${TEMP}/proj/blogcfile" <<EOF
-baz
-[tags]
-tag1
-tag2
-EOF
-
-${TESTS_ENVIRONMENT} @abs_top_builddir@/blogc-make -f "${TEMP}/proj/blogcfile" 2>&1 | tee "${TEMP}/output.txt"
-grep "_build/posts\\.html" "${TEMP}/output.txt"
-grep "_build/atoom/index\\.xml" "${TEMP}/output.txt"
-grep "_build/atoom/tag1/index\\.xml" "${TEMP}/output.txt"
-grep "_build/atoom/tag2/index\\.xml" "${TEMP}/output.txt"
-grep "_build/pagination/1\\.html" "${TEMP}/output.txt"
-grep "_build/pagination/2\\.html" "${TEMP}/output.txt"
-grep "_build/pagination/3\\.html" "${TEMP}/output.txt"
-grep -v "_build/pagination/4\\.html" "${TEMP}/output.txt"
-grep "_build/poost/foo\\.html" "${TEMP}/output.txt"
-grep "_build/poost/bar\\.html" "${TEMP}/output.txt"
-grep "_build/poost/baz\\.html" "${TEMP}/output.txt"
-grep "_build/taag/tag1\\.html" "${TEMP}/output.txt"
-grep "_build/taag/tag1/pagination/1\\.html" "${TEMP}/output.txt"
-grep -v "_build/taag/tag1/pagination/2\\.html" "${TEMP}/output.txt"
-grep "_build/taag/tag2\\.html" "${TEMP}/output.txt"
-grep "_build/taag/tag2/pagination/1\\.html" "${TEMP}/output.txt"
-grep -v "_build/taag/tag2/pagination/2\\.html" "${TEMP}/output.txt"
-
-rm "${TEMP}/output.txt"
-
-diff -uN "${TEMP}/proj/_build/posts.html" "${TEMP}/expected-index.html"
-diff -uN "${TEMP}/proj/_build/pagination/1.html" "${TEMP}/expected-index.html"
-diff -uN "${TEMP}/proj/_build/pagination/2.html" "${TEMP}/expected-page-2.html"
-
-cat > "${TEMP}/expected-page-3.html" <<EOF
-
-Listing: Baz - Aug 01, 2016
-
-
-EOF
-diff -uN "${TEMP}/proj/_build/pagination/3.html" "${TEMP}/expected-page-3.html"
-
-diff -uN "${TEMP}/proj/_build/atoom/index.xml" "${TEMP}/expected-atom.xml"
-
-cat > "${TEMP}/expected-atom-tag1.xml" <<EOF
-<?xml version="1.0" encoding="utf-8"?>
-<feed xmlns="http://www.w3.org/2005/Atom">
- <title type="text">Lol's Website - tag1</title>
- <id>http://example.org/atoom/tag1/index.xml</id>
- <updated>2016-08-01T00:00:00Z</updated>
- <link href="http://example.org/" />
- <link href="http://example.org/atoom/tag1/index.xml" rel="self" />
- <author>
- <name>Lol</name>
- <email>author@example.com</email>
- </author>
- <subtitle type="text">WAT?!</subtitle>
- <entry>
- <title type="text">Baz</title>
- <id>http://example.org/poost/baz.html</id>
- <updated>2016-08-01T00:00:00Z</updated>
- <published>2016-08-01T00:00:00Z</published>
- <link href="http://example.org/poost/baz.html" />
- <author>
- <name>Lol</name>
- <email>author@example.com</email>
- </author>
- <content type="html"><![CDATA[<p>This is baz.</p>
-]]></content>
- </entry>
-</feed>
-EOF
-diff -uN "${TEMP}/proj/_build/atoom/tag1/index.xml" "${TEMP}/expected-atom-tag1.xml"
-
-cat > "${TEMP}/expected-atom-tag2.xml" <<EOF
-<?xml version="1.0" encoding="utf-8"?>
-<feed xmlns="http://www.w3.org/2005/Atom">
- <title type="text">Lol's Website - tag2</title>
- <id>http://example.org/atoom/tag2/index.xml</id>
- <updated>2016-08-01T00:00:00Z</updated>
- <link href="http://example.org/" />
- <link href="http://example.org/atoom/tag2/index.xml" rel="self" />
- <author>
- <name>Lol</name>
- <email>author@example.com</email>
- </author>
- <subtitle type="text">WAT?!</subtitle>
- <entry>
- <title type="text">Baz</title>
- <id>http://example.org/poost/baz.html</id>
- <updated>2016-08-01T00:00:00Z</updated>
- <published>2016-08-01T00:00:00Z</published>
- <link href="http://example.org/poost/baz.html" />
- <author>
- <name>Lol</name>
- <email>author@example.com</email>
- </author>
- <content type="html"><![CDATA[<p>This is baz.</p>
-]]></content>
- </entry>
-</feed>
-EOF
-diff -uN "${TEMP}/proj/_build/atoom/tag2/index.xml" "${TEMP}/expected-atom-tag2.xml"
-
-cat > "${TEMP}/expected-post-baz.html" <<EOF
-
-
-Baz - Aug 01, 2016
-
-<p>This is baz.</p>
-
-
-EOF
-diff -uN "${TEMP}/proj/_build/poost/foo.html" "${TEMP}/expected-post-foo.html"
-diff -uN "${TEMP}/proj/_build/poost/bar.html" "${TEMP}/expected-post-bar.html"
-diff -uN "${TEMP}/proj/_build/poost/baz.html" "${TEMP}/expected-post-baz.html"
-
-cat > "${TEMP}/expected-tag1.html" <<EOF
-
-Listing: tag1 - Baz - Aug 01, 2016
-
-
-EOF
-diff -uN "${TEMP}/proj/_build/taag/tag1.html" "${TEMP}/expected-tag1.html"
-diff -uN "${TEMP}/proj/_build/taag/tag1/pagination/1.html" "${TEMP}/expected-tag1.html"
-
-cat > "${TEMP}/expected-tag2.html" <<EOF
-
-Listing: tag2 - Baz - Aug 01, 2016
-
-
-EOF
-diff -uN "${TEMP}/proj/_build/taag/tag2.html" "${TEMP}/expected-tag2.html"
-diff -uN "${TEMP}/proj/_build/taag/tag2/pagination/1.html" "${TEMP}/expected-tag2.html"
-
-rm -rf "${TEMP}/proj/_build"
-
-
-### custom settings with some posts, pages and tags
-
-cat > "${TEMP}/proj/contents/page1.blogc" <<EOF
-TITLE: Page 1
--------------
-This is page 1.
-EOF
-
-cat > "${TEMP}/proj/contents/page2.blogc" <<EOF
-TITLE: Page 2
--------------
-This is page 2.
-EOF
-
-cat >> "${TEMP}/proj/blogcfile" <<EOF
-[pages]
-page1
-page2
-EOF
-
-${TESTS_ENVIRONMENT} @abs_top_builddir@/blogc-make -f "${TEMP}/proj/blogcfile" 2>&1 | tee "${TEMP}/output.txt"
-grep "_build/posts\\.html" "${TEMP}/output.txt"
-grep "_build/atoom/index\\.xml" "${TEMP}/output.txt"
-grep "_build/atoom/tag1/index\\.xml" "${TEMP}/output.txt"
-grep "_build/atoom/tag2/index\\.xml" "${TEMP}/output.txt"
-grep "_build/pagination/1\\.html" "${TEMP}/output.txt"
-grep "_build/pagination/2\\.html" "${TEMP}/output.txt"
-grep "_build/pagination/3\\.html" "${TEMP}/output.txt"
-grep -v "_build/pagination/4\\.html" "${TEMP}/output.txt"
-grep "_build/poost/foo\\.html" "${TEMP}/output.txt"
-grep "_build/poost/bar\\.html" "${TEMP}/output.txt"
-grep "_build/poost/baz\\.html" "${TEMP}/output.txt"
-grep "_build/taag/tag1\\.html" "${TEMP}/output.txt"
-grep "_build/taag/tag1/pagination/1\\.html" "${TEMP}/output.txt"
-grep -v "_build/taag/tag1/pagination/2\\.html" "${TEMP}/output.txt"
-grep "_build/taag/tag2\\.html" "${TEMP}/output.txt"
-grep "_build/taag/tag2/pagination/1\\.html" "${TEMP}/output.txt"
-grep -v "_build/taag/tag2/pagination/2\\.html" "${TEMP}/output.txt"
-grep "_build/page1\\.html" "${TEMP}/output.txt"
-grep "_build/page2\\.html" "${TEMP}/output.txt"
-
-rm "${TEMP}/output.txt"
-
-diff -uN "${TEMP}/proj/_build/posts.html" "${TEMP}/expected-index.html"
-diff -uN "${TEMP}/proj/_build/pagination/1.html" "${TEMP}/expected-index.html"
-diff -uN "${TEMP}/proj/_build/pagination/2.html" "${TEMP}/expected-page-2.html"
-diff -uN "${TEMP}/proj/_build/pagination/3.html" "${TEMP}/expected-page-3.html"
-
-diff -uN "${TEMP}/proj/_build/atoom/index.xml" "${TEMP}/expected-atom.xml"
-diff -uN "${TEMP}/proj/_build/atoom/tag1/index.xml" "${TEMP}/expected-atom-tag1.xml"
-diff -uN "${TEMP}/proj/_build/atoom/tag2/index.xml" "${TEMP}/expected-atom-tag2.xml"
-
-diff -uN "${TEMP}/proj/_build/poost/foo.html" "${TEMP}/expected-post-foo.html"
-diff -uN "${TEMP}/proj/_build/poost/bar.html" "${TEMP}/expected-post-bar.html"
-diff -uN "${TEMP}/proj/_build/poost/baz.html" "${TEMP}/expected-post-baz.html"
-
-diff -uN "${TEMP}/proj/_build/taag/tag1.html" "${TEMP}/expected-tag1.html"
-diff -uN "${TEMP}/proj/_build/taag/tag1/pagination/1.html" "${TEMP}/expected-tag1.html"
-diff -uN "${TEMP}/proj/_build/taag/tag2.html" "${TEMP}/expected-tag2.html"
-diff -uN "${TEMP}/proj/_build/taag/tag2/pagination/1.html" "${TEMP}/expected-tag2.html"
-
-cat > "${TEMP}/expected-page1.html" <<EOF
-
-
-Page 1
-
-<p>This is page 1.</p>
-
-
-EOF
-diff -uN "${TEMP}/proj/_build/page1.html" "${TEMP}/expected-page1.html"
-
-cat > "${TEMP}/expected-page2.html" <<EOF
-
-
-Page 2
-
-<p>This is page 2.</p>
-
-
-EOF
-diff -uN "${TEMP}/proj/_build/page2.html" "${TEMP}/expected-page2.html"
-
-rm -rf "${TEMP}/proj/_build"
-
-
-### copy rule
-
-mkdir -p "${TEMP}"/proj/{a/b/c,d/e,f}
-echo bola > "${TEMP}/proj/a/b/c/foo"
-echo guda > "${TEMP}/proj/a/b/bar"
-echo chunda > "${TEMP}/proj/a/baz"
-echo lol > "${TEMP}/proj/d/e/fuu"
-echo hehe > "${TEMP}/proj/d/xd"
-echo FFFUUUUUU > "${TEMP}/proj/f/XDDDD"
-
-cat >> "${TEMP}/proj/blogcfile" <<EOF
-[copy]
-a
-d/e/fuu
-d/xd
-f
-EOF
-
-${TESTS_ENVIRONMENT} @abs_top_builddir@/blogc-make -f "${TEMP}/proj/blogcfile" 2>&1 | tee "${TEMP}/output.txt"
-grep "_build/posts\\.html" "${TEMP}/output.txt"
-grep "_build/atoom/index\\.xml" "${TEMP}/output.txt"
-grep "_build/atoom/tag1/index\\.xml" "${TEMP}/output.txt"
-grep "_build/atoom/tag2/index\\.xml" "${TEMP}/output.txt"
-grep "_build/pagination/1\\.html" "${TEMP}/output.txt"
-grep "_build/pagination/2\\.html" "${TEMP}/output.txt"
-grep "_build/pagination/3\\.html" "${TEMP}/output.txt"
-grep -v "_build/pagination/4\\.html" "${TEMP}/output.txt"
-grep "_build/poost/foo\\.html" "${TEMP}/output.txt"
-grep "_build/poost/bar\\.html" "${TEMP}/output.txt"
-grep "_build/poost/baz\\.html" "${TEMP}/output.txt"
-grep "_build/taag/tag1\\.html" "${TEMP}/output.txt"
-grep "_build/taag/tag1/pagination/1\\.html" "${TEMP}/output.txt"
-grep -v "_build/taag/tag1/pagination/2\\.html" "${TEMP}/output.txt"
-grep "_build/taag/tag2\\.html" "${TEMP}/output.txt"
-grep "_build/taag/tag2/pagination/1\\.html" "${TEMP}/output.txt"
-grep -v "_build/taag/tag2/pagination/2\\.html" "${TEMP}/output.txt"
-grep "_build/page1\\.html" "${TEMP}/output.txt"
-grep "_build/page2\\.html" "${TEMP}/output.txt"
-grep "_build/a/b/c/foo" "${TEMP}/output.txt"
-grep "_build/a/b/bar" "${TEMP}/output.txt"
-grep "_build/a/baz" "${TEMP}/output.txt"
-grep "_build/d/e/fuu" "${TEMP}/output.txt"
-grep "_build/d/xd" "${TEMP}/output.txt"
-grep "_build/f/XDDDD" "${TEMP}/output.txt"
-
-rm "${TEMP}/output.txt"
-
-test "$(cat "${TEMP}/proj/_build/a/b/c/foo")" = "bola"
-test "$(cat "${TEMP}/proj/_build/a/b/bar")" = "guda"
-test "$(cat "${TEMP}/proj/_build/a/baz")" = "chunda"
-test "$(cat "${TEMP}/proj/_build/d/e/fuu")" = "lol"
-test "$(cat "${TEMP}/proj/_build/d/xd")" = "hehe"
-test "$(cat "${TEMP}/proj/_build/f/XDDDD")" = "FFFUUUUUU"
-
-
-### clean rule
-
-${TESTS_ENVIRONMENT} @abs_top_builddir@/blogc-make -f "${TEMP}/proj/blogcfile" clean 2>&1 | tee "${TEMP}/output.txt"
-grep "_build/posts\\.html" "${TEMP}/output.txt"
-grep "_build/atoom/index\\.xml" "${TEMP}/output.txt"
-grep "_build/atoom/tag1/index\\.xml" "${TEMP}/output.txt"
-grep "_build/atoom/tag2/index\\.xml" "${TEMP}/output.txt"
-grep "_build/pagination/1\\.html" "${TEMP}/output.txt"
-grep "_build/pagination/2\\.html" "${TEMP}/output.txt"
-grep "_build/pagination/3\\.html" "${TEMP}/output.txt"
-grep -v "_build/pagination/4\\.html" "${TEMP}/output.txt"
-grep "_build/poost/foo\\.html" "${TEMP}/output.txt"
-grep "_build/poost/bar\\.html" "${TEMP}/output.txt"
-grep "_build/poost/baz\\.html" "${TEMP}/output.txt"
-grep "_build/taag/tag1\\.html" "${TEMP}/output.txt"
-grep "_build/taag/tag1/pagination/1\\.html" "${TEMP}/output.txt"
-grep -v "_build/taag/tag1/pagination/2\\.html" "${TEMP}/output.txt"
-grep "_build/taag/tag2\\.html" "${TEMP}/output.txt"
-grep "_build/taag/tag2/pagination/1\\.html" "${TEMP}/output.txt"
-grep -v "_build/taag/tag2/pagination/2\\.html" "${TEMP}/output.txt"
-grep "_build/page1\\.html" "${TEMP}/output.txt"
-grep "_build/page2\\.html" "${TEMP}/output.txt"
-grep "_build/a/b/c/foo" "${TEMP}/output.txt"
-grep "_build/a/b/bar" "${TEMP}/output.txt"
-grep "_build/a/baz" "${TEMP}/output.txt"
-grep "_build/d/e/fuu" "${TEMP}/output.txt"
-grep "_build/d/xd" "${TEMP}/output.txt"
-grep "_build/f/XDDDD" "${TEMP}/output.txt"
-
-rm "${TEMP}/output.txt"
-
-[[ ! -d "${TEMP}/proj/_build" ]]
-
-export OUTPUT_DIR="${TEMP}/___blogc_build"
-
-${TESTS_ENVIRONMENT} @abs_top_builddir@/blogc-make -f "${TEMP}/proj/blogcfile" 2>&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 -v "___blogc_build/pagination/4\\.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/tag1/pagination/1\\.html" "${TEMP}/output.txt"
-grep -v "___blogc_build/taag/tag1/pagination/2\\.html" "${TEMP}/output.txt"
-grep "___blogc_build/taag/tag2\\.html" "${TEMP}/output.txt"
-grep "___blogc_build/taag/tag2/pagination/1\\.html" "${TEMP}/output.txt"
-grep -v "___blogc_build/taag/tag2/pagination/2\\.html" "${TEMP}/output.txt"
-grep "___blogc_build/page1\\.html" "${TEMP}/output.txt"
-grep "___blogc_build/page2\\.html" "${TEMP}/output.txt"
-grep "___blogc_build/a/b/c/foo" "${TEMP}/output.txt"
-grep "___blogc_build/a/b/bar" "${TEMP}/output.txt"
-grep "___blogc_build/a/baz" "${TEMP}/output.txt"
-grep "___blogc_build/d/e/fuu" "${TEMP}/output.txt"
-grep "___blogc_build/d/xd" "${TEMP}/output.txt"
-grep "___blogc_build/f/XDDDD" "${TEMP}/output.txt"
-
-rm "${TEMP}/output.txt"
-
-${TESTS_ENVIRONMENT} @abs_top_builddir@/blogc-make -f "${TEMP}/proj/blogcfile" clean 2>&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 -v "___blogc_build/pagination/4\\.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/tag1/pagination/1\\.html" "${TEMP}/output.txt"
-grep -v "___blogc_build/taag/tag1/pagination/2\\.html" "${TEMP}/output.txt"
-grep "___blogc_build/taag/tag2\\.html" "${TEMP}/output.txt"
-grep "___blogc_build/taag/tag2/pagination/1\\.html" "${TEMP}/output.txt"
-grep -v "___blogc_build/taag/tag2/pagination/2\\.html" "${TEMP}/output.txt"
-grep "___blogc_build/page1\\.html" "${TEMP}/output.txt"
-grep "___blogc_build/page2\\.html" "${TEMP}/output.txt"
-grep "___blogc_build/a/b/c/foo" "${TEMP}/output.txt"
-grep "___blogc_build/a/b/bar" "${TEMP}/output.txt"
-grep "___blogc_build/a/baz" "${TEMP}/output.txt"
-grep "___blogc_build/d/e/fuu" "${TEMP}/output.txt"
-grep "___blogc_build/d/xd" "${TEMP}/output.txt"
-grep "___blogc_build/f/XDDDD" "${TEMP}/output.txt"
-
-rm "${TEMP}/output.txt"
-
-[[ ! -d "${OUTPUT_DIR}" ]]
-
-unset OUTPUT_DIR
-
-
-### atom_dump rule
-
-${TESTS_ENVIRONMENT} @abs_top_builddir@/blogc-make -f "${TEMP}/proj/blogcfile" atom_dump | tee "${TEMP}/atom.xml"
-
-cat > "${TEMP}/expected-atom-dump.xml" <<EOF
-<?xml version="1.0" encoding="utf-8"?>
-<feed xmlns="http://www.w3.org/2005/Atom">
- <title type="text">{{ SITE_TITLE }}{% ifdef FILTER_TAG %} - {{ FILTER_TAG }}{% endif %}</title>
- <id>{{ BASE_DOMAIN }}{{ BASE_URL }}/atoom{% ifdef FILTER_TAG %}/{{ FILTER_TAG }}{% endif %}/index.xml</id>
- <updated>{{ DATE_FIRST_FORMATTED }}</updated>
- <link href="{{ BASE_DOMAIN }}{{ BASE_URL }}/" />
- <link href="{{ BASE_DOMAIN }}{{ BASE_URL }}/atoom{% ifdef FILTER_TAG %}/{{ FILTER_TAG }}{% endif %}/index.xml" rel="self" />
- <author>
- <name>{{ AUTHOR_NAME }}</name>
- <email>{{ AUTHOR_EMAIL }}</email>
- </author>
- <subtitle type="text">{{ SITE_TAGLINE }}</subtitle>
- {%- block listing %}
- <entry>
- <title type="text">{{ TITLE }}</title>
- <id>{{ BASE_DOMAIN }}{{ BASE_URL }}/poost/{{ FILENAME }}.html</id>
- <updated>{{ DATE_FORMATTED }}</updated>
- <published>{{ DATE_FORMATTED }}</published>
- <link href="{{ BASE_DOMAIN }}{{ BASE_URL }}/poost/{{ FILENAME }}.html" />
- <author>
- <name>{{ AUTHOR_NAME }}</name>
- <email>{{ AUTHOR_EMAIL }}</email>
- </author>
- <content type="html"><![CDATA[{{ CONTENT }}]]></content>
- </entry>
- {%- endblock %}
-</feed>
-EOF
-diff -uN "${TEMP}/atom.xml" "${TEMP}/expected-atom-dump.xml"
-
-rm "${TEMP}/atom.xml"
-rm -rf "${TEMP}/proj"
-
-
-###############################################################################
-
-### empty prefixes with some posts
-
-mkdir -p "${TEMP}/proj/"{contents,temp}
-
-cat > "${TEMP}/proj/contents/foo.blogc" <<EOF
-TITLE: Foo
-DATE: 2016-10-01
-----------------
-This is foo.
-EOF
-
-cat > "${TEMP}/proj/contents/bar.blogc" <<EOF
-TITLE: Bar
-DATE: 2016-09-01
-----------------
-This is bar.
-EOF
-
-cat > "${TEMP}/proj/temp/main.html" <<EOF
-{% block listing %}
-Listing: {% ifdef FILTER_TAG %}{{ FILTER_TAG }} - {% endif %}{{ TITLE }} - {{ DATE_FORMATTED }}
-{% endblock %}
-{% block entry %}
-{{ TITLE }}{% if MAKE_TYPE == "post" %} - {{ DATE_FORMATTED }}{% endif %}
-
-{{ CONTENT }}
-{% endblock %}
-EOF
-
-cat > "${TEMP}/proj/blogcfile" <<EOF
-[settings]
-content_dir = contents
-template_dir = temp
-main_template = main.html
-source_ext = .blogc
-pagination_prefix =
-posts_per_page = 1
-atom_posts_per_page = 1
-html_ext = /index.html
-index_prefix =
-post_prefix =
-tag_prefix =
-atom_prefix =
-atom_ext = .xml
-date_format = %b %d, %Y
-locale = en_US.utf8
-html_order = ASC
-atom_order = ASC
-
-[global]
-AUTHOR_NAME = Lol
-AUTHOR_EMAIL = author@example.com
-SITE_TITLE = Lol's Website
-SITE_TAGLINE = WAT?!
-BASE_DOMAIN = http://example.org
-
-[posts]
-foo
-bar
-EOF
-
-${TESTS_ENVIRONMENT} @abs_top_builddir@/blogc-make -f "${TEMP}/proj/blogcfile" 2>&1 | tee "${TEMP}/output.txt"
-grep "_build/index\\.html" "${TEMP}/output.txt"
-grep "_build/index\\.xml" "${TEMP}/output.txt"
-grep "_build/1/index\\.html" "${TEMP}/output.txt"
-grep "_build/2/index\\.html" "${TEMP}/output.txt"
-grep -v "_build/3/index\\.html" "${TEMP}/output.txt"
-grep "_build/foo/index\\.html" "${TEMP}/output.txt"
-grep "_build/bar/index\\.html" "${TEMP}/output.txt"
-
-rm "${TEMP}/output.txt"
-
-cat > "${TEMP}/expected-index.html" <<EOF
-
-Listing: Foo - Oct 01, 2016
-
-
-EOF
-diff -uN "${TEMP}/proj/_build/index.html" "${TEMP}/expected-index.html"
-diff -uN "${TEMP}/proj/_build/1/index.html" "${TEMP}/expected-index.html"
-
-cat > "${TEMP}/expected-page-2.html" <<EOF
-
-Listing: Bar - Sep 01, 2016
-
-
-EOF
-diff -uN "${TEMP}/proj/_build/2/index.html" "${TEMP}/expected-page-2.html"
-
-cat > "${TEMP}/expected-atom.xml" <<EOF
-<?xml version="1.0" encoding="utf-8"?>
-<feed xmlns="http://www.w3.org/2005/Atom">
- <title type="text">Lol's Website</title>
- <id>http://example.org/index.xml</id>
- <updated>2016-10-01T00:00:00Z</updated>
- <link href="http://example.org/" />
- <link href="http://example.org/index.xml" rel="self" />
- <author>
- <name>Lol</name>
- <email>author@example.com</email>
- </author>
- <subtitle type="text">WAT?!</subtitle>
- <entry>
- <title type="text">Foo</title>
- <id>http://example.org/foo/index.html</id>
- <updated>2016-10-01T00:00:00Z</updated>
- <published>2016-10-01T00:00:00Z</published>
- <link href="http://example.org/foo/index.html" />
- <author>
- <name>Lol</name>
- <email>author@example.com</email>
- </author>
- <content type="html"><![CDATA[<p>This is foo.</p>
-]]></content>
- </entry>
-</feed>
-EOF
-diff -uN "${TEMP}/proj/_build/index.xml" "${TEMP}/expected-atom.xml"
-
-cat > "${TEMP}/expected-post-foo.html" <<EOF
-
-
-Foo - Oct 01, 2016
-
-<p>This is foo.</p>
-
-
-EOF
-diff -uN "${TEMP}/proj/_build/foo/index.html" "${TEMP}/expected-post-foo.html"
-
-cat > "${TEMP}/expected-post-bar.html" <<EOF
-
-
-Bar - Sep 01, 2016
-
-<p>This is bar.</p>
-
-
-EOF
-diff -uN "${TEMP}/proj/_build/bar/index.html" "${TEMP}/expected-post-bar.html"
-
-rm -rf "${TEMP}/proj/_build"
-
-
-### empty prefixes with some posts and tags, and different exts
-
-cat > "${TEMP}/proj/contents/baz.blogc" <<EOF
-TITLE: Baz
-DATE: 2016-08-01
-TAGS: tag1 tag2
-----------------
-This is baz.
-EOF
-
-cat > "${TEMP}/proj/blogcfile" <<EOF
-[settings]
-content_dir = contents
-template_dir = temp
-main_template = main.html
-source_ext = .blogc
-pagination_prefix =
-posts_per_page = 1
-atom_posts_per_page = 1
-html_ext = .html
-index_prefix =
-post_prefix =
-tag_prefix =
-atom_prefix =
-atom_ext = /index.xml
-date_format = %b %d, %Y
-locale = en_US.utf8
-html_order = ASC
-atom_order = ASC
-
-[global]
-AUTHOR_NAME = Lol
-AUTHOR_EMAIL = author@example.com
-SITE_TITLE = Lol's Website
-SITE_TAGLINE = WAT?!
-BASE_DOMAIN = http://example.org
-
-[posts]
-foo
-bar
-baz
-
-[tags]
-tag1
-tag2
-EOF
-
-${TESTS_ENVIRONMENT} @abs_top_builddir@/blogc-make -f "${TEMP}/proj/blogcfile" 2>&1 | tee "${TEMP}/output.txt"
-grep "_build/index\\.html" "${TEMP}/output.txt"
-grep "_build/index\\.xml" "${TEMP}/output.txt"
-grep "_build/tag1/index\\.xml" "${TEMP}/output.txt"
-grep "_build/tag2/index\\.xml" "${TEMP}/output.txt"
-grep "_build/1\\.html" "${TEMP}/output.txt"
-grep "_build/2\\.html" "${TEMP}/output.txt"
-grep "_build/3\\.html" "${TEMP}/output.txt"
-grep -v "_build/4\\.html" "${TEMP}/output.txt"
-grep "_build/foo\\.html" "${TEMP}/output.txt"
-grep "_build/bar\\.html" "${TEMP}/output.txt"
-grep "_build/baz\\.html" "${TEMP}/output.txt"
-grep "_build/tag1\\.html" "${TEMP}/output.txt"
-grep "_build/tag1/1\\.html" "${TEMP}/output.txt"
-grep -v "_build/tag1/2\\.html" "${TEMP}/output.txt"
-grep "_build/tag2\\.html" "${TEMP}/output.txt"
-grep "_build/tag2/1\\.html" "${TEMP}/output.txt"
-grep -v "_build/tag2/2\\.html" "${TEMP}/output.txt"
-
-rm "${TEMP}/output.txt"
-
-diff -uN "${TEMP}/proj/_build/index.html" "${TEMP}/expected-index.html"
-diff -uN "${TEMP}/proj/_build/1.html" "${TEMP}/expected-index.html"
-diff -uN "${TEMP}/proj/_build/2.html" "${TEMP}/expected-page-2.html"
-
-cat > "${TEMP}/expected-page-3.html" <<EOF
-
-Listing: Baz - Aug 01, 2016
-
-
-EOF
-diff -uN "${TEMP}/proj/_build/3.html" "${TEMP}/expected-page-3.html"
-
-cat > "${TEMP}/expected-atom.xml" <<EOF
-<?xml version="1.0" encoding="utf-8"?>
-<feed xmlns="http://www.w3.org/2005/Atom">
- <title type="text">Lol's Website</title>
- <id>http://example.org/index.xml</id>
- <updated>2016-10-01T00:00:00Z</updated>
- <link href="http://example.org/" />
- <link href="http://example.org/index.xml" rel="self" />
- <author>
- <name>Lol</name>
- <email>author@example.com</email>
- </author>
- <subtitle type="text">WAT?!</subtitle>
- <entry>
- <title type="text">Foo</title>
- <id>http://example.org/foo.html</id>
- <updated>2016-10-01T00:00:00Z</updated>
- <published>2016-10-01T00:00:00Z</published>
- <link href="http://example.org/foo.html" />
- <author>
- <name>Lol</name>
- <email>author@example.com</email>
- </author>
- <content type="html"><![CDATA[<p>This is foo.</p>
-]]></content>
- </entry>
-</feed>
-EOF
-diff -uN "${TEMP}/proj/_build/index.xml" "${TEMP}/expected-atom.xml"
-
-cat > "${TEMP}/expected-atom-tag1.xml" <<EOF
-<?xml version="1.0" encoding="utf-8"?>
-<feed xmlns="http://www.w3.org/2005/Atom">
- <title type="text">Lol's Website - tag1</title>
- <id>http://example.org/tag1/index.xml</id>
- <updated>2016-08-01T00:00:00Z</updated>
- <link href="http://example.org/" />
- <link href="http://example.org/tag1/index.xml" rel="self" />
- <author>
- <name>Lol</name>
- <email>author@example.com</email>
- </author>
- <subtitle type="text">WAT?!</subtitle>
- <entry>
- <title type="text">Baz</title>
- <id>http://example.org/baz.html</id>
- <updated>2016-08-01T00:00:00Z</updated>
- <published>2016-08-01T00:00:00Z</published>
- <link href="http://example.org/baz.html" />
- <author>
- <name>Lol</name>
- <email>author@example.com</email>
- </author>
- <content type="html"><![CDATA[<p>This is baz.</p>
-]]></content>
- </entry>
-</feed>
-EOF
-diff -uN "${TEMP}/proj/_build/tag1/index.xml" "${TEMP}/expected-atom-tag1.xml"
-
-cat > "${TEMP}/expected-atom-tag2.xml" <<EOF
-<?xml version="1.0" encoding="utf-8"?>
-<feed xmlns="http://www.w3.org/2005/Atom">
- <title type="text">Lol's Website - tag2</title>
- <id>http://example.org/tag2/index.xml</id>
- <updated>2016-08-01T00:00:00Z</updated>
- <link href="http://example.org/" />
- <link href="http://example.org/tag2/index.xml" rel="self" />
- <author>
- <name>Lol</name>
- <email>author@example.com</email>
- </author>
- <subtitle type="text">WAT?!</subtitle>
- <entry>
- <title type="text">Baz</title>
- <id>http://example.org/baz.html</id>
- <updated>2016-08-01T00:00:00Z</updated>
- <published>2016-08-01T00:00:00Z</published>
- <link href="http://example.org/baz.html" />
- <author>
- <name>Lol</name>
- <email>author@example.com</email>
- </author>
- <content type="html"><![CDATA[<p>This is baz.</p>
-]]></content>
- </entry>
-</feed>
-EOF
-diff -uN "${TEMP}/proj/_build/tag2/index.xml" "${TEMP}/expected-atom-tag2.xml"
-
-cat > "${TEMP}/expected-post-baz.html" <<EOF
-
-
-Baz - Aug 01, 2016
-
-<p>This is baz.</p>
-
-
-EOF
-diff -uN "${TEMP}/proj/_build/foo.html" "${TEMP}/expected-post-foo.html"
-diff -uN "${TEMP}/proj/_build/bar.html" "${TEMP}/expected-post-bar.html"
-diff -uN "${TEMP}/proj/_build/baz.html" "${TEMP}/expected-post-baz.html"
-
-cat > "${TEMP}/expected-tag1.html" <<EOF
-
-Listing: tag1 - Baz - Aug 01, 2016
-
-
-EOF
-diff -uN "${TEMP}/proj/_build/tag1.html" "${TEMP}/expected-tag1.html"
-
-cat > "${TEMP}/expected-tag2.html" <<EOF
-
-Listing: tag2 - Baz - Aug 01, 2016
-
-
-EOF
-diff -uN "${TEMP}/proj/_build/tag2.html" "${TEMP}/expected-tag2.html"
-
-rm -rf "${TEMP}/proj/_build"
-
-
-### custom settings with some posts, pages and tags
-
-cat > "${TEMP}/proj/contents/page1.blogc" <<EOF
-TITLE: Page 1
--------------
-This is page 1.
-EOF
-
-cat > "${TEMP}/proj/contents/page2.blogc" <<EOF
-TITLE: Page 2
--------------
-This is page 2.
-EOF
-
-cat >> "${TEMP}/proj/blogcfile" <<EOF
-[pages]
-page1
-page2
-EOF
-
-${TESTS_ENVIRONMENT} @abs_top_builddir@/blogc-make -f "${TEMP}/proj/blogcfile" 2>&1 | tee "${TEMP}/output.txt"
-grep "_build/index\\.html" "${TEMP}/output.txt"
-grep "_build/index\\.xml" "${TEMP}/output.txt"
-grep "_build/tag1/index\\.xml" "${TEMP}/output.txt"
-grep "_build/tag2/index\\.xml" "${TEMP}/output.txt"
-grep "_build/1\\.html" "${TEMP}/output.txt"
-grep "_build/2\\.html" "${TEMP}/output.txt"
-grep "_build/3\\.html" "${TEMP}/output.txt"
-grep -v "_build/4\\.html" "${TEMP}/output.txt"
-grep "_build/foo\\.html" "${TEMP}/output.txt"
-grep "_build/bar\\.html" "${TEMP}/output.txt"
-grep "_build/baz\\.html" "${TEMP}/output.txt"
-grep "_build/tag1\\.html" "${TEMP}/output.txt"
-grep "_build/tag2\\.html" "${TEMP}/output.txt"
-grep "_build/page1\\.html" "${TEMP}/output.txt"
-grep "_build/page2\\.html" "${TEMP}/output.txt"
-
-rm "${TEMP}/output.txt"
-
-diff -uN "${TEMP}/proj/_build/index.html" "${TEMP}/expected-index.html"
-diff -uN "${TEMP}/proj/_build/1.html" "${TEMP}/expected-index.html"
-diff -uN "${TEMP}/proj/_build/2.html" "${TEMP}/expected-page-2.html"
-diff -uN "${TEMP}/proj/_build/3.html" "${TEMP}/expected-page-3.html"
-
-diff -uN "${TEMP}/proj/_build/index.xml" "${TEMP}/expected-atom.xml"
-diff -uN "${TEMP}/proj/_build/tag1/index.xml" "${TEMP}/expected-atom-tag1.xml"
-diff -uN "${TEMP}/proj/_build/tag2/index.xml" "${TEMP}/expected-atom-tag2.xml"
-
-diff -uN "${TEMP}/proj/_build/foo.html" "${TEMP}/expected-post-foo.html"
-diff -uN "${TEMP}/proj/_build/bar.html" "${TEMP}/expected-post-bar.html"
-diff -uN "${TEMP}/proj/_build/baz.html" "${TEMP}/expected-post-baz.html"
-
-diff -uN "${TEMP}/proj/_build/tag1.html" "${TEMP}/expected-tag1.html"
-diff -uN "${TEMP}/proj/_build/tag2.html" "${TEMP}/expected-tag2.html"
-
-cat > "${TEMP}/expected-page1.html" <<EOF
-
-
-Page 1
-
-<p>This is page 1.</p>
-
-
-EOF
-diff -uN "${TEMP}/proj/_build/page1.html" "${TEMP}/expected-page1.html"
-
-cat > "${TEMP}/expected-page2.html" <<EOF
-
-
-Page 2
-
-<p>This is page 2.</p>
-
-
-EOF
-diff -uN "${TEMP}/proj/_build/page2.html" "${TEMP}/expected-page2.html"
-
-rm -rf "${TEMP}/proj/_build"
diff --git a/tests/blogc-make/check_exec.c b/tests/blogc-make/check_exec.c
deleted file mode 100644
index 6b15423..0000000
--- a/tests/blogc-make/check_exec.c
+++ /dev/null
@@ -1,318 +0,0 @@
-/*
- * blogc: A blog compiler.
- * Copyright (C) 2014-2019 Rafael G. Martins <rafael@rafaelmartins.eng.br>
- *
- * This program can be distributed under the terms of the BSD License.
- * See the file LICENSE.
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif /* HAVE_CONFIG_H */
-
-#include <stdarg.h>
-#include <stddef.h>
-#include <setjmp.h>
-#include <cmocka.h>
-
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-
-#include "../../src/blogc-make/exec.h"
-#include "../../src/blogc-make/settings.h"
-#include "../../src/common/utils.h"
-
-
-int
-__wrap_access(const char *pathname, int mode)
-{
- assert_int_equal(mode, X_OK);
- assert_string_equal(pathname, mock_type(const char*));
- return mock_type(int);
-}
-
-
-static void
-test_find_binary(void **state)
-{
- unsetenv("BLOGC");
-
- char *bin = bm_exec_find_binary(NULL, "blogc", "BLOGC");
- assert_string_equal(bin, "blogc");
- free(bin);
-
- bin = bm_exec_find_binary("blogc-make", "blogc", "BLOGC");
- assert_string_equal(bin, "blogc");
- free(bin);
-
- will_return(__wrap_access, "../blogc");
- will_return(__wrap_access, 0);
- bin = bm_exec_find_binary("../blogc-make", "blogc", "BLOGC");
- assert_string_equal(bin, "'../blogc'");
- free(bin);
-
- will_return(__wrap_access, "/usr/bin/blogc");
- will_return(__wrap_access, 0);
- bin = bm_exec_find_binary("/usr/bin/blogc-make", "blogc", "BLOGC");
- assert_string_equal(bin, "'/usr/bin/blogc'");
- free(bin);
-
- will_return(__wrap_access, "../blogc");
- will_return(__wrap_access, 1);
- bin = bm_exec_find_binary("../blogc-make", "blogc", "BLOGC");
- assert_string_equal(bin, "blogc");
- free(bin);
-
- setenv("BLOGC", "/path/to/blogc", 1);
- bin = bm_exec_find_binary(NULL, "blogc", "BLOGC");
- assert_string_equal(bin, "'/path/to/blogc'");
- free(bin);
- unsetenv("BLOGC");
-}
-
-
-static void
-test_build_blogc_cmd_with_settings(void **state)
-{
- 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->global = bc_trie_new(free);
- bc_trie_insert(settings->global, "FOO", bc_strdup("BAR"));
- bc_trie_insert(settings->global, "BAR", bc_strdup("BAZ"));
- bc_trie_t *variables = bc_trie_new(free);
- bc_trie_insert(variables, "LOL", bc_strdup("HEHE"));
- bc_trie_t *local = bc_trie_new(free);
- bc_trie_insert(local, "ASD", bc_strdup("QWE"));
- settings->tags = NULL;
-
- char *rv = bm_exec_build_blogc_cmd("blogc", settings, variables, local, NULL,
- true, NULL, "main.tmpl", "foo.html", false, true);
- assert_string_equal(rv,
- "LC_ALL='en_US.utf8' blogc -D FOO='BAR' -D BAR='BAZ' -D LOL='HEHE' "
- "-D ASD='QWE' -l -t 'main.tmpl' -o 'foo.html' -i");
- free(rv);
-
- rv = bm_exec_build_blogc_cmd("blogc", settings, variables, local, NULL, true,
- "foo.txt", "main.tmpl", "foo.html", false, true);
- assert_string_equal(rv,
- "LC_ALL='en_US.utf8' blogc -D FOO='BAR' -D BAR='BAZ' -D LOL='HEHE' "
- "-D ASD='QWE' -l -e 'foo.txt' -t 'main.tmpl' -o 'foo.html' -i");
- free(rv);
-
- rv = bm_exec_build_blogc_cmd("blogc", settings, variables, NULL, NULL, false,
- NULL, NULL, NULL, false, 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("blogc", settings, NULL, NULL, NULL, false,
- NULL, NULL, NULL, false, false);
- assert_string_equal(rv,
- "LC_ALL='en_US.utf8' blogc -D FOO='BAR' -D BAR='BAZ'");
- free(rv);
-
- bc_trie_free(local);
- bc_trie_free(variables);
- bc_trie_free(settings->settings);
- bc_trie_free(settings->global);
- free(settings);
-}
-
-
-static void
-test_build_blogc_cmd_with_settings_and_dev(void **state)
-{
- 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->global = bc_trie_new(free);
- bc_trie_insert(settings->global, "FOO", bc_strdup("BAR"));
- bc_trie_insert(settings->global, "BAR", bc_strdup("BAZ"));
- bc_trie_t *variables = bc_trie_new(free);
- bc_trie_insert(variables, "LOL", bc_strdup("HEHE"));
- bc_trie_t *local = bc_trie_new(free);
- bc_trie_insert(local, "ASD", bc_strdup("QWE"));
- settings->tags = NULL;
-
- char *rv = bm_exec_build_blogc_cmd("blogc", settings, variables, local, NULL,
- true, NULL, "main.tmpl", "foo.html", true, true);
- assert_string_equal(rv,
- "LC_ALL='en_US.utf8' blogc -D FOO='BAR' -D BAR='BAZ' -D LOL='HEHE' "
- "-D ASD='QWE' -D MAKE_ENV_DEV=1 -D MAKE_ENV='dev' -l -t 'main.tmpl' "
- "-o 'foo.html' -i");
- free(rv);
-
- rv = bm_exec_build_blogc_cmd("blogc", settings, variables, local, NULL, true,
- "foo.txt", "main.tmpl", "foo.html", true, true);
- assert_string_equal(rv,
- "LC_ALL='en_US.utf8' blogc -D FOO='BAR' -D BAR='BAZ' -D LOL='HEHE' "
- "-D ASD='QWE' -D MAKE_ENV_DEV=1 -D MAKE_ENV='dev' -l -e 'foo.txt' "
- "-t 'main.tmpl' -o 'foo.html' -i");
- free(rv);
-
- rv = bm_exec_build_blogc_cmd("blogc", settings, variables, NULL, NULL, false,
- NULL, NULL, NULL, true, false);
- assert_string_equal(rv,
- "LC_ALL='en_US.utf8' blogc -D FOO='BAR' -D BAR='BAZ' -D LOL='HEHE' "
- "-D MAKE_ENV_DEV=1 -D MAKE_ENV='dev'");
- free(rv);
-
- rv = bm_exec_build_blogc_cmd("blogc", settings, NULL, NULL, NULL, false,
- NULL, NULL, NULL, true, false);
- assert_string_equal(rv,
- "LC_ALL='en_US.utf8' blogc -D FOO='BAR' -D BAR='BAZ' "
- "-D MAKE_ENV_DEV=1 -D MAKE_ENV='dev'");
- free(rv);
-
- bc_trie_free(local);
- bc_trie_free(variables);
- bc_trie_free(settings->settings);
- bc_trie_free(settings->global);
- free(settings);
-}
-
-
-static void
-test_build_blogc_cmd_with_settings_and_tags(void **state)
-{
- 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->global = bc_trie_new(free);
- bc_trie_insert(settings->global, "FOO", bc_strdup("BAR"));
- bc_trie_insert(settings->global, "BAR", bc_strdup("BAZ"));
- bc_trie_t *variables = bc_trie_new(free);
- bc_trie_insert(variables, "LOL", bc_strdup("HEHE"));
- bc_trie_t *local = bc_trie_new(free);
- bc_trie_insert(local, "ASD", bc_strdup("QWE"));
- settings->tags = bc_str_split("asd foo bar", ' ', 0);
-
- char *rv = bm_exec_build_blogc_cmd("blogc", settings, variables, local, NULL,
- true, NULL, "main.tmpl", "foo.html", true, true);
- assert_string_equal(rv,
- "LC_ALL='en_US.utf8' blogc -D MAKE_TAGS='asd foo bar' -D FOO='BAR' "
- "-D BAR='BAZ' -D LOL='HEHE' -D ASD='QWE' -D MAKE_ENV_DEV=1 "
- "-D MAKE_ENV='dev' -l -t 'main.tmpl' -o 'foo.html' -i");
- free(rv);
-
- rv = bm_exec_build_blogc_cmd("blogc", settings, variables, local, NULL, true,
- "foo.txt", "main.tmpl", "foo.html", true, true);
- assert_string_equal(rv,
- "LC_ALL='en_US.utf8' blogc -D MAKE_TAGS='asd foo bar' -D FOO='BAR' "
- "-D BAR='BAZ' -D LOL='HEHE' -D ASD='QWE' -D MAKE_ENV_DEV=1 "
- "-D MAKE_ENV='dev' -l -e 'foo.txt' -t 'main.tmpl' -o 'foo.html' -i");
- free(rv);
-
- rv = bm_exec_build_blogc_cmd("blogc", settings, variables, NULL, NULL, false,
- NULL, NULL, NULL, true, false);
- assert_string_equal(rv,
- "LC_ALL='en_US.utf8' blogc -D MAKE_TAGS='asd foo bar' -D FOO='BAR' "
- "-D BAR='BAZ' -D LOL='HEHE' -D MAKE_ENV_DEV=1 -D MAKE_ENV='dev'");
- free(rv);
-
- rv = bm_exec_build_blogc_cmd("blogc", settings, NULL, NULL, NULL, false,
- NULL, NULL, NULL, true, false);
- assert_string_equal(rv,
- "LC_ALL='en_US.utf8' blogc -D MAKE_TAGS='asd foo bar' -D FOO='BAR' "
- "-D BAR='BAZ' -D MAKE_ENV_DEV=1 -D MAKE_ENV='dev'");
- free(rv);
-
- bc_trie_free(local);
- bc_trie_free(variables);
- bc_trie_free(settings->settings);
- bc_trie_free(settings->global);
- bc_strv_free(settings->tags);
- free(settings);
-}
-
-
-static void
-test_build_blogc_cmd_without_settings(void **state)
-{
- bc_trie_t *variables = bc_trie_new(free);
- bc_trie_insert(variables, "LOL", bc_strdup("HEHE"));
- bc_trie_t *local = bc_trie_new(free);
- bc_trie_insert(local, "ASD", bc_strdup("QWE"));
-
- char *rv = bm_exec_build_blogc_cmd("blogc", NULL, variables, local, NULL,
- true, NULL, "main.tmpl", "foo.html", false, true);
- assert_string_equal(rv,
- "blogc -D LOL='HEHE' -D ASD='QWE' -l -t 'main.tmpl' -o 'foo.html' -i");
- free(rv);
-
- rv = bm_exec_build_blogc_cmd("blogc", NULL, variables, local, NULL, true,
- "foo.txt", "main.tmpl", "foo.html", false, true);
- assert_string_equal(rv,
- "blogc -D LOL='HEHE' -D ASD='QWE' -l -e 'foo.txt' -t 'main.tmpl' "
- "-o 'foo.html' -i");
- free(rv);
-
- rv = bm_exec_build_blogc_cmd("blogc", NULL, variables, NULL, NULL, false,
- NULL, NULL, NULL, false, false);
- assert_string_equal(rv,
- "blogc -D LOL='HEHE'");
- free(rv);
-
- rv = bm_exec_build_blogc_cmd("blogc", NULL, NULL, NULL, NULL, false, NULL,
- NULL, NULL, false, false);
- assert_string_equal(rv,
- "blogc");
- free(rv);
-
- bc_trie_free(local);
- bc_trie_free(variables);
-}
-
-
-static void
-test_build_blogc_cmd_print(void **state)
-{
- bc_trie_t *variables = bc_trie_new(free);
- bc_trie_insert(variables, "LOL", bc_strdup("HEHE"));
- bc_trie_t *local = bc_trie_new(free);
- bc_trie_insert(local, "ASD", bc_strdup("QWE"));
-
- char *rv = bm_exec_build_blogc_cmd("blogc", NULL, variables, local, "LOL",
- false, NULL, NULL, NULL, false, true);
- assert_string_equal(rv, "blogc -D LOL='HEHE' -D ASD='QWE' -p LOL -i");
- free(rv);
-
- rv = bm_exec_build_blogc_cmd("blogc", NULL, variables, local, "LOL", true,
- NULL, NULL, NULL, false, false);
- assert_string_equal(rv, "blogc -D LOL='HEHE' -D ASD='QWE' -p LOL -l");
- free(rv);
-
- rv = bm_exec_build_blogc_cmd("blogc", NULL, variables, NULL, "LOL", false,
- NULL, NULL, NULL, false, true);
- assert_string_equal(rv,
- "blogc -D LOL='HEHE' -p LOL -i");
- free(rv);
-
- rv = bm_exec_build_blogc_cmd("blogc", NULL, NULL, NULL, "LOL", false, NULL,
- NULL, NULL, false, false);
- assert_string_equal(rv,
- "blogc -p LOL");
- free(rv);
-
- bc_trie_free(local);
- bc_trie_free(variables);
-}
-
-
-int
-main(void)
-{
- const struct CMUnitTest tests[] = {
-#ifndef MAKE_EMBEDDED
- cmocka_unit_test(test_find_binary),
-#endif
- cmocka_unit_test(test_build_blogc_cmd_with_settings),
- cmocka_unit_test(test_build_blogc_cmd_with_settings_and_dev),
- cmocka_unit_test(test_build_blogc_cmd_with_settings_and_tags),
- cmocka_unit_test(test_build_blogc_cmd_without_settings),
- cmocka_unit_test(test_build_blogc_cmd_print),
- };
- return cmocka_run_group_tests(tests, NULL, NULL);
-}
diff --git a/tests/blogc-make/check_rules.c b/tests/blogc-make/check_rules.c
deleted file mode 100644
index 5da412f..0000000
--- a/tests/blogc-make/check_rules.c
+++ /dev/null
@@ -1,104 +0,0 @@
-/*
- * blogc: A blog compiler.
- * Copyright (C) 2014-2019 Rafael G. Martins <rafael@rafaelmartins.eng.br>
- *
- * This program can be distributed under the terms of the BSD License.
- * See the file LICENSE.
- */
-
-#include <stdarg.h>
-#include <stddef.h>
-#include <setjmp.h>
-#include <cmocka.h>
-
-#include <stdlib.h>
-#include <string.h>
-
-#include "../../src/blogc-make/rules.h"
-#include "../../src/common/utils.h"
-
-
-static void
-test_rule_parse_args(void **state)
-{
- bc_trie_t *t = bm_rule_parse_args("bola:foo=" + 4);
- assert_non_null(t);
- assert_int_equal(bc_trie_size(t), 1);
- assert_string_equal(bc_trie_lookup(t, "foo"), "");
- bc_trie_free(t);
- t = bm_rule_parse_args("bola:foo=bar" + 4);
- assert_non_null(t);
- assert_int_equal(bc_trie_size(t), 1);
- assert_string_equal(bc_trie_lookup(t, "foo"), "bar");
- bc_trie_free(t);
- t = bm_rule_parse_args("bola:foo=,baz=lol" + 4);
- assert_non_null(t);
- assert_int_equal(bc_trie_size(t), 2);
- assert_string_equal(bc_trie_lookup(t, "foo"), "");
- assert_string_equal(bc_trie_lookup(t, "baz"), "lol");
- bc_trie_free(t);
- t = bm_rule_parse_args("bola:foo=bar,baz=" + 4);
- assert_non_null(t);
- assert_int_equal(bc_trie_size(t), 2);
- assert_string_equal(bc_trie_lookup(t, "foo"), "bar");
- assert_string_equal(bc_trie_lookup(t, "baz"), "");
- bc_trie_free(t);
- t = bm_rule_parse_args("bola:foo=bar,baz=lol" + 4);
- assert_non_null(t);
- assert_int_equal(bc_trie_size(t), 2);
- assert_string_equal(bc_trie_lookup(t, "foo"), "bar");
- assert_string_equal(bc_trie_lookup(t, "baz"), "lol");
- bc_trie_free(t);
- t = bm_rule_parse_args("bola:foo=,baz=lol,asd=qwe" + 4);
- assert_non_null(t);
- assert_int_equal(bc_trie_size(t), 3);
- assert_string_equal(bc_trie_lookup(t, "foo"), "");
- assert_string_equal(bc_trie_lookup(t, "baz"), "lol");
- assert_string_equal(bc_trie_lookup(t, "asd"), "qwe");
- bc_trie_free(t);
- t = bm_rule_parse_args("bola:foo=bar,baz=,asd=qwe" + 4);
- assert_non_null(t);
- assert_int_equal(bc_trie_size(t), 3);
- assert_string_equal(bc_trie_lookup(t, "foo"), "bar");
- assert_string_equal(bc_trie_lookup(t, "baz"), "");
- assert_string_equal(bc_trie_lookup(t, "asd"), "qwe");
- bc_trie_free(t);
- t = bm_rule_parse_args("bola:foo=bar,baz=lol,asd=" + 4);
- assert_non_null(t);
- assert_int_equal(bc_trie_size(t), 3);
- assert_string_equal(bc_trie_lookup(t, "foo"), "bar");
- assert_string_equal(bc_trie_lookup(t, "baz"), "lol");
- assert_string_equal(bc_trie_lookup(t, "asd"), "");
- bc_trie_free(t);
- t = bm_rule_parse_args("bola:foo=bar,baz=lol,asd=qwe" + 4);
- assert_non_null(t);
- assert_int_equal(bc_trie_size(t), 3);
- assert_string_equal(bc_trie_lookup(t, "foo"), "bar");
- assert_string_equal(bc_trie_lookup(t, "baz"), "lol");
- assert_string_equal(bc_trie_lookup(t, "asd"), "qwe");
- bc_trie_free(t);
-}
-
-
-static void
-test_rule_parse_args_error(void **state)
-{
- assert_null(bm_rule_parse_args(NULL));
- assert_null(bm_rule_parse_args("bola" + 4));
- assert_null(bm_rule_parse_args("bola:" + 4));
- assert_null(bm_rule_parse_args("bola:asd" + 4));
- assert_null(bm_rule_parse_args("bola:asd=foo,lol" + 4));
- assert_null(bm_rule_parse_args("bola:asd=foo,qwe=bar,lol" + 4));
- assert_null(bm_rule_parse_args("bolaasd" + 4));
-}
-
-
-int
-main(void)
-{
- const struct CMUnitTest tests[] = {
- cmocka_unit_test(test_rule_parse_args),
- cmocka_unit_test(test_rule_parse_args_error),
- };
- return cmocka_run_group_tests(tests, NULL, NULL);
-}
diff --git a/tests/blogc-make/check_settings.c b/tests/blogc-make/check_settings.c
deleted file mode 100644
index b268570..0000000
--- a/tests/blogc-make/check_settings.c
+++ /dev/null
@@ -1,394 +0,0 @@
-/*
- * blogc: A blog compiler.
- * Copyright (C) 2014-2019 Rafael G. Martins <rafael@rafaelmartins.eng.br>
- *
- * This program can be distributed under the terms of the BSD License.
- * See the file LICENSE.
- */
-
-#include <stdarg.h>
-#include <stddef.h>
-#include <setjmp.h>
-#include <cmocka.h>
-
-#include <stdlib.h>
-#include <string.h>
-
-#include "../../src/blogc-make/settings.h"
-#include "../../src/common/error.h"
-#include "../../src/common/utils.h"
-
-
-static void
-test_settings_empty(void **state)
-{
- const char *a = "";
- bc_error_t *err = NULL;
- bm_settings_t *s = bm_settings_parse(a, strlen(a), &err);
- assert_non_null(err);
- assert_null(s);
- assert_int_equal(err->type, BLOGC_MAKE_ERROR_SETTINGS);
- assert_string_equal(err->msg,
- "[global] key required but not found or empty: AUTHOR_NAME");
- bc_error_free(err);
-}
-
-
-static void
-test_settings(void **state)
-{
- const char *a =
- "[settings]\n"
- "content_dir = guda\n"
- "main_template = foo.tmpl\n"
- "\n"
- "[global]\n"
- "BOLA = asd\n"
- "GUDA = qwe\n";
- bc_error_t *err = NULL;
- bm_settings_t *s = bm_settings_parse(a, strlen(a), &err);
- assert_non_null(err);
- assert_null(s);
- assert_int_equal(err->type, BLOGC_MAKE_ERROR_SETTINGS);
- assert_string_equal(err->msg,
- "[global] key required but not found or empty: AUTHOR_NAME");
- bc_error_free(err);
-
- a =
- "[settings]\n"
- "content_dir = guda\n"
- "main_template = foo.tmpl\n"
- "\n"
- "[global]\n"
- "bOLA = asd\n"
- "GUDA = qwe\n";
- err = NULL;
- s = bm_settings_parse(a, strlen(a), &err);
- assert_non_null(err);
- assert_null(s);
- assert_int_equal(err->type, BLOGC_MAKE_ERROR_SETTINGS);
- assert_string_equal(err->msg,
- "Invalid [global] key (first character must be uppercase): bOLA");
- bc_error_free(err);
-
- a =
- "[settings]\n"
- "content_dir = guda\n"
- "main_template = foo.tmpl\n"
- "\n"
- "[global]\n"
- "BOLA = asd\n"
- "GUDa = qwe\n";
- err = NULL;
- s = bm_settings_parse(a, strlen(a), &err);
- assert_non_null(err);
- assert_null(s);
- assert_int_equal(err->type, BLOGC_MAKE_ERROR_SETTINGS);
- assert_string_equal(err->msg,
- "Invalid [global] key (must be uppercase with '_' and digits after first character): GUDa");
- bc_error_free(err);
-}
-
-
-static void
-test_settings_env(void **state)
-{
- const char *a =
- "[settings]\n"
- "content_dir = guda\n"
- "main_template = foo.tmpl\n"
- "\n"
- "[environment]\n"
- "BOLA = asd\n"
- "GUDA = qwe\n";
- bc_error_t *err = NULL;
- bm_settings_t *s = bm_settings_parse(a, strlen(a), &err);
- assert_non_null(err);
- assert_null(s);
- assert_int_equal(err->type, BLOGC_MAKE_ERROR_SETTINGS);
- assert_string_equal(err->msg,
- "[environment] key required but not found or empty: AUTHOR_NAME");
- bc_error_free(err);
-}
-
-
-static void
-test_settings2(void **state)
-{
- const char *a =
- "[settings]\n"
- "content_dir = guda\n"
- "main_template = foo.tmpl\n"
- "\n"
- "[global]\n"
- "BOLA = asd\n"
- "GUDA = qwe\n"
- "AUTHOR_NAME = chunda\n"
- "AUTHOR_EMAIL = chunda@example.com\n"
- "SITE_TITLE = Fuuuuuuuuu\n"
- "SITE_TAGLINE = My cool tagline\n"
- "BASE_DOMAIN = http://example.com\n"
- "\n"
- "[posts]\n"
- "\n"
- "aaaa\n"
- "bbbb\n"
- "cccc\n"
- "[pages]\n"
- " dddd\n"
- "eeee\n"
- "ffff\n"
- "[tags]\n"
- "gggg\n"
- "\n"
- " hhhh\n"
- "iiii\n"
- "[copy]\n"
- "jjjj\n"
- "kkkk\n"
- "llll\n";
- bc_error_t *err = NULL;
- bm_settings_t *s = bm_settings_parse(a, strlen(a), &err);
- assert_null(err);
- assert_non_null(s);
- assert_int_equal(bc_trie_size(s->global), 7);
- assert_string_equal(bc_trie_lookup(s->global, "BOLA"), "asd");
- assert_string_equal(bc_trie_lookup(s->global, "GUDA"), "qwe");
- assert_string_equal(bc_trie_lookup(s->global, "AUTHOR_NAME"), "chunda");
- assert_string_equal(bc_trie_lookup(s->global, "AUTHOR_EMAIL"), "chunda@example.com");
- assert_string_equal(bc_trie_lookup(s->global, "SITE_TITLE"), "Fuuuuuuuuu");
- assert_string_equal(bc_trie_lookup(s->global, "SITE_TAGLINE"), "My cool tagline");
- assert_string_equal(bc_trie_lookup(s->global, "BASE_DOMAIN"), "http://example.com");
- assert_int_equal(bc_trie_size(s->settings), 16);
- assert_string_equal(bc_trie_lookup(s->settings, "source_ext"), ".txt");
- assert_string_equal(bc_trie_lookup(s->settings, "html_ext"), "/index.html");
- assert_string_equal(bc_trie_lookup(s->settings, "content_dir"), "guda");
- assert_string_equal(bc_trie_lookup(s->settings, "template_dir"), "templates");
- assert_string_equal(bc_trie_lookup(s->settings, "main_template"), "foo.tmpl");
- assert_string_equal(bc_trie_lookup(s->settings, "date_format"),
- "%b %d, %Y, %I:%M %p GMT");
- assert_string_equal(bc_trie_lookup(s->settings, "posts_per_page"), "10");
- assert_string_equal(bc_trie_lookup(s->settings, "atom_prefix"), "atom");
- assert_string_equal(bc_trie_lookup(s->settings, "atom_ext"), ".xml");
- assert_string_equal(bc_trie_lookup(s->settings, "atom_posts_per_page"), "10");
- assert_string_equal(bc_trie_lookup(s->settings, "pagination_prefix"), "page");
- assert_string_equal(bc_trie_lookup(s->settings, "post_prefix"), "post");
- assert_string_equal(bc_trie_lookup(s->settings, "tag_prefix"), "tag");
- assert_string_equal(bc_trie_lookup(s->settings, "html_order"), "DESC");
- assert_string_equal(bc_trie_lookup(s->settings, "atom_order"), "DESC");
- assert_string_equal(bc_trie_lookup(s->settings, "index_prefix"), "");
- assert_non_null(s->posts);
- assert_string_equal(s->posts[0], "aaaa");
- assert_string_equal(s->posts[1], "bbbb");
- assert_string_equal(s->posts[2], "cccc");
- assert_null(s->posts[3]);
- assert_non_null(s->pages);
- assert_string_equal(s->pages[0], "dddd");
- assert_string_equal(s->pages[1], "eeee");
- assert_string_equal(s->pages[2], "ffff");
- assert_null(s->pages[3]);
- assert_non_null(s->copy);
- assert_string_equal(s->copy[0], "jjjj");
- assert_string_equal(s->copy[1], "kkkk");
- assert_string_equal(s->copy[2], "llll");
- assert_null(s->copy[3]);
- assert_non_null(s->tags);
- assert_string_equal(s->tags[0], "gggg");
- assert_string_equal(s->tags[1], "hhhh");
- assert_string_equal(s->tags[2], "iiii");
- assert_null(s->tags[3]);
- bm_settings_free(s);
-}
-
-
-static void
-test_settings_env2(void **state)
-{
- const char *a =
- "[settings]\n"
- "content_dir = guda\n"
- "main_template = foo.tmpl\n"
- "\n"
- "[environment]\n"
- "BOLA = asd\n"
- "GUDA = qwe\n"
- "AUTHOR_NAME = chunda\n"
- "AUTHOR_EMAIL = chunda@example.com\n"
- "SITE_TITLE = Fuuuuuuuuu\n"
- "SITE_TAGLINE = My cool tagline\n"
- "BASE_DOMAIN = http://example.com\n"
- "\n"
- "[posts]\n"
- "\n"
- "aaaa\n"
- "bbbb\n"
- "cccc\n"
- "[pages]\n"
- " dddd\n"
- "eeee\n"
- "ffff\n"
- "[tags]\n"
- "gggg\n"
- "\n"
- " hhhh\n"
- "iiii\n"
- "[copy]\n"
- "jjjj\n"
- "kkkk\n"
- "llll\n";
- bc_error_t *err = NULL;
- bm_settings_t *s = bm_settings_parse(a, strlen(a), &err);
- assert_null(err);
- assert_non_null(s);
- assert_int_equal(bc_trie_size(s->global), 7);
- assert_string_equal(bc_trie_lookup(s->global, "BOLA"), "asd");
- assert_string_equal(bc_trie_lookup(s->global, "GUDA"), "qwe");
- assert_string_equal(bc_trie_lookup(s->global, "AUTHOR_NAME"), "chunda");
- assert_string_equal(bc_trie_lookup(s->global, "AUTHOR_EMAIL"), "chunda@example.com");
- assert_string_equal(bc_trie_lookup(s->global, "SITE_TITLE"), "Fuuuuuuuuu");
- assert_string_equal(bc_trie_lookup(s->global, "SITE_TAGLINE"), "My cool tagline");
- assert_string_equal(bc_trie_lookup(s->global, "BASE_DOMAIN"), "http://example.com");
- assert_int_equal(bc_trie_size(s->settings), 16);
- assert_string_equal(bc_trie_lookup(s->settings, "source_ext"), ".txt");
- assert_string_equal(bc_trie_lookup(s->settings, "html_ext"), "/index.html");
- assert_string_equal(bc_trie_lookup(s->settings, "content_dir"), "guda");
- assert_string_equal(bc_trie_lookup(s->settings, "template_dir"), "templates");
- assert_string_equal(bc_trie_lookup(s->settings, "main_template"), "foo.tmpl");
- assert_string_equal(bc_trie_lookup(s->settings, "date_format"),
- "%b %d, %Y, %I:%M %p GMT");
- assert_string_equal(bc_trie_lookup(s->settings, "posts_per_page"), "10");
- assert_string_equal(bc_trie_lookup(s->settings, "atom_prefix"), "atom");
- assert_string_equal(bc_trie_lookup(s->settings, "atom_ext"), ".xml");
- assert_string_equal(bc_trie_lookup(s->settings, "atom_posts_per_page"), "10");
- assert_string_equal(bc_trie_lookup(s->settings, "pagination_prefix"), "page");
- assert_string_equal(bc_trie_lookup(s->settings, "post_prefix"), "post");
- assert_string_equal(bc_trie_lookup(s->settings, "tag_prefix"), "tag");
- assert_string_equal(bc_trie_lookup(s->settings, "html_order"), "DESC");
- assert_string_equal(bc_trie_lookup(s->settings, "atom_order"), "DESC");
- assert_string_equal(bc_trie_lookup(s->settings, "index_prefix"), "");
- assert_non_null(s->posts);
- assert_string_equal(s->posts[0], "aaaa");
- assert_string_equal(s->posts[1], "bbbb");
- assert_string_equal(s->posts[2], "cccc");
- assert_null(s->posts[3]);
- assert_non_null(s->pages);
- assert_string_equal(s->pages[0], "dddd");
- assert_string_equal(s->pages[1], "eeee");
- assert_string_equal(s->pages[2], "ffff");
- assert_null(s->pages[3]);
- assert_non_null(s->copy);
- assert_string_equal(s->copy[0], "jjjj");
- assert_string_equal(s->copy[1], "kkkk");
- assert_string_equal(s->copy[2], "llll");
- assert_null(s->copy[3]);
- assert_non_null(s->tags);
- assert_string_equal(s->tags[0], "gggg");
- assert_string_equal(s->tags[1], "hhhh");
- assert_string_equal(s->tags[2], "iiii");
- assert_null(s->tags[3]);
- bm_settings_free(s);
-}
-
-
-static void
-test_settings_copy_files(void **state)
-{
- const char *a =
- "[settings]\n"
- "content_dir = guda\n"
- "main_template = foo.tmpl\n"
- "\n"
- "[global]\n"
- "BOLA = asd\n"
- "GUDA = qwe\n"
- "AUTHOR_NAME = chunda\n"
- "AUTHOR_EMAIL = chunda@example.com\n"
- "SITE_TITLE = Fuuuuuuuuu\n"
- "SITE_TAGLINE = My cool tagline\n"
- "BASE_DOMAIN = http://example.com\n"
- "\n"
- "[posts]\n"
- "\n"
- "aaaa\n"
- "bbbb\n"
- "cccc\n"
- "[pages]\n"
- " dddd\n"
- "eeee\n"
- "ffff\n"
- "[tags]\n"
- "gggg\n"
- "\n"
- " hhhh\n"
- "iiii\n"
- "[copy_files]\n"
- "jjjj\n"
- "kkkk\n"
- "llll\n";
- bc_error_t *err = NULL;
- bm_settings_t *s = bm_settings_parse(a, strlen(a), &err);
- assert_null(err);
- assert_non_null(s);
- assert_int_equal(bc_trie_size(s->global), 7);
- assert_string_equal(bc_trie_lookup(s->global, "BOLA"), "asd");
- assert_string_equal(bc_trie_lookup(s->global, "GUDA"), "qwe");
- assert_string_equal(bc_trie_lookup(s->global, "AUTHOR_NAME"), "chunda");
- assert_string_equal(bc_trie_lookup(s->global, "AUTHOR_EMAIL"), "chunda@example.com");
- assert_string_equal(bc_trie_lookup(s->global, "SITE_TITLE"), "Fuuuuuuuuu");
- assert_string_equal(bc_trie_lookup(s->global, "SITE_TAGLINE"), "My cool tagline");
- assert_string_equal(bc_trie_lookup(s->global, "BASE_DOMAIN"), "http://example.com");
- assert_int_equal(bc_trie_size(s->settings), 16);
- assert_string_equal(bc_trie_lookup(s->settings, "source_ext"), ".txt");
- assert_string_equal(bc_trie_lookup(s->settings, "html_ext"), "/index.html");
- assert_string_equal(bc_trie_lookup(s->settings, "content_dir"), "guda");
- assert_string_equal(bc_trie_lookup(s->settings, "template_dir"), "templates");
- assert_string_equal(bc_trie_lookup(s->settings, "main_template"), "foo.tmpl");
- assert_string_equal(bc_trie_lookup(s->settings, "date_format"),
- "%b %d, %Y, %I:%M %p GMT");
- assert_string_equal(bc_trie_lookup(s->settings, "posts_per_page"), "10");
- assert_string_equal(bc_trie_lookup(s->settings, "atom_prefix"), "atom");
- assert_string_equal(bc_trie_lookup(s->settings, "atom_ext"), ".xml");
- assert_string_equal(bc_trie_lookup(s->settings, "atom_posts_per_page"), "10");
- assert_string_equal(bc_trie_lookup(s->settings, "pagination_prefix"), "page");
- assert_string_equal(bc_trie_lookup(s->settings, "post_prefix"), "post");
- assert_string_equal(bc_trie_lookup(s->settings, "tag_prefix"), "tag");
- assert_string_equal(bc_trie_lookup(s->settings, "html_order"), "DESC");
- assert_string_equal(bc_trie_lookup(s->settings, "atom_order"), "DESC");
- assert_string_equal(bc_trie_lookup(s->settings, "index_prefix"), "");
- assert_non_null(s->posts);
- assert_string_equal(s->posts[0], "aaaa");
- assert_string_equal(s->posts[1], "bbbb");
- assert_string_equal(s->posts[2], "cccc");
- assert_null(s->posts[3]);
- assert_non_null(s->pages);
- assert_string_equal(s->pages[0], "dddd");
- assert_string_equal(s->pages[1], "eeee");
- assert_string_equal(s->pages[2], "ffff");
- assert_null(s->pages[3]);
- assert_non_null(s->copy);
- assert_string_equal(s->copy[0], "jjjj");
- assert_string_equal(s->copy[1], "kkkk");
- assert_string_equal(s->copy[2], "llll");
- assert_null(s->copy[3]);
- assert_non_null(s->tags);
- assert_string_equal(s->tags[0], "gggg");
- assert_string_equal(s->tags[1], "hhhh");
- assert_string_equal(s->tags[2], "iiii");
- assert_null(s->tags[3]);
- bm_settings_free(s);
-}
-
-
-int
-main(void)
-{
- const struct CMUnitTest tests[] = {
- cmocka_unit_test(test_settings_empty),
- cmocka_unit_test(test_settings),
- cmocka_unit_test(test_settings_env),
- cmocka_unit_test(test_settings2),
- cmocka_unit_test(test_settings_env2),
- cmocka_unit_test(test_settings_copy_files),
- };
- return cmocka_run_group_tests(tests, NULL, NULL);
-}
diff --git a/tests/blogc-make/check_utils.c b/tests/blogc-make/check_utils.c
deleted file mode 100644
index 09d1580..0000000
--- a/tests/blogc-make/check_utils.c
+++ /dev/null
@@ -1,468 +0,0 @@
-/*
- * blogc: A blog compiler.
- * Copyright (C) 2014-2019 Rafael G. Martins <rafael@rafaelmartins.eng.br>
- *
- * This program can be distributed under the terms of the BSD License.
- * See the file LICENSE.
- */
-
-#include <stdarg.h>
-#include <stddef.h>
-#include <setjmp.h>
-#include <cmocka.h>
-
-#include <stdlib.h>
-
-#include "../../src/blogc-make/utils.h"
-#include "../../src/common/utils.h"
-
-
-static void
-test_generate_filename(void **state)
-{
- char *rv;
-
- assert_null(bm_generate_filename(NULL, NULL, NULL, NULL));
- assert_null(bm_generate_filename(NULL, "", "", ""));
- assert_null(bm_generate_filename("_build", NULL, NULL, NULL));
- assert_null(bm_generate_filename("_build", "", "", ""));
-
- rv = bm_generate_filename(NULL, NULL, NULL, ".html");
- assert_string_equal(rv, "/index.html");
- free(rv);
-
- rv = bm_generate_filename(NULL, NULL, NULL, "/index.html");
- assert_string_equal(rv, "/index.html");
- free(rv);
-
- rv = bm_generate_filename(NULL, "lol", NULL, ".html");
- assert_string_equal(rv, "/lol.html");
- free(rv);
-
- rv = bm_generate_filename(NULL, "lol", NULL, "/index.html");
- assert_string_equal(rv, "/lol/index.html");
- free(rv);
-
- rv = bm_generate_filename(NULL, NULL, "foo", ".html");
- assert_string_equal(rv, "/foo.html");
- free(rv);
-
- rv = bm_generate_filename(NULL, NULL, "foo", "/index.html");
- assert_string_equal(rv, "/foo/index.html");
- free(rv);
-
- rv = bm_generate_filename(NULL, NULL, "index", ".html");
- assert_string_equal(rv, "/index.html");
- free(rv);
-
- rv = bm_generate_filename(NULL, "lol", "index", ".html");
- assert_string_equal(rv, "/lol/index.html");
- free(rv);
-
- rv = bm_generate_filename(NULL, NULL, "index", "/index.html");
- assert_string_equal(rv, "/index.html");
- free(rv);
-
- rv = bm_generate_filename(NULL, "lol", "index", "/index.html");
- assert_string_equal(rv, "/lol/index/index.html");
- free(rv);
-
- rv = bm_generate_filename(NULL, "bar", "foo", ".html");
- assert_string_equal(rv, "/bar/foo.html");
- free(rv);
-
- rv = bm_generate_filename(NULL, "bar", "foo", "/index.html");
- assert_string_equal(rv, "/bar/foo/index.html");
- free(rv);
-
- rv = bm_generate_filename("_build", NULL, NULL, ".html");
- assert_string_equal(rv, "_build/index.html");
- free(rv);
-
- rv = bm_generate_filename("_build", NULL, NULL, "/index.html");
- assert_string_equal(rv, "_build/index.html");
- free(rv);
-
- rv = bm_generate_filename("_build", "lol", NULL, ".html");
- assert_string_equal(rv, "_build/lol.html");
- free(rv);
-
- rv = bm_generate_filename("_build", "lol", NULL, "/index.html");
- assert_string_equal(rv, "_build/lol/index.html");
- free(rv);
-
- rv = bm_generate_filename("_build", NULL, "foo", ".html");
- assert_string_equal(rv, "_build/foo.html");
- free(rv);
-
- rv = bm_generate_filename("_build", NULL, "foo", "/index.html");
- assert_string_equal(rv, "_build/foo/index.html");
- free(rv);
-
- rv = bm_generate_filename("_build", NULL, "index", ".html");
- assert_string_equal(rv, "_build/index.html");
- free(rv);
-
- rv = bm_generate_filename("_build", "lol", "index", ".html");
- assert_string_equal(rv, "_build/lol/index.html");
- free(rv);
-
- rv = bm_generate_filename("_build", NULL, "index", "/index.html");
- assert_string_equal(rv, "_build/index.html");
- free(rv);
-
- rv = bm_generate_filename("_build", "lol", "index", "/index.html");
- assert_string_equal(rv, "_build/lol/index/index.html");
- free(rv);
-
- rv = bm_generate_filename("_build", "bar", "foo", ".html");
- assert_string_equal(rv, "_build/bar/foo.html");
- free(rv);
-
- rv = bm_generate_filename("_build", "bar", "foo", "/index.html");
- assert_string_equal(rv, "_build/bar/foo/index.html");
- free(rv);
-}
-
-
-static void
-test_generate_filename2(void **state)
-{
- char *rv;
-
- assert_null(bm_generate_filename2(NULL, NULL, NULL, NULL, NULL, NULL));
- assert_null(bm_generate_filename2(NULL, "", "", "", "", ""));
- assert_null(bm_generate_filename2("_build", NULL, NULL, NULL, NULL, NULL));
- assert_null(bm_generate_filename2("_build", "", "", "", "", ""));
-
- rv = bm_generate_filename2(NULL, NULL, NULL, NULL, NULL, ".html");
- assert_string_equal(rv, "/index.html");
- free(rv);
-
- rv = bm_generate_filename2(NULL, "p", NULL, NULL, NULL, ".html");
- assert_string_equal(rv, "/p.html");
- free(rv);
-
- rv = bm_generate_filename2(NULL, NULL, "q", NULL, NULL, ".html");
- assert_string_equal(rv, "/q.html");
- free(rv);
-
- rv = bm_generate_filename2(NULL, "p", "q", NULL, NULL, ".html");
- assert_string_equal(rv, "/p/q.html");
- free(rv);
-
- rv = bm_generate_filename2(NULL, NULL, NULL, NULL, NULL, "/index.html");
- assert_string_equal(rv, "/index.html");
- free(rv);
-
- rv = bm_generate_filename2(NULL, "p", NULL, NULL, NULL, "/index.html");
- assert_string_equal(rv, "/p/index.html");
- free(rv);
-
- rv = bm_generate_filename2(NULL, NULL, "q", NULL, NULL, "/index.html");
- assert_string_equal(rv, "/q/index.html");
- free(rv);
-
- rv = bm_generate_filename2(NULL, "p", "q", NULL, NULL, "/index.html");
- assert_string_equal(rv, "/p/q/index.html");
- free(rv);
-
- rv = bm_generate_filename2(NULL, NULL, NULL, "lol", NULL, ".html");
- assert_string_equal(rv, "/lol.html");
- free(rv);
-
- rv = bm_generate_filename2(NULL, "p", NULL, "lol", NULL, ".html");
- assert_string_equal(rv, "/p/lol.html");
- free(rv);
-
- rv = bm_generate_filename2(NULL, NULL, "q", "lol", NULL, ".html");
- assert_string_equal(rv, "/q/lol.html");
- free(rv);
-
- rv = bm_generate_filename2(NULL, "p", "q", "lol", NULL, ".html");
- assert_string_equal(rv, "/p/q/lol.html");
- free(rv);
-
- rv = bm_generate_filename2(NULL, NULL, NULL, "lol", NULL, "/index.html");
- assert_string_equal(rv, "/lol/index.html");
- free(rv);
-
- rv = bm_generate_filename2(NULL, "p", NULL, "lol", NULL, "/index.html");
- assert_string_equal(rv, "/p/lol/index.html");
- free(rv);
-
- rv = bm_generate_filename2(NULL, NULL, "q", "lol", NULL, "/index.html");
- assert_string_equal(rv, "/q/lol/index.html");
- free(rv);
-
- rv = bm_generate_filename2(NULL, "p", "q", "lol", NULL, "/index.html");
- assert_string_equal(rv, "/p/q/lol/index.html");
- free(rv);
-
- rv = bm_generate_filename2(NULL, NULL, NULL, NULL, "foo", ".html");
- assert_string_equal(rv, "/foo.html");
- free(rv);
-
- rv = bm_generate_filename2(NULL, "p", NULL, NULL, "foo", ".html");
- assert_string_equal(rv, "/p/foo.html");
- free(rv);
-
- rv = bm_generate_filename2(NULL, NULL, "q", NULL, "foo", ".html");
- assert_string_equal(rv, "/q/foo.html");
- free(rv);
-
- rv = bm_generate_filename2(NULL, "p", "q", NULL, "foo", ".html");
- assert_string_equal(rv, "/p/q/foo.html");
- free(rv);
-
- rv = bm_generate_filename2(NULL, NULL, NULL, NULL, "foo", "/index.html");
- assert_string_equal(rv, "/foo/index.html");
- free(rv);
-
- rv = bm_generate_filename2(NULL, "p", NULL, NULL, "foo", "/index.html");
- assert_string_equal(rv, "/p/foo/index.html");
- free(rv);
-
- rv = bm_generate_filename2(NULL, NULL, "q", NULL, "foo", "/index.html");
- assert_string_equal(rv, "/q/foo/index.html");
- free(rv);
-
- rv = bm_generate_filename2(NULL, "p", "q", NULL, "foo", "/index.html");
- assert_string_equal(rv, "/p/q/foo/index.html");
- free(rv);
-
- rv = bm_generate_filename2(NULL, NULL, NULL, NULL, "index", ".html");
- assert_string_equal(rv, "/index.html");
- free(rv);
-
- rv = bm_generate_filename2(NULL, "p", NULL, NULL, "index", ".html");
- assert_string_equal(rv, "/p/index.html");
- free(rv);
-
- rv = bm_generate_filename2(NULL, NULL, "q", NULL, "index", ".html");
- assert_string_equal(rv, "/q/index.html");
- free(rv);
-
- rv = bm_generate_filename2(NULL, "p", "q", NULL, "index", ".html");
- assert_string_equal(rv, "/p/q/index.html");
- free(rv);
-
- rv = bm_generate_filename2(NULL, NULL, NULL, NULL, "index", "/index.html");
- assert_string_equal(rv, "/index.html");
- free(rv);
-
- rv = bm_generate_filename2(NULL, "p", NULL, NULL, "index", "/index.html");
- assert_string_equal(rv, "/p/index/index.html");
- free(rv);
-
- rv = bm_generate_filename2(NULL, NULL, "q", NULL, "index", "/index.html");
- assert_string_equal(rv, "/q/index/index.html");
- free(rv);
-
- rv = bm_generate_filename2(NULL, "p", "q", NULL, "index", "/index.html");
- assert_string_equal(rv, "/p/q/index/index.html");
- free(rv);
-
- rv = bm_generate_filename2(NULL, NULL, NULL, "bar", "foo", ".html");
- assert_string_equal(rv, "/bar/foo.html");
- free(rv);
-
- rv = bm_generate_filename2(NULL, "p", NULL, "bar", "foo", ".html");
- assert_string_equal(rv, "/p/bar/foo.html");
- free(rv);
-
- rv = bm_generate_filename2(NULL, NULL, "q", "bar", "foo", ".html");
- assert_string_equal(rv, "/q/bar/foo.html");
- free(rv);
-
- rv = bm_generate_filename2(NULL, "p", "q", "bar", "foo", ".html");
- assert_string_equal(rv, "/p/q/bar/foo.html");
- free(rv);
-
- rv = bm_generate_filename2(NULL, NULL, NULL, "bar", "foo", "/index.html");
- assert_string_equal(rv, "/bar/foo/index.html");
- free(rv);
-
- rv = bm_generate_filename2(NULL, "p", NULL, "bar", "foo", "/index.html");
- assert_string_equal(rv, "/p/bar/foo/index.html");
- free(rv);
-
- rv = bm_generate_filename2(NULL, NULL, "q", "bar", "foo", "/index.html");
- assert_string_equal(rv, "/q/bar/foo/index.html");
- free(rv);
-
- rv = bm_generate_filename2(NULL, "p", "q", "bar", "foo", "/index.html");
- assert_string_equal(rv, "/p/q/bar/foo/index.html");
- free(rv);
-
- rv = bm_generate_filename2("_build", NULL, NULL, NULL, NULL, ".html");
- assert_string_equal(rv, "_build/index.html");
- free(rv);
-
- rv = bm_generate_filename2("_build", "p", NULL, NULL, NULL, ".html");
- assert_string_equal(rv, "_build/p.html");
- free(rv);
-
- rv = bm_generate_filename2("_build", NULL, "q", NULL, NULL, ".html");
- assert_string_equal(rv, "_build/q.html");
- free(rv);
-
- rv = bm_generate_filename2("_build", "p", "q", NULL, NULL, ".html");
- assert_string_equal(rv, "_build/p/q.html");
- free(rv);
-
- rv = bm_generate_filename2("_build", NULL, NULL, NULL, NULL, "/index.html");
- assert_string_equal(rv, "_build/index.html");
- free(rv);
-
- rv = bm_generate_filename2("_build", "p", NULL, NULL, NULL, "/index.html");
- assert_string_equal(rv, "_build/p/index.html");
- free(rv);
-
- rv = bm_generate_filename2("_build", NULL, "q", NULL, NULL, "/index.html");
- assert_string_equal(rv, "_build/q/index.html");
- free(rv);
-
- rv = bm_generate_filename2("_build", "p", "q", NULL, NULL, "/index.html");
- assert_string_equal(rv, "_build/p/q/index.html");
- free(rv);
-
- rv = bm_generate_filename2("_build", NULL, NULL, "lol", NULL, ".html");
- assert_string_equal(rv, "_build/lol.html");
- free(rv);
-
- rv = bm_generate_filename2("_build", "p", NULL, "lol", NULL, ".html");
- assert_string_equal(rv, "_build/p/lol.html");
- free(rv);
-
- rv = bm_generate_filename2("_build", NULL, "q", "lol", NULL, ".html");
- assert_string_equal(rv, "_build/q/lol.html");
- free(rv);
-
- rv = bm_generate_filename2("_build", "p", "q", "lol", NULL, ".html");
- assert_string_equal(rv, "_build/p/q/lol.html");
- free(rv);
-
- rv = bm_generate_filename2("_build", NULL, NULL, "lol", NULL, "/index.html");
- assert_string_equal(rv, "_build/lol/index.html");
- free(rv);
-
- rv = bm_generate_filename2("_build", "p", NULL, "lol", NULL, "/index.html");
- assert_string_equal(rv, "_build/p/lol/index.html");
- free(rv);
-
- rv = bm_generate_filename2("_build", NULL, "q", "lol", NULL, "/index.html");
- assert_string_equal(rv, "_build/q/lol/index.html");
- free(rv);
-
- rv = bm_generate_filename2("_build", "p", "q", "lol", NULL, "/index.html");
- assert_string_equal(rv, "_build/p/q/lol/index.html");
- free(rv);
-
- rv = bm_generate_filename2("_build", NULL, NULL, NULL, "foo", ".html");
- assert_string_equal(rv, "_build/foo.html");
- free(rv);
-
- rv = bm_generate_filename2("_build", "p", NULL, NULL, "foo", ".html");
- assert_string_equal(rv, "_build/p/foo.html");
- free(rv);
-
- rv = bm_generate_filename2("_build", NULL, "q", NULL, "foo", ".html");
- assert_string_equal(rv, "_build/q/foo.html");
- free(rv);
-
- rv = bm_generate_filename2("_build", "p", "q", NULL, "foo", ".html");
- assert_string_equal(rv, "_build/p/q/foo.html");
- free(rv);
-
- rv = bm_generate_filename2("_build", NULL, NULL, NULL, "foo", "/index.html");
- assert_string_equal(rv, "_build/foo/index.html");
- free(rv);
-
- rv = bm_generate_filename2("_build", "p", NULL, NULL, "foo", "/index.html");
- assert_string_equal(rv, "_build/p/foo/index.html");
- free(rv);
-
- rv = bm_generate_filename2("_build", NULL, "q", NULL, "foo", "/index.html");
- assert_string_equal(rv, "_build/q/foo/index.html");
- free(rv);
-
- rv = bm_generate_filename2("_build", "p", "q", NULL, "foo", "/index.html");
- assert_string_equal(rv, "_build/p/q/foo/index.html");
- free(rv);
-
- rv = bm_generate_filename2("_build", NULL, NULL, NULL, "index", ".html");
- assert_string_equal(rv, "_build/index.html");
- free(rv);
-
- rv = bm_generate_filename2("_build", "p", NULL, NULL, "index", ".html");
- assert_string_equal(rv, "_build/p/index.html");
- free(rv);
-
- rv = bm_generate_filename2("_build", NULL, "q", NULL, "index", ".html");
- assert_string_equal(rv, "_build/q/index.html");
- free(rv);
-
- rv = bm_generate_filename2("_build", "p", "q", NULL, "index", ".html");
- assert_string_equal(rv, "_build/p/q/index.html");
- free(rv);
-
- rv = bm_generate_filename2("_build", NULL, NULL, NULL, "index", "/index.html");
- assert_string_equal(rv, "_build/index.html");
- free(rv);
-
- rv = bm_generate_filename2("_build", "p", NULL, NULL, "index", "/index.html");
- assert_string_equal(rv, "_build/p/index/index.html");
- free(rv);
-
- rv = bm_generate_filename2("_build", NULL, "q", NULL, "index", "/index.html");
- assert_string_equal(rv, "_build/q/index/index.html");
- free(rv);
-
- rv = bm_generate_filename2("_build", "p", "q", NULL, "index", "/index.html");
- assert_string_equal(rv, "_build/p/q/index/index.html");
- free(rv);
-
- rv = bm_generate_filename2("_build", NULL, NULL, "bar", "foo", ".html");
- assert_string_equal(rv, "_build/bar/foo.html");
- free(rv);
-
- rv = bm_generate_filename2("_build", "p", NULL, "bar", "foo", ".html");
- assert_string_equal(rv, "_build/p/bar/foo.html");
- free(rv);
-
- rv = bm_generate_filename2("_build", NULL, "q", "bar", "foo", ".html");
- assert_string_equal(rv, "_build/q/bar/foo.html");
- free(rv);
-
- rv = bm_generate_filename2("_build", "p", "q", "bar", "foo", ".html");
- assert_string_equal(rv, "_build/p/q/bar/foo.html");
- free(rv);
-
- rv = bm_generate_filename2("_build", NULL, NULL, "bar", "foo", "/index.html");
- assert_string_equal(rv, "_build/bar/foo/index.html");
- free(rv);
-
- rv = bm_generate_filename2("_build", "p", NULL, "bar", "foo", "/index.html");
- assert_string_equal(rv, "_build/p/bar/foo/index.html");
- free(rv);
-
- rv = bm_generate_filename2("_build", NULL, "q", "bar", "foo", "/index.html");
- assert_string_equal(rv, "_build/q/bar/foo/index.html");
- free(rv);
-
- rv = bm_generate_filename2("_build", "p", "q", "bar", "foo", "/index.html");
- assert_string_equal(rv, "_build/p/q/bar/foo/index.html");
- free(rv);
-}
-
-
-int
-main(void)
-{
- const struct CMUnitTest tests[] = {
- cmocka_unit_test(test_generate_filename),
- cmocka_unit_test(test_generate_filename2),
- };
- return cmocka_run_group_tests(tests, NULL, NULL);
-}
diff --git a/tests/blogc-runserver/check_httpd_utils.c b/tests/blogc-runserver/check_httpd_utils.c
deleted file mode 100644
index 9b2c39c..0000000
--- a/tests/blogc-runserver/check_httpd_utils.c
+++ /dev/null
@@ -1,132 +0,0 @@
-/*
- * blogc: A blog compiler.
- * Copyright (C) 2014-2019 Rafael G. Martins <rafael@rafaelmartins.eng.br>
- *
- * This program can be distributed under the terms of the BSD License.
- * See the file LICENSE.
- */
-
-#include <stdarg.h>
-#include <stddef.h>
-#include <setjmp.h>
-#include <cmocka.h>
-#include <stdlib.h>
-#include <string.h>
-#include "../../src/common/utils.h"
-#include "../../src/blogc-runserver/httpd-utils.h"
-
-
-ssize_t
-__wrap_read(int fd, void *buf, size_t count)
-{
- assert_int_equal(fd, mock_type(int));
- const char *mock_buf = mock_type(const char*);
- strcpy(buf, mock_buf);
- assert_int_equal(count, READLINE_BUFFER_SIZE);
- return strlen(mock_buf) > 0 ? strlen(mock_buf) : -1;
-}
-
-
-static void
-test_readline(void **state)
-{
- char *t;
- will_return(__wrap_read, 1234);
- will_return(__wrap_read, "bola");
- t = br_readline(1234);
- assert_string_equal(t, "bola");
- free(t);
- will_return(__wrap_read, 1234);
- will_return(__wrap_read, "bola1\nguda\nxd");
- t = br_readline(1234);
- assert_string_equal(t, "bola1");
- free(t);
- will_return(__wrap_read, 1234);
- will_return(__wrap_read, "bola2\rguda\rxd");
- t = br_readline(1234);
- assert_string_equal(t, "bola2");
- free(t);
- will_return(__wrap_read, 1234);
- will_return(__wrap_read, "bola3\r\nguda\r\nxd");
- t = br_readline(1234);
- assert_string_equal(t, "bola3");
- free(t);
-}
-
-
-static void
-test_hextoi(void **state)
-{
- assert_int_equal(br_hextoi('0'), 0);
- assert_int_equal(br_hextoi('1'), 1);
- assert_int_equal(br_hextoi('2'), 2);
- assert_int_equal(br_hextoi('3'), 3);
- assert_int_equal(br_hextoi('4'), 4);
- assert_int_equal(br_hextoi('5'), 5);
- assert_int_equal(br_hextoi('6'), 6);
- assert_int_equal(br_hextoi('7'), 7);
- assert_int_equal(br_hextoi('8'), 8);
- assert_int_equal(br_hextoi('9'), 9);
- assert_int_equal(br_hextoi('a'), 10);
- assert_int_equal(br_hextoi('b'), 11);
- assert_int_equal(br_hextoi('c'), 12);
- assert_int_equal(br_hextoi('d'), 13);
- assert_int_equal(br_hextoi('e'), 14);
- assert_int_equal(br_hextoi('f'), 15);
- assert_int_equal(br_hextoi('A'), 10);
- assert_int_equal(br_hextoi('B'), 11);
- assert_int_equal(br_hextoi('C'), 12);
- assert_int_equal(br_hextoi('D'), 13);
- assert_int_equal(br_hextoi('E'), 14);
- assert_int_equal(br_hextoi('F'), 15);
- assert_int_equal(br_hextoi('g'), -1);
- assert_int_equal(br_hextoi('G'), -1);
- assert_int_equal(br_hextoi('-'), -1);
-}
-
-
-static void
-test_urldecode(void **state)
-{
- for (size_t i = 0; i < 128; i++) {
- char *t = bc_strdup_printf("%%%02x", i);
- char *r = br_urldecode(t);
- assert_int_equal(r[0], i);
- assert_int_equal(r[1], 0);
- free(r);
- free(t);
- }
- char *r = br_urldecode("%Ab");
- assert_string_equal(r, "\xab");
- free(r);
- r = br_urldecode("%xb");
- assert_string_equal(r, "%xb");
- free(r);
- r = br_urldecode("%C3%BC");
- assert_string_equal(r, "\xc3\xbc");
- free(r);
-}
-
-
-static void
-test_get_extension(void **state)
-{
- assert_null(br_get_extension("bola"));
- assert_string_equal(br_get_extension("bola.txt"), "txt");
- assert_string_equal(br_get_extension("bola.txt.jpg"), "jpg");
- assert_null(br_get_extension("bola.txt/foo"));
- assert_string_equal(br_get_extension("bola.txt/foo.jpg"), "jpg");
-}
-
-
-int
-main(void)
-{
- const struct CMUnitTest tests[] = {
- cmocka_unit_test(test_readline),
- cmocka_unit_test(test_hextoi),
- cmocka_unit_test(test_urldecode),
- cmocka_unit_test(test_get_extension),
- };
- return cmocka_run_group_tests(tests, NULL, NULL);
-}
diff --git a/tests/blogc-runserver/check_mime.c b/tests/blogc-runserver/check_mime.c
deleted file mode 100644
index 59d7238..0000000
--- a/tests/blogc-runserver/check_mime.c
+++ /dev/null
@@ -1,92 +0,0 @@
-/*
- * blogc: A blog compiler.
- * Copyright (C) 2014-2019 Rafael G. Martins <rafael@rafaelmartins.eng.br>
- *
- * This program can be distributed under the terms of the BSD License.
- * See the file LICENSE.
- */
-
-#include <stdarg.h>
-#include <stddef.h>
-#include <setjmp.h>
-#include <cmocka.h>
-#include <stdlib.h>
-#include <unistd.h>
-#include "../../src/blogc-runserver/mime.h"
-
-
-int
-__wrap_access(const char *pathname, int mode)
-{
- assert_string_equal(pathname, mock_type(const char*));
- assert_int_equal(mode, F_OK);
- return mock_type(int);
-}
-
-
-static void
-test_guess_content_type(void **state)
-{
- assert_string_equal(br_mime_guess_content_type("foo.html"), "text/html");
- assert_string_equal(br_mime_guess_content_type("foo.jpg"), "image/jpeg");
- assert_string_equal(br_mime_guess_content_type("foo.mp4"), "video/mp4");
- assert_string_equal(br_mime_guess_content_type("foo.bola"), "application/octet-stream");
-}
-
-
-static void
-test_guess_index(void **state)
-{
- char *t;
- will_return(__wrap_access, "dir/index.html");
- will_return(__wrap_access, 0);
- t = br_mime_guess_index("dir");
- assert_string_equal(t, "dir/index.html");
- free(t);
- will_return(__wrap_access, "dir/index.html");
- will_return(__wrap_access, 1);
- will_return(__wrap_access, "dir/index.htm");
- will_return(__wrap_access, 0);
- t = br_mime_guess_index("dir");
- assert_string_equal(t, "dir/index.htm");
- free(t);
- will_return(__wrap_access, "dir/index.html");
- will_return(__wrap_access, 1);
- will_return(__wrap_access, "dir/index.htm");
- will_return(__wrap_access, 1);
- will_return(__wrap_access, "dir/index.shtml");
- will_return(__wrap_access, 1);
- will_return(__wrap_access, "dir/index.xml");
- will_return(__wrap_access, 1);
- will_return(__wrap_access, "dir/index.txt");
- will_return(__wrap_access, 1);
- will_return(__wrap_access, "dir/index.xhtml");
- will_return(__wrap_access, 0);
- t = br_mime_guess_index("dir");
- assert_string_equal(t, "dir/index.xhtml");
- free(t);
- will_return(__wrap_access, "dir/index.html");
- will_return(__wrap_access, 1);
- will_return(__wrap_access, "dir/index.htm");
- will_return(__wrap_access, 1);
- will_return(__wrap_access, "dir/index.shtml");
- will_return(__wrap_access, 1);
- will_return(__wrap_access, "dir/index.xml");
- will_return(__wrap_access, 1);
- will_return(__wrap_access, "dir/index.txt");
- will_return(__wrap_access, 1);
- will_return(__wrap_access, "dir/index.xhtml");
- will_return(__wrap_access, 1);
- assert_null(br_mime_guess_index("dir"));
-}
-
-
-int
-main(void)
-{
- const struct CMUnitTest tests[] = {
- cmocka_unit_test(test_guess_content_type),
- cmocka_unit_test(test_guess_index),
- };
- return cmocka_run_group_tests(tests, NULL, NULL);
-}
diff --git a/tests/blogc/check_blogc.sh.in b/tests/blogc/check_blogc.sh.in
deleted file mode 100755
index 208524d..0000000
--- a/tests/blogc/check_blogc.sh.in
+++ /dev/null
@@ -1,638 +0,0 @@
-#!@BASH@
-
-set -xe -o pipefail
-
-export LC_ALL=C
-
-TEMP="$(mktemp -d)"
-[[ -n "${TEMP}" ]]
-
-trap_func() {
- [[ -n "${TEMP}" ]] && rm -rf "${TEMP}"
-}
-
-trap trap_func EXIT
-
-${TESTS_ENVIRONMENT} @abs_top_builddir@/blogc -v | grep blogc
-
-cat > "${TEMP}/post1.txt" <<EOF
-TITLE: foo
-DATE: 2010-01-01 11:11:11
--------------------------
-foo?
-EOF
-
-cat > "${TEMP}/post2.txt" <<EOF
-TITLE: bar
-DATE: 2010-01-01 22:22:22
--------------------------
-bar?
-EOF
-
-cat > "${TEMP}/post3.txt" <<EOF
-TITLE: baz
-DATE: 2010-02-02 22:22:22
--------------------------
-bar?
-EOF
-
-cat > "${TEMP}/atom.tmpl" <<EOF
-<?xml version="1.0" encoding="utf-8"?>
-<feed xmlns="http://www.w3.org/2005/Atom">
- <title type="text">{{ SITE_TITLE }}</title>
- <id>{{ BASE_URL }}/atom.xml</id>
- <updated>{{ DATE_FIRST_FORMATTED }}</updated>
- <link href="{{ BASE_DOMAIN }}{{ BASE_URL }}/" />
- <link href="{{ BASE_DOMAIN }}{{ BASE_URL }}/atom.xml" rel="self" />
- <author>
- <name>{{ AUTHOR_NAME }}</name>
- <email>{{ AUTHOR_EMAIL }}</email>
- </author>
- <subtitle type="text">{{ SITE_TAGLINE }}</subtitle>
- {% block listing %}
- <entry>
- <title type="text">{{ TITLE }}</title>
- <id>{{ BASE_URL }}/post/{{ FILENAME }}/</id>
- <updated>{{ DATE_FORMATTED }}</updated>
- <published>{{ DATE_FORMATTED }}</published>
- <link href="{{ BASE_DOMAIN }}{{ BASE_URL }}/post/{{ FILENAME }}/" />
- <author>
- <name>{{ AUTHOR_NAME }}</name>
- <email>{{ AUTHOR_EMAIL }}</email>
- </author>
- <content type="html"><![CDATA[{{ CONTENT_4 }}]]></content>
- </entry>
- {% endblock %}
-</feed>
-EOF
-
-cat > "${TEMP}/expected-output.xml" <<EOF
-<?xml version="1.0" encoding="utf-8"?>
-<feed xmlns="http://www.w3.org/2005/Atom">
- <title type="text">Chunda's website</title>
- <id>/atom.xml</id>
- <updated>2010-01-01T11:11:11Z</updated>
- <link href="http://bola.com//" />
- <link href="http://bola.com//atom.xml" rel="self" />
- <author>
- <name>Chunda</name>
- <email>chunda@bola.com</email>
- </author>
- <subtitle type="text"></subtitle>
-
- <entry>
- <title type="text">foo</title>
- <id>/post/post1/</id>
- <updated>2010-01-01T11:11:11Z</updated>
- <published>2010-01-01T11:11:11Z</published>
- <link href="http://bola.com//post/post1/" />
- <author>
- <name>Chunda</name>
- <email>chunda@bola.com</email>
- </author>
- <content type="html"><![CDATA[<p>f]]></content>
- </entry>
-
- <entry>
- <title type="text">bar</title>
- <id>/post/post2/</id>
- <updated>2010-01-01T22:22:22Z</updated>
- <published>2010-01-01T22:22:22Z</published>
- <link href="http://bola.com//post/post2/" />
- <author>
- <name>Chunda</name>
- <email>chunda@bola.com</email>
- </author>
- <content type="html"><![CDATA[<p>b]]></content>
- </entry>
-
-</feed>
-EOF
-
-${TESTS_ENVIRONMENT} @abs_top_builddir@/blogc \
- -D BASE_DOMAIN=http://bola.com/ \
- -D BASE_URL= \
- -D AUTHOR_NAME=Chunda \
- -D AUTHOR_EMAIL=chunda@bola.com \
- -D SITE_TITLE="Chunda's website" \
- -D DATE_FORMAT="%Y-%m-%dT%H:%M:%SZ" \
- -t "${TEMP}/atom.tmpl" \
- -o "${TEMP}/output.xml" \
- -l \
- "${TEMP}/post1.txt" "${TEMP}/post2.txt"
-
-diff -uN "${TEMP}/output.xml" "${TEMP}/expected-output.xml"
-
-echo -e "${TEMP}/post1.txt\n${TEMP}/post2.txt" | ${TESTS_ENVIRONMENT} @abs_top_builddir@/blogc \
- -D BASE_DOMAIN=http://bola.com/ \
- -D BASE_URL= \
- -D AUTHOR_NAME=Chunda \
- -D AUTHOR_EMAIL=chunda@bola.com \
- -D SITE_TITLE="Chunda's website" \
- -D DATE_FORMAT="%Y-%m-%dT%H:%M:%SZ" \
- -t "${TEMP}/atom.tmpl" \
- -o "${TEMP}/output2.xml" \
- -l \
- -i
-
-diff -uN "${TEMP}/output2.xml" "${TEMP}/expected-output.xml"
-
-${TESTS_ENVIRONMENT} @abs_top_builddir@/blogc \
- -D BASE_DOMAIN=http://bola.com/ \
- -D BASE_URL= \
- -D AUTHOR_NAME=Chunda \
- -D AUTHOR_EMAIL=chunda@bola.com \
- -D SITE_TITLE="Chunda's website" \
- -D DATE_FORMAT="%Y-%m-%dT%H:%M:%SZ" \
- -t "${TEMP}/atom.tmpl" \
- -l \
- "${TEMP}/post1.txt" "${TEMP}/post2.txt" > "${TEMP}/output3.xml"
-
-diff -uN "${TEMP}/output3.xml" "${TEMP}/expected-output.xml"
-
-echo -e "${TEMP}/post1.txt\n${TEMP}/post2.txt" | ${TESTS_ENVIRONMENT} @abs_top_builddir@/blogc \
- -D BASE_DOMAIN=http://bola.com/ \
- -D BASE_URL= \
- -D AUTHOR_NAME=Chunda \
- -D AUTHOR_EMAIL=chunda@bola.com \
- -D SITE_TITLE="Chunda's website" \
- -D DATE_FORMAT="%Y-%m-%dT%H:%M:%SZ" \
- -t "${TEMP}/atom.tmpl" \
- -l \
- -i > "${TEMP}/output4.xml"
-
-diff -uN "${TEMP}/output4.xml" "${TEMP}/expected-output.xml"
-
-cat > "${TEMP}/main.tmpl" <<EOF
-<!DOCTYPE html>
-<html lang="en">
- <head>
- <title>{% ifdef FOO1 %}{{ FOO1 }} {% endif %}{% block entry %}{{ TITLE }}{% endblock %}{% block listing_once %}{{ SITE_TITLE }}{% endblock %}</title>
- </head>
- <body>
- <a href="{{ BASE_URL }}/"><div class="name">{{ SITE_TITLE }}</div></a>{% block listing_entry %}{{ CONTENT }}{% endblock %}{% block listing_entry %}{{ CONTENT }}{% endblock %}
- {% block listing_once %}
- <section class="main">
- <div class="container">
- <div class="content">
- <div class="page-heading">Blog</div>
- <ul>
- {% endblock %}
- {% block listing %}
- <li class="post-item">
- <div class="meta">{{ DATE_FORMATTED }}</div>
- <a href="{{ BASE_URL }}/post/{{ FILENAME }}/"><div>{{ TITLE }}</div></a>
- </li>
- {% endblock %}{% block listing_empty %}vazio{% endblock %}
- {% block listing_once %}
- </ul>
- </div>
- </div>
- </section>
- {% endblock %}
- {% block entry %}
- <section class="main{% ifdef IS_POST %} post non-narrow zero-top-spacing{% endif %}">
- <div class="container">
- <div class="content">
- {% ifdef IS_POST %}<div class="front-matter">{% endif %}
- <div class="title-container">
- <div class="page-heading">{{ TITLE }}</div>
- </div>
- {% ifdef IS_POST %}
- <div class="meta">
- <div class="date">{{ DATE_FORMATTED }}</div>
- </div>
- </div>
- {% endif %}
- <div class="markdown">
- {{ CONTENT }}
- {% ifdef IS_POST %}
- <br>
- <p><a href="{{ BASE_URL }}/">Back to posts</a></p>
- {% endif %}
- </div>
- </div>
- </div>
- </section>
- {% endblock %}
- </body>
-</html>
-EOF
-
-cat > "${TEMP}/expected-output.html" <<EOF
-<!DOCTYPE html>
-<html lang="en">
- <head>
- <title>asd Chunda's website</title>
- </head>
- <body>
- <a href="/"><div class="name">Chunda's website</div></a>
-
- <section class="main">
- <div class="container">
- <div class="content">
- <div class="page-heading">Blog</div>
- <ul>
-
-
- <li class="post-item">
- <div class="meta">Jan 01, 2010, 11:11 AM GMT</div>
- <a href="/post/post1/"><div>foo</div></a>
- </li>
-
- <li class="post-item">
- <div class="meta">Jan 01, 2010, 10:22 PM GMT</div>
- <a href="/post/post2/"><div>bar</div></a>
- </li>
-
-
- </ul>
- </div>
- </div>
- </section>
-
-
- </body>
-</html>
-EOF
-
-${TESTS_ENVIRONMENT} @abs_top_builddir@/blogc \
- -D BASE_DOMAIN=http://bola.com/ \
- -D BASE_URL= \
- -D SITE_TITLE="Chunda's website" \
- -D DATE_FORMAT="%b %d, %Y, %I:%M %p GMT" \
- -D FOO1="asd" \
- -t "${TEMP}/main.tmpl" \
- -o "${TEMP}/output.html" \
- -l \
- "${TEMP}/post1.txt" "${TEMP}/post2.txt"
-
-diff -uN "${TEMP}/output.html" "${TEMP}/expected-output.html"
-
-echo -e "${TEMP}/post1.txt\n${TEMP}/post2.txt" | ${TESTS_ENVIRONMENT} @abs_top_builddir@/blogc \
- -D BASE_DOMAIN=http://bola.com/ \
- -D BASE_URL= \
- -D SITE_TITLE="Chunda's website" \
- -D DATE_FORMAT="%b %d, %Y, %I:%M %p GMT" \
- -D FOO1="asd" \
- -t "${TEMP}/main.tmpl" \
- -o "${TEMP}/output2.html" \
- -l \
- -i
-
-diff -uN "${TEMP}/output2.html" "${TEMP}/expected-output.html"
-
-${TESTS_ENVIRONMENT} @abs_top_builddir@/blogc \
- -D BASE_DOMAIN=http://bola.com/ \
- -D BASE_URL= \
- -D SITE_TITLE="Chunda's website" \
- -D DATE_FORMAT="%b %d, %Y, %I:%M %p GMT" \
- -D FOO1="asd" \
- -t "${TEMP}/main.tmpl" \
- -l \
- "${TEMP}/post1.txt" "${TEMP}/post2.txt" > "${TEMP}/output3.html"
-
-diff -uN "${TEMP}/output3.html" "${TEMP}/expected-output.html"
-
-echo -e "${TEMP}/post1.txt\n${TEMP}/post2.txt" | ${TESTS_ENVIRONMENT} @abs_top_builddir@/blogc \
- -D BASE_DOMAIN=http://bola.com/ \
- -D BASE_URL= \
- -D SITE_TITLE="Chunda's website" \
- -D DATE_FORMAT="%b %d, %Y, %I:%M %p GMT" \
- -D FOO1="asd" \
- -t "${TEMP}/main.tmpl" \
- -l \
- -i > "${TEMP}/output4.html"
-
-diff -uN "${TEMP}/output4.html" "${TEMP}/expected-output.html"
-
-cat > "${TEMP}/expected-output2.html" <<EOF
-<!DOCTYPE html>
-<html lang="en">
- <head>
- <title>foo</title>
- </head>
- <body>
- <a href="/"><div class="name">Chunda's website</div></a>
-
-
-
-
- <section class="main">
- <div class="container">
- <div class="content">
-
- <div class="title-container">
- <div class="page-heading">foo</div>
- </div>
-
- <div class="markdown">
- <p>foo?</p>
-
-
- </div>
- </div>
- </div>
- </section>
-
- </body>
-</html>
-EOF
-
-${TESTS_ENVIRONMENT} @abs_top_builddir@/blogc \
- -D BASE_DOMAIN=http://bola.com/ \
- -D BASE_URL= \
- -D SITE_TITLE="Chunda's website" \
- -D DATE_FORMAT="%b %d, %Y, %I:%M %p GMT" \
- -t "${TEMP}/main.tmpl" \
- -o "${TEMP}/output5.html" \
- "${TEMP}/post1.txt"
-
-diff -uN "${TEMP}/output5.html" "${TEMP}/expected-output2.html"
-
-echo -e "${TEMP}/post1.txt" | ${TESTS_ENVIRONMENT} @abs_top_builddir@/blogc \
- -D BASE_DOMAIN=http://bola.com/ \
- -D BASE_URL= \
- -D SITE_TITLE="Chunda's website" \
- -D DATE_FORMAT="%b %d, %Y, %I:%M %p GMT" \
- -t "${TEMP}/main.tmpl" \
- -o "${TEMP}/output6.html" \
- -i
-
-diff -uN "${TEMP}/output6.html" "${TEMP}/expected-output2.html"
-
-${TESTS_ENVIRONMENT} @abs_top_builddir@/blogc \
- -D BASE_DOMAIN=http://bola.com/ \
- -D BASE_URL= \
- -D SITE_TITLE="Chunda's website" \
- -D DATE_FORMAT="%b %d, %Y, %I:%M %p GMT" \
- -t "${TEMP}/main.tmpl" \
- "${TEMP}/post1.txt" > "${TEMP}/output7.html"
-
-diff -uN "${TEMP}/output7.html" "${TEMP}/expected-output2.html"
-
-echo -e "${TEMP}/post1.txt" | ${TESTS_ENVIRONMENT} @abs_top_builddir@/blogc \
- -D BASE_DOMAIN=http://bola.com/ \
- -D BASE_URL= \
- -D SITE_TITLE="Chunda's website" \
- -D DATE_FORMAT="%b %d, %Y, %I:%M %p GMT" \
- -t "${TEMP}/main.tmpl" \
- -i > "${TEMP}/output8.html"
-
-diff -uN "${TEMP}/output8.html" "${TEMP}/expected-output2.html"
-
-cat > "${TEMP}/expected-output3.html" <<EOF
-<!DOCTYPE html>
-<html lang="en">
- <head>
- <title>Chunda's website</title>
- </head>
- <body>
- <a href="/"><div class="name">Chunda's website</div></a><p>bar?</p>
-
-
- <section class="main">
- <div class="container">
- <div class="content">
- <div class="page-heading">Blog</div>
- <ul>
-
-
- <li class="post-item">
- <div class="meta">Jan 01, 2010, 11:11 AM GMT</div>
- <a href="/post/post1/"><div>foo</div></a>
- </li>
-
- <li class="post-item">
- <div class="meta">Jan 01, 2010, 10:22 PM GMT</div>
- <a href="/post/post2/"><div>bar</div></a>
- </li>
-
-
- </ul>
- </div>
- </div>
- </section>
-
-
- </body>
-</html>
-EOF
-
-${TESTS_ENVIRONMENT} @abs_top_builddir@/blogc \
- -D BASE_DOMAIN=http://bola.com/ \
- -D BASE_URL= \
- -D SITE_TITLE="Chunda's website" \
- -D DATE_FORMAT="%b %d, %Y, %I:%M %p GMT" \
- -e "${TEMP}/post3.txt" \
- -t "${TEMP}/main.tmpl" \
- -o "${TEMP}/output9.html" \
- -l \
- "${TEMP}/post1.txt" "${TEMP}/post2.txt"
-
-diff -uN "${TEMP}/output9.html" "${TEMP}/expected-output3.html"
-
-echo -e "${TEMP}/post1.txt\n${TEMP}/post2.txt" | ${TESTS_ENVIRONMENT} @abs_top_builddir@/blogc \
- -D BASE_DOMAIN=http://bola.com/ \
- -D BASE_URL= \
- -D SITE_TITLE="Chunda's website" \
- -D DATE_FORMAT="%b %d, %Y, %I:%M %p GMT" \
- -e "${TEMP}/post3.txt" \
- -t "${TEMP}/main.tmpl" \
- -o "${TEMP}/output10.html" \
- -l \
- -i
-
-diff -uN "${TEMP}/output10.html" "${TEMP}/expected-output3.html"
-
-${TESTS_ENVIRONMENT} @abs_top_builddir@/blogc \
- -D BASE_DOMAIN=http://bola.com/ \
- -D BASE_URL= \
- -D SITE_TITLE="Chunda's website" \
- -D DATE_FORMAT="%b %d, %Y, %I:%M %p GMT" \
- -e "${TEMP}/post3.txt" \
- -t "${TEMP}/main.tmpl" \
- -l \
- "${TEMP}/post1.txt" "${TEMP}/post2.txt" > "${TEMP}/output11.html"
-
-diff -uN "${TEMP}/output11.html" "${TEMP}/expected-output3.html"
-
-echo -e "${TEMP}/post1.txt\n${TEMP}/post2.txt" | ${TESTS_ENVIRONMENT} @abs_top_builddir@/blogc \
- -D BASE_DOMAIN=http://bola.com/ \
- -D BASE_URL= \
- -D SITE_TITLE="Chunda's website" \
- -D DATE_FORMAT="%b %d, %Y, %I:%M %p GMT" \
- -e "${TEMP}/post3.txt" \
- -t "${TEMP}/main.tmpl" \
- -l \
- -i > "${TEMP}/output12.html"
-
-diff -uN "${TEMP}/output12.html" "${TEMP}/expected-output3.html"
-
-cat > "${TEMP}/expected-output4.html" <<EOF
-<!DOCTYPE html>
-<html lang="en">
- <head>
- <title>Chunda's website</title>
- </head>
- <body>
- <a href="/"><div class="name">Chunda's website</div></a><p>foo?</p>
-
-
- <section class="main">
- <div class="container">
- <div class="content">
- <div class="page-heading">Blog</div>
- <ul>
-
-
- <li class="post-item">
- <div class="meta">Jan 01, 2010, 11:11 AM GMT</div>
- <a href="/post/post1/"><div>foo</div></a>
- </li>
-
- <li class="post-item">
- <div class="meta">Jan 01, 2010, 10:22 PM GMT</div>
- <a href="/post/post2/"><div>bar</div></a>
- </li>
-
-
- </ul>
- </div>
- </div>
- </section>
-
-
- </body>
-</html>
-EOF
-
-${TESTS_ENVIRONMENT} @abs_top_builddir@/blogc \
- -D BASE_DOMAIN=http://bola.com/ \
- -D BASE_URL= \
- -D SITE_TITLE="Chunda's website" \
- -D DATE_FORMAT="%b %d, %Y, %I:%M %p GMT" \
- -e "" \
- -e "${TEMP}/post1.txt" \
- -e "${TEMP}/post3.txt" \
- -t "${TEMP}/main.tmpl" \
- -o "${TEMP}/output13.html" \
- -l \
- "${TEMP}/post1.txt" "${TEMP}/post2.txt"
-
-diff -uN "${TEMP}/output13.html" "${TEMP}/expected-output4.html"
-
-
-cat > "${TEMP}/expected-output5.html" <<EOF
-<!DOCTYPE html>
-<html lang="en">
- <head>
- <title>Chunda's website</title>
- </head>
- <body>
- <a href="/"><div class="name">Chunda's website</div></a><p>foo?</p>
-<p>bar?</p>
-
-
- <section class="main">
- <div class="container">
- <div class="content">
- <div class="page-heading">Blog</div>
- <ul>
-
-
- <li class="post-item">
- <div class="meta">Jan 01, 2010, 11:11 AM GMT</div>
- <a href="/post/post1/"><div>foo</div></a>
- </li>
-
- <li class="post-item">
- <div class="meta">Jan 01, 2010, 10:22 PM GMT</div>
- <a href="/post/post2/"><div>bar</div></a>
- </li>
-
-
- </ul>
- </div>
- </div>
- </section>
-
-
- </body>
-</html>
-EOF
-
-${TESTS_ENVIRONMENT} @abs_top_builddir@/blogc \
- -D BASE_DOMAIN=http://bola.com/ \
- -D BASE_URL= \
- -D SITE_TITLE="Chunda's website" \
- -D DATE_FORMAT="%b %d, %Y, %I:%M %p GMT" \
- -e "${TEMP}/post1.txt" \
- -e "${TEMP}/post3.txt" \
- -t "${TEMP}/main.tmpl" \
- -o "${TEMP}/output14.html" \
- -l \
- "${TEMP}/post1.txt" "${TEMP}/post2.txt"
-
-diff -uN "${TEMP}/output14.html" "${TEMP}/expected-output5.html"
-
-
-cat > "${TEMP}/expected-output6.html" <<EOF
-<!DOCTYPE html>
-<html lang="en">
- <head>
- <title>Chunda's website</title>
- </head>
- <body>
- <a href="/"><div class="name">Chunda's website</div></a>
-
- <section class="main">
- <div class="container">
- <div class="content">
- <div class="page-heading">Blog</div>
- <ul>
-
- vazio
-
- </ul>
- </div>
- </div>
- </section>
-
-
- </body>
-</html>
-EOF
-
-${TESTS_ENVIRONMENT} @abs_top_builddir@/blogc \
- -D BASE_DOMAIN=http://bola.com/ \
- -D BASE_URL= \
- -D SITE_TITLE="Chunda's website" \
- -D DATE_FORMAT="%b %d, %Y, %I:%M %p GMT" \
- -t "${TEMP}/main.tmpl" \
- -o "${TEMP}/output15.html" \
- -l
-
-diff -uN "${TEMP}/output15.html" "${TEMP}/expected-output6.html"
-
-echo "{% block listig %}foo{% endblock %}\n" > "${TEMP}/error.tmpl"
-
-${TESTS_ENVIRONMENT} @abs_top_builddir@/blogc \
- -t "${TEMP}/error.tmpl" \
- "${TEMP}/post1.txt" 2>&1 | tee "${TEMP}/output.txt" || true
-
-grep "blogc: error: template: Invalid block type" "${TEMP}/output.txt"
-
-${TESTS_ENVIRONMENT} @abs_top_builddir@/blogc \
- -D 123=a 2>&1 | tee "${TEMP}/output.txt" || true
-
-grep \
- "blogc: error: invalid value for -D (first character in configuration key must be uppercase): 123" \
- "${TEMP}/output.txt"
-
-${TESTS_ENVIRONMENT} @abs_top_builddir@/blogc \
- -D A1-3=a 2>&1 | tee "${TEMP}/output.txt" || true
-
-grep \
- "blogc: error: invalid value for -D (configuration key must be uppercase with '_' and digits after first character): A1-3" \
- "${TEMP}/output.txt"
diff --git a/tests/blogc/check_filelist_parser.c b/tests/blogc/check_filelist_parser.c
deleted file mode 100644
index da1698e..0000000
--- a/tests/blogc/check_filelist_parser.c
+++ /dev/null
@@ -1,131 +0,0 @@
-/*
- * blogc: A blog compiler.
- * Copyright (C) 2014-2020 Rafael G. Martins <rafael@rafaelmartins.eng.br>
- *
- * This program can be distributed under the terms of the BSD License.
- * See the file LICENSE.
- */
-
-#include <stdarg.h>
-#include <stddef.h>
-#include <setjmp.h>
-#include <cmocka.h>
-#include <string.h>
-#include <stdlib.h>
-#include "../../src/common/utils.h"
-#include "../../src/blogc/filelist-parser.h"
-
-
-static void
-test_filelist_parse_empty(void **state)
-{
- bc_slist_t *l = blogc_filelist_parse("", 0);
- assert_null(l);
-}
-
-
-static void
-test_filelist_parse(void **state)
-{
- const char *a =
- "content/post/post1.txt";
- bc_slist_t *l = blogc_filelist_parse(a, strlen(a));
- assert_non_null(l);
- assert_string_equal(l->data, "content/post/post1.txt");
- assert_null(l->next);
- bc_slist_free_full(l, free);
- a =
- "content/post/post1.txt\n";
- l = blogc_filelist_parse(a, strlen(a));
- assert_non_null(l);
- assert_string_equal(l->data, "content/post/post1.txt");
- assert_null(l->next);
- bc_slist_free_full(l, free);
- a =
- "content/post/post1.txt\n"
- "content/post/post2.txt\n";
- l = blogc_filelist_parse(a, strlen(a));
- assert_non_null(l);
- assert_string_equal(l->data, "content/post/post1.txt");
- assert_string_equal(l->next->data, "content/post/post2.txt");
- assert_null(l->next->next);
- bc_slist_free_full(l, free);
- a =
- "content/post/post1.txt\n"
- "content/post/post2.txt\n"
- "content/post/post3.txt";
- l = blogc_filelist_parse(a, strlen(a));
- assert_non_null(l);
- assert_string_equal(l->data, "content/post/post1.txt");
- assert_string_equal(l->next->data, "content/post/post2.txt");
- assert_string_equal(l->next->next->data, "content/post/post3.txt");
- assert_null(l->next->next->next);
- bc_slist_free_full(l, free);
- a =
- " content/post/post1.txt\n"
- "content/post/post2.txt\t\n"
- "\tcontent/post/post3.txt";
- l = blogc_filelist_parse(a, strlen(a));
- assert_non_null(l);
- assert_string_equal(l->data, "content/post/post1.txt");
- assert_string_equal(l->next->data, "content/post/post2.txt");
- assert_string_equal(l->next->next->data, "content/post/post3.txt");
- assert_null(l->next->next->next);
- bc_slist_free_full(l, free);
-}
-
-
-static void
-test_filelist_parse_crlf(void **state)
-{
- const char *a =
- "content/post/post1.txt\r\n";
- bc_slist_t *l = blogc_filelist_parse(a, strlen(a));
- assert_non_null(l);
- assert_string_equal(l->data, "content/post/post1.txt");
- assert_null(l->next);
- bc_slist_free_full(l, free);
- a =
- "content/post/post1.txt\r\n"
- "content/post/post2.txt\r\n";
- l = blogc_filelist_parse(a, strlen(a));
- assert_non_null(l);
- assert_string_equal(l->data, "content/post/post1.txt");
- assert_string_equal(l->next->data, "content/post/post2.txt");
- assert_null(l->next->next);
- bc_slist_free_full(l, free);
- a =
- "content/post/post1.txt\r\n"
- "content/post/post2.txt\r\n"
- "content/post/post3.txt";
- l = blogc_filelist_parse(a, strlen(a));
- assert_non_null(l);
- assert_string_equal(l->data, "content/post/post1.txt");
- assert_string_equal(l->next->data, "content/post/post2.txt");
- assert_string_equal(l->next->next->data, "content/post/post3.txt");
- assert_null(l->next->next->next);
- bc_slist_free_full(l, free);
- a =
- " content/post/post1.txt\r\n"
- "content/post/post2.txt\t\r\n"
- "\tcontent/post/post3.txt";
- l = blogc_filelist_parse(a, strlen(a));
- assert_non_null(l);
- assert_string_equal(l->data, "content/post/post1.txt");
- assert_string_equal(l->next->data, "content/post/post2.txt");
- assert_string_equal(l->next->next->data, "content/post/post3.txt");
- assert_null(l->next->next->next);
- bc_slist_free_full(l, free);
-}
-
-
-int
-main(void)
-{
- const struct CMUnitTest tests[] = {
- cmocka_unit_test(test_filelist_parse_empty),
- cmocka_unit_test(test_filelist_parse),
- cmocka_unit_test(test_filelist_parse_crlf),
- };
- return cmocka_run_group_tests(tests, NULL, NULL);
-}
diff --git a/tests/blogc/check_funcvars.c b/tests/blogc/check_funcvars.c
deleted file mode 100644
index 23f1723..0000000
--- a/tests/blogc/check_funcvars.c
+++ /dev/null
@@ -1,80 +0,0 @@
-/*
- * blogc: A blog compiler.
- * Copyright (C) 2014-2019 Rafael G. Martins <rafael@rafaelmartins.eng.br>
- *
- * This program can be distributed under the terms of the BSD License.
- * See the file LICENSE.
- */
-
-#include <stdarg.h>
-#include <stddef.h>
-#include <setjmp.h>
-#include <cmocka.h>
-#include <stdlib.h>
-#include <string.h>
-#include <stdio.h>
-#include "../../src/common/error.h"
-#include "../../src/common/utils.h"
-#include "../../src/blogc/funcvars.h"
-
-
-char*
-__wrap_bc_file_get_contents(const char *path, bool utf8, size_t *len, bc_error_t **err)
-{
- assert_string_equal(path, "/proc/1/cgroup");
- assert_false(utf8);
- char *rv = mock_type(char*);
- *len = strlen(rv);
- return rv;
-}
-
-
-static void
-test_funcvars_eval(void **state)
-{
- bc_trie_t *t = bc_trie_new(free);
- blogc_funcvars_eval(t, NULL);
- blogc_funcvars_eval(t, "");
- blogc_funcvars_eval(t, "BOLA");
- assert_int_equal(bc_trie_size(t), 0);
-
- bc_trie_insert(t, "BOLA", bc_strdup("GUDA"));
- blogc_funcvars_eval(t, "BOLA");
- assert_int_equal(bc_trie_size(t), 1);
-
- bc_trie_free(t);
-}
-
-
-static void
-test_funcvars_eval_mocked(void **state)
-{
- bc_trie_t *t = bc_trie_new(free);
-
- // this is the only function that isn't hidden behind conditional macros
- // as of when this test was written. the other functions should be tested
- // separately
- will_return(__wrap_bc_file_get_contents, bc_strdup("asd/docker/asd"));
- blogc_funcvars_eval(t, "BLOGC_SYSINFO_INSIDE_DOCKER");
- assert_string_equal(bc_trie_lookup(t, "BLOGC_SYSINFO_INSIDE_DOCKER"), "1");
- assert_int_equal(bc_trie_size(t), 1);
-
- // this specific function call is cached, so calling it again should not
- // call bc_file_get_contents_again
- blogc_funcvars_eval(t, "BLOGC_SYSINFO_INSIDE_DOCKER");
- assert_string_equal(bc_trie_lookup(t, "BLOGC_SYSINFO_INSIDE_DOCKER"), "1");
- assert_int_equal(bc_trie_size(t), 1);
-
- bc_trie_free(t);
-}
-
-
-int
-main(void)
-{
- const struct CMUnitTest tests[] = {
- cmocka_unit_test(test_funcvars_eval),
- cmocka_unit_test(test_funcvars_eval_mocked),
- };
- return cmocka_run_group_tests(tests, NULL, NULL);
-}
diff --git a/tests/blogc/check_loader.c b/tests/blogc/check_loader.c
deleted file mode 100644
index caeb8d8..0000000
--- a/tests/blogc/check_loader.c
+++ /dev/null
@@ -1,1050 +0,0 @@
-/*
- * blogc: A blog compiler.
- * Copyright (C) 2014-2020 Rafael G. Martins <rafael@rafaelmartins.eng.br>
- *
- * This program can be distributed under the terms of the BSD License.
- * See the file LICENSE.
- */
-
-#include <stdarg.h>
-#include <stddef.h>
-#include <setjmp.h>
-#include <cmocka.h>
-#include <stdlib.h>
-#include <string.h>
-#include <stdio.h>
-#include "../../src/common/error.h"
-#include "../../src/common/utils.h"
-#include "../../src/blogc/template-parser.h"
-#include "../../src/blogc/loader.h"
-
-
-static void
-test_get_filename(void **state)
-{
- char *f = blogc_get_filename("/home/foo/asd/bola.txt");
- assert_string_equal(f, "bola");
- free(f);
- f = blogc_get_filename("/home/foo/asd/bola.guda.txt");
- assert_string_equal(f, "bola.guda");
- free(f);
- f = blogc_get_filename("bola.txt");
- assert_string_equal(f, "bola");
- free(f);
- f = blogc_get_filename("bola.guda.txt");
- assert_string_equal(f, "bola.guda");
- free(f);
- f = blogc_get_filename("/home/foo/asd/bola");
- assert_string_equal(f, "bola");
- free(f);
- f = blogc_get_filename("bola");
- assert_string_equal(f, "bola");
- free(f);
- f = blogc_get_filename("");
- assert_null(f);
- free(f);
- f = blogc_get_filename(NULL);
- assert_null(f);
- free(f);
-}
-
-
-char*
-__wrap_bc_file_get_contents(const char *path, bool utf8, size_t *len, bc_error_t **err)
-{
- assert_true(utf8);
- assert_null(*err);
- const char *_path = mock_type(const char*);
- if (_path != NULL)
- assert_string_equal(path, _path);
- char *rv = mock_type(char*);
- *len = 0;
- if (rv != NULL)
- *len = strlen(rv);
- return rv;
-}
-
-
-static void
-test_template_parse_from_file(void **state)
-{
- bc_error_t *err = NULL;
- will_return(__wrap_bc_file_get_contents, "bola");
- will_return(__wrap_bc_file_get_contents, bc_strdup("{{ BOLA }}\n"));
- bc_slist_t *l = blogc_template_parse_from_file("bola", &err);
- assert_null(err);
- assert_non_null(l);
- assert_int_equal(bc_slist_length(l), 2);
- blogc_template_free_ast(l);
-}
-
-
-static void
-test_template_parse_from_file_null(void **state)
-{
- bc_error_t *err = NULL;
- will_return(__wrap_bc_file_get_contents, "bola");
- will_return(__wrap_bc_file_get_contents, NULL);
- bc_slist_t *l = blogc_template_parse_from_file("bola", &err);
- assert_null(err);
- assert_null(l);
-}
-
-
-static void
-test_source_parse_from_file(void **state)
-{
- bc_error_t *err = NULL;
- will_return(__wrap_bc_file_get_contents, "bola.txt");
- will_return(__wrap_bc_file_get_contents, bc_strdup(
- "ASD: 123\n"
- "--------\n"
- "bola"));
- bc_trie_t *c = bc_trie_new(free);
- bc_trie_t *t = blogc_source_parse_from_file(c, "bola.txt", &err);
- assert_null(err);
- assert_non_null(t);
- assert_int_equal(bc_trie_size(t), 6);
- assert_string_equal(bc_trie_lookup(t, "ASD"), "123");
- assert_string_equal(bc_trie_lookup(t, "FILENAME"), "bola");
- assert_string_equal(bc_trie_lookup(t, "EXCERPT"), "<p>bola</p>\n");
- assert_string_equal(bc_trie_lookup(t, "CONTENT"), "<p>bola</p>\n");
- assert_string_equal(bc_trie_lookup(t, "RAW_CONTENT"), "bola");
- assert_string_equal(bc_trie_lookup(t, "DESCRIPTION"), "bola");
- bc_trie_free(c);
- bc_trie_free(t);
-}
-
-
-static void
-test_source_parse_from_file_maxdepth(void **state)
-{
- bc_error_t *err = NULL;
- will_return(__wrap_bc_file_get_contents, "bola.txt");
- will_return(__wrap_bc_file_get_contents, bc_strdup(
- "ASD: 123\n"
- "TOCTREE_MAXDEPTH: 1\n"
- "--------\n"
- "### bola\n"
- "#### guda"));
- bc_trie_t *c = bc_trie_new(free);
- bc_trie_insert(c, "TOCTREE_MAXDEPTH", bc_strdup("-1"));
- bc_trie_t *t = blogc_source_parse_from_file(c, "bola.txt", &err);
- assert_null(err);
- assert_non_null(t);
- assert_int_equal(bc_trie_size(t), 8);
- assert_string_equal(bc_trie_lookup(t, "ASD"), "123");
- assert_string_equal(bc_trie_lookup(t, "TOCTREE_MAXDEPTH"), "1");
- assert_string_equal(bc_trie_lookup(t, "FILENAME"), "bola");
- assert_string_equal(bc_trie_lookup(t, "EXCERPT"),
- "<h3 id=\"bola\">bola</h3>\n"
- "<h4 id=\"guda\">guda</h4>\n");
- assert_string_equal(bc_trie_lookup(t, "CONTENT"),
- "<h3 id=\"bola\">bola</h3>\n"
- "<h4 id=\"guda\">guda</h4>\n");
- assert_string_equal(bc_trie_lookup(t, "RAW_CONTENT"),
- "### bola\n"
- "#### guda");
- assert_string_equal(bc_trie_lookup(t, "FIRST_HEADER"), "bola");
- assert_string_equal(bc_trie_lookup(t, "TOCTREE"),
- "<ul>\n"
- " <li><a href=\"#bola\">bola</a></li>\n"
- "</ul>\n");
- bc_trie_free(c);
- bc_trie_free(t);
-}
-
-
-static void
-test_source_parse_from_file_maxdepth2(void **state)
-{
- bc_error_t *err = NULL;
- will_return(__wrap_bc_file_get_contents, "bola.txt");
- will_return(__wrap_bc_file_get_contents, bc_strdup(
- "ASD: 123\n"
- "--------\n"
- "### bola\n"
- "#### guda"));
- bc_trie_t *c = bc_trie_new(free);
- bc_trie_insert(c, "TOCTREE_MAXDEPTH", bc_strdup("1"));
- bc_trie_t *t = blogc_source_parse_from_file(c, "bola.txt", &err);
- assert_null(err);
- assert_non_null(t);
- assert_int_equal(bc_trie_size(t), 7);
- assert_string_equal(bc_trie_lookup(t, "ASD"), "123");
- assert_string_equal(bc_trie_lookup(t, "FILENAME"), "bola");
- assert_string_equal(bc_trie_lookup(t, "EXCERPT"),
- "<h3 id=\"bola\">bola</h3>\n"
- "<h4 id=\"guda\">guda</h4>\n");
- assert_string_equal(bc_trie_lookup(t, "CONTENT"),
- "<h3 id=\"bola\">bola</h3>\n"
- "<h4 id=\"guda\">guda</h4>\n");
- assert_string_equal(bc_trie_lookup(t, "RAW_CONTENT"),
- "### bola\n"
- "#### guda");
- assert_string_equal(bc_trie_lookup(t, "FIRST_HEADER"), "bola");
- assert_string_equal(bc_trie_lookup(t, "TOCTREE"),
- "<ul>\n"
- " <li><a href=\"#bola\">bola</a></li>\n"
- "</ul>\n");
- bc_trie_free(c);
- bc_trie_free(t);
-}
-
-
-static void
-test_source_parse_from_file_null(void **state)
-{
- bc_error_t *err = NULL;
- will_return(__wrap_bc_file_get_contents, "bola.txt");
- will_return(__wrap_bc_file_get_contents, NULL);
- bc_trie_t *c = bc_trie_new(free);
- bc_trie_t *t = blogc_source_parse_from_file(c, "bola.txt", &err);
- assert_null(err);
- assert_null(t);
- bc_trie_free(c);
-}
-
-
-static void
-test_source_parse_from_files(void **state)
-{
- will_return(__wrap_bc_file_get_contents, "bola1.txt");
- will_return(__wrap_bc_file_get_contents, bc_strdup(
- "ASD: 123\n"
- "DATE: 2001-02-03 04:05:06\n"
- "--------\n"
- "bola"));
- will_return(__wrap_bc_file_get_contents, "bola2.txt");
- will_return(__wrap_bc_file_get_contents, bc_strdup(
- "ASD: 456\n"
- "DATE: 2002-02-03 04:05:06\n"
- "--------\n"
- "bola"));
- will_return(__wrap_bc_file_get_contents, "bola3.txt");
- will_return(__wrap_bc_file_get_contents, bc_strdup(
- "ASD: 789\n"
- "DATE: 2003-02-03 04:05:06\n"
- "--------\n"
- "bola"));
- bc_error_t *err = NULL;
- bc_slist_t *s = NULL;
- s = bc_slist_append(s, bc_strdup("bola1.txt"));
- s = bc_slist_append(s, bc_strdup("bola2.txt"));
- s = bc_slist_append(s, bc_strdup("bola3.txt"));
- bc_trie_t *c = bc_trie_new(free);
- bc_slist_t *t = blogc_source_parse_from_files(c, s, &err);
- assert_null(err);
- assert_non_null(t);
- assert_int_equal(bc_slist_length(t), 3); // it is enough, no need to look at the items
- assert_int_equal(bc_trie_size(c), 4);
- assert_string_equal(bc_trie_lookup(c, "FILENAME_FIRST"), "bola1");
- assert_string_equal(bc_trie_lookup(c, "FILENAME_LAST"), "bola3");
- assert_string_equal(bc_trie_lookup(c, "DATE_FIRST"), "2001-02-03 04:05:06");
- assert_string_equal(bc_trie_lookup(c, "DATE_LAST"), "2003-02-03 04:05:06");
- bc_trie_free(c);
- bc_slist_free_full(s, free);
- bc_slist_free_full(t, (bc_free_func_t) bc_trie_free);
-}
-
-
-static void
-test_source_parse_from_files_filter_sort(void **state)
-{
- will_return(__wrap_bc_file_get_contents, "bola1.txt");
- will_return(__wrap_bc_file_get_contents, bc_strdup(
- "ASD: 123\n"
- "DATE: 2001-02-02 04:05:06\n"
- "--------\n"
- "bola"));
- will_return(__wrap_bc_file_get_contents, "bola2.txt");
- will_return(__wrap_bc_file_get_contents, bc_strdup(
- "ASD: 456\n"
- "DATE: 2001-02-01 04:05:06\n"
- "--------\n"
- "bola"));
- will_return(__wrap_bc_file_get_contents, "bola3.txt");
- will_return(__wrap_bc_file_get_contents, bc_strdup(
- "ASD: 789\n"
- "DATE: 2011-02-03 04:05:06\n"
- "--------\n"
- "bola"));
- bc_error_t *err = NULL;
- bc_slist_t *s = NULL;
- s = bc_slist_append(s, bc_strdup("bola1.txt"));
- s = bc_slist_append(s, bc_strdup("bola2.txt"));
- s = bc_slist_append(s, bc_strdup("bola3.txt"));
- bc_trie_t *c = bc_trie_new(free);
- bc_trie_insert(c, "FILTER_SORT", bc_strdup("1"));
- bc_slist_t *t = blogc_source_parse_from_files(c, s, &err);
- assert_null(err);
- assert_non_null(t);
- assert_int_equal(bc_slist_length(t), 3); // it is enough, no need to look at the items
- assert_int_equal(bc_trie_size(c), 5);
- assert_string_equal(bc_trie_lookup(c, "FILTER_SORT"), "1");
- assert_string_equal(bc_trie_lookup(c, "FILENAME_FIRST"), "bola3");
- assert_string_equal(bc_trie_lookup(c, "FILENAME_LAST"), "bola2");
- assert_string_equal(bc_trie_lookup(c, "DATE_FIRST"), "2011-02-03 04:05:06");
- assert_string_equal(bc_trie_lookup(c, "DATE_LAST"), "2001-02-01 04:05:06");
- bc_trie_free(c);
- bc_slist_free_full(s, free);
- bc_slist_free_full(t, (bc_free_func_t) bc_trie_free);
-}
-
-
-static void
-test_source_parse_from_files_filter_reverse(void **state)
-{
- will_return(__wrap_bc_file_get_contents, "bola1.txt");
- will_return(__wrap_bc_file_get_contents, bc_strdup(
- "ASD: 123\n"
- "DATE: 2001-02-03 04:05:06\n"
- "TAGS: chunda\n"
- "--------\n"
- "bola"));
- will_return(__wrap_bc_file_get_contents, "bola2.txt");
- will_return(__wrap_bc_file_get_contents, bc_strdup(
- "ASD: 456\n"
- "DATE: 2002-02-03 04:05:06\n"
- "TAGS: bola, chunda\n"
- "--------\n"
- "bola"));
- will_return(__wrap_bc_file_get_contents, "bola3.txt");
- will_return(__wrap_bc_file_get_contents, bc_strdup(
- "ASD: 789\n"
- "DATE: 2003-02-03 04:05:06\n"
- "--------\n"
- "bola"));
- bc_error_t *err = NULL;
- bc_slist_t *s = NULL;
- s = bc_slist_append(s, bc_strdup("bola1.txt"));
- s = bc_slist_append(s, bc_strdup("bola2.txt"));
- s = bc_slist_append(s, bc_strdup("bola3.txt"));
- bc_trie_t *c = bc_trie_new(free);
- bc_trie_insert(c, "FILTER_REVERSE", bc_strdup("1"));
- bc_slist_t *t = blogc_source_parse_from_files(c, s, &err);
- assert_null(err);
- assert_non_null(t);
- assert_int_equal(bc_slist_length(t), 3); // it is enough, no need to look at the items
- assert_int_equal(bc_trie_size(c), 5);
- assert_string_equal(bc_trie_lookup(c, "FILENAME_FIRST"), "bola3");
- assert_string_equal(bc_trie_lookup(c, "FILENAME_LAST"), "bola1");
- assert_string_equal(bc_trie_lookup(c, "DATE_FIRST"), "2003-02-03 04:05:06");
- assert_string_equal(bc_trie_lookup(c, "DATE_LAST"), "2001-02-03 04:05:06");
- assert_string_equal(bc_trie_lookup(c, "FILTER_REVERSE"), "1");
- bc_trie_free(c);
- bc_slist_free_full(s, free);
- bc_slist_free_full(t, (bc_free_func_t) bc_trie_free);
-}
-
-
-static void
-test_source_parse_from_files_filter_sort_reverse(void **state)
-{
- will_return(__wrap_bc_file_get_contents, "bola1.txt");
- will_return(__wrap_bc_file_get_contents, bc_strdup(
- "ASD: 123\n"
- "DATE: 2001-02-02 04:05:06\n"
- "--------\n"
- "bola"));
- will_return(__wrap_bc_file_get_contents, "bola2.txt");
- will_return(__wrap_bc_file_get_contents, bc_strdup(
- "ASD: 456\n"
- "DATE: 2001-02-01 04:05:06\n"
- "--------\n"
- "bola"));
- will_return(__wrap_bc_file_get_contents, "bola3.txt");
- will_return(__wrap_bc_file_get_contents, bc_strdup(
- "ASD: 789\n"
- "DATE: 2011-02-03 04:05:06\n"
- "--------\n"
- "bola"));
- bc_error_t *err = NULL;
- bc_slist_t *s = NULL;
- s = bc_slist_append(s, bc_strdup("bola1.txt"));
- s = bc_slist_append(s, bc_strdup("bola2.txt"));
- s = bc_slist_append(s, bc_strdup("bola3.txt"));
- bc_trie_t *c = bc_trie_new(free);
- bc_trie_insert(c, "FILTER_SORT", bc_strdup("1"));
- bc_trie_insert(c, "FILTER_REVERSE", bc_strdup("1"));
- bc_slist_t *t = blogc_source_parse_from_files(c, s, &err);
- assert_null(err);
- assert_non_null(t);
- assert_int_equal(bc_slist_length(t), 3); // it is enough, no need to look at the items
- assert_int_equal(bc_trie_size(c), 6);
- assert_string_equal(bc_trie_lookup(c, "FILTER_SORT"), "1");
- assert_string_equal(bc_trie_lookup(c, "FILTER_REVERSE"), "1");
- assert_string_equal(bc_trie_lookup(c, "FILENAME_FIRST"), "bola2");
- assert_string_equal(bc_trie_lookup(c, "FILENAME_LAST"), "bola3");
- assert_string_equal(bc_trie_lookup(c, "DATE_FIRST"), "2001-02-01 04:05:06");
- assert_string_equal(bc_trie_lookup(c, "DATE_LAST"), "2011-02-03 04:05:06");
- bc_trie_free(c);
- bc_slist_free_full(s, free);
- bc_slist_free_full(t, (bc_free_func_t) bc_trie_free);
-}
-
-
-static void
-test_source_parse_from_files_filter_by_tag(void **state)
-{
- will_return(__wrap_bc_file_get_contents, "bola1.txt");
- will_return(__wrap_bc_file_get_contents, bc_strdup(
- "ASD: 123\n"
- "DATE: 2001-02-03 04:05:06\n"
- "TAGS: chunda\n"
- "--------\n"
- "bola"));
- will_return(__wrap_bc_file_get_contents, "bola2.txt");
- will_return(__wrap_bc_file_get_contents, bc_strdup(
- "ASD: 456\n"
- "DATE: 2002-02-03 04:05:06\n"
- "TAGS: bola, chunda\n"
- "--------\n"
- "bola"));
- will_return(__wrap_bc_file_get_contents, "bola3.txt");
- will_return(__wrap_bc_file_get_contents, bc_strdup(
- "ASD: 789\n"
- "DATE: 2003-02-03 04:05:06\n"
- "--------\n"
- "bola"));
- bc_error_t *err = NULL;
- bc_slist_t *s = NULL;
- s = bc_slist_append(s, bc_strdup("bola1.txt"));
- s = bc_slist_append(s, bc_strdup("bola2.txt"));
- s = bc_slist_append(s, bc_strdup("bola3.txt"));
- bc_trie_t *c = bc_trie_new(free);
- bc_trie_insert(c, "FILTER_TAG", bc_strdup("chunda"));
- bc_slist_t *t = blogc_source_parse_from_files(c, s, &err);
- assert_null(err);
- assert_non_null(t);
- assert_int_equal(bc_slist_length(t), 2); // it is enough, no need to look at the items
- assert_int_equal(bc_trie_size(c), 5);
- assert_string_equal(bc_trie_lookup(c, "FILENAME_FIRST"), "bola1");
- assert_string_equal(bc_trie_lookup(c, "FILENAME_LAST"), "bola2");
- assert_string_equal(bc_trie_lookup(c, "DATE_FIRST"), "2001-02-03 04:05:06");
- assert_string_equal(bc_trie_lookup(c, "DATE_LAST"), "2002-02-03 04:05:06");
- assert_string_equal(bc_trie_lookup(c, "FILTER_TAG"), "chunda");
- bc_trie_free(c);
- bc_slist_free_full(s, free);
- bc_slist_free_full(t, (bc_free_func_t) bc_trie_free);
-}
-
-
-static void
-test_source_parse_from_files_filter_by_page(void **state)
-{
- will_return(__wrap_bc_file_get_contents, "bola1.txt");
- will_return(__wrap_bc_file_get_contents, bc_strdup(
- "ASD: 123\n"
- "DATE: 2001-02-03 04:05:06\n"
- "--------\n"
- "bola"));
- will_return(__wrap_bc_file_get_contents, "bola2.txt");
- will_return(__wrap_bc_file_get_contents, bc_strdup(
- "ASD: 456\n"
- "DATE: 2002-02-03 04:05:06\n"
- "--------\n"
- "bola"));
- will_return(__wrap_bc_file_get_contents, "bola3.txt");
- will_return(__wrap_bc_file_get_contents, bc_strdup(
- "ASD: 789\n"
- "DATE: 2003-02-03 04:05:06\n"
- "--------\n"
- "bola"));
- will_return(__wrap_bc_file_get_contents, "bola4.txt");
- will_return(__wrap_bc_file_get_contents, bc_strdup(
- "ASD: 7891\n"
- "DATE: 2004-02-03 04:05:06\n"
- "--------\n"
- "bola"));
- will_return(__wrap_bc_file_get_contents, "bola5.txt");
- will_return(__wrap_bc_file_get_contents, bc_strdup(
- "ASD: 7892\n"
- "DATE: 2005-02-03 04:05:06\n"
- "--------\n"
- "bola"));
- will_return(__wrap_bc_file_get_contents, "bola6.txt");
- will_return(__wrap_bc_file_get_contents, bc_strdup(
- "ASD: 7893\n"
- "DATE: 2006-02-03 04:05:06\n"
- "--------\n"
- "bola"));
- will_return(__wrap_bc_file_get_contents, "bola7.txt");
- will_return(__wrap_bc_file_get_contents, bc_strdup(
- "ASD: 7894\n"
- "DATE: 2007-02-03 04:05:06\n"
- "--------\n"
- "bola"));
- bc_error_t *err = NULL;
- bc_slist_t *s = NULL;
- s = bc_slist_append(s, bc_strdup("bola1.txt"));
- s = bc_slist_append(s, bc_strdup("bola2.txt"));
- s = bc_slist_append(s, bc_strdup("bola3.txt"));
- s = bc_slist_append(s, bc_strdup("bola4.txt"));
- s = bc_slist_append(s, bc_strdup("bola5.txt"));
- s = bc_slist_append(s, bc_strdup("bola6.txt"));
- s = bc_slist_append(s, bc_strdup("bola7.txt"));
- bc_trie_t *c = bc_trie_new(free);
- bc_trie_insert(c, "FILTER_PAGE", bc_strdup("1"));
- bc_trie_insert(c, "FILTER_PER_PAGE", bc_strdup("2"));
- bc_slist_t *t = blogc_source_parse_from_files(c, s, &err);
- assert_null(err);
- assert_non_null(t);
- assert_int_equal(bc_slist_length(t), 2); // it is enough, no need to look at the items
- assert_int_equal(bc_trie_size(c), 10);
- assert_string_equal(bc_trie_lookup(c, "FILENAME_FIRST"), "bola1");
- assert_string_equal(bc_trie_lookup(c, "FILENAME_LAST"), "bola2");
- assert_string_equal(bc_trie_lookup(c, "DATE_FIRST"), "2001-02-03 04:05:06");
- assert_string_equal(bc_trie_lookup(c, "DATE_LAST"), "2002-02-03 04:05:06");
- assert_string_equal(bc_trie_lookup(c, "FILTER_PAGE"), "1");
- assert_string_equal(bc_trie_lookup(c, "FILTER_PER_PAGE"), "2");
- assert_string_equal(bc_trie_lookup(c, "CURRENT_PAGE"), "1");
- assert_string_equal(bc_trie_lookup(c, "NEXT_PAGE"), "2");
- assert_string_equal(bc_trie_lookup(c, "FIRST_PAGE"), "1");
- assert_string_equal(bc_trie_lookup(c, "LAST_PAGE"), "4");
- bc_trie_free(c);
- bc_slist_free_full(s, free);
- bc_slist_free_full(t, (bc_free_func_t) bc_trie_free);
-}
-
-
-static void
-test_source_parse_from_files_filter_by_page2(void **state)
-{
- will_return(__wrap_bc_file_get_contents, "bola1.txt");
- will_return(__wrap_bc_file_get_contents, bc_strdup(
- "ASD: 123\n"
- "DATE: 2001-02-03 04:05:06\n"
- "--------\n"
- "bola"));
- will_return(__wrap_bc_file_get_contents, "bola2.txt");
- will_return(__wrap_bc_file_get_contents, bc_strdup(
- "ASD: 456\n"
- "DATE: 2002-02-03 04:05:06\n"
- "--------\n"
- "bola"));
- will_return(__wrap_bc_file_get_contents, "bola3.txt");
- will_return(__wrap_bc_file_get_contents, bc_strdup(
- "ASD: 789\n"
- "DATE: 2003-02-03 04:05:06\n"
- "--------\n"
- "bola"));
- will_return(__wrap_bc_file_get_contents, "bola4.txt");
- will_return(__wrap_bc_file_get_contents, bc_strdup(
- "ASD: 7891\n"
- "DATE: 2004-02-03 04:05:06\n"
- "--------\n"
- "bola"));
- will_return(__wrap_bc_file_get_contents, "bola5.txt");
- will_return(__wrap_bc_file_get_contents, bc_strdup(
- "ASD: 7892\n"
- "DATE: 2005-02-03 04:05:06\n"
- "--------\n"
- "bola"));
- will_return(__wrap_bc_file_get_contents, "bola6.txt");
- will_return(__wrap_bc_file_get_contents, bc_strdup(
- "ASD: 7893\n"
- "DATE: 2006-02-03 04:05:06\n"
- "--------\n"
- "bola"));
- will_return(__wrap_bc_file_get_contents, "bola7.txt");
- will_return(__wrap_bc_file_get_contents, bc_strdup(
- "ASD: 7894\n"
- "DATE: 2007-02-03 04:05:06\n"
- "--------\n"
- "bola"));
- bc_error_t *err = NULL;
- bc_slist_t *s = NULL;
- s = bc_slist_append(s, bc_strdup("bola1.txt"));
- s = bc_slist_append(s, bc_strdup("bola2.txt"));
- s = bc_slist_append(s, bc_strdup("bola3.txt"));
- s = bc_slist_append(s, bc_strdup("bola4.txt"));
- s = bc_slist_append(s, bc_strdup("bola5.txt"));
- s = bc_slist_append(s, bc_strdup("bola6.txt"));
- s = bc_slist_append(s, bc_strdup("bola7.txt"));
- bc_trie_t *c = bc_trie_new(free);
- bc_trie_insert(c, "FILTER_PAGE", bc_strdup("3"));
- bc_trie_insert(c, "FILTER_PER_PAGE", bc_strdup("2"));
- bc_slist_t *t = blogc_source_parse_from_files(c, s, &err);
- assert_null(err);
- assert_non_null(t);
- assert_int_equal(bc_slist_length(t), 2); // it is enough, no need to look at the items
- assert_int_equal(bc_trie_size(c), 11);
- assert_string_equal(bc_trie_lookup(c, "FILENAME_FIRST"), "bola5");
- assert_string_equal(bc_trie_lookup(c, "FILENAME_LAST"), "bola6");
- assert_string_equal(bc_trie_lookup(c, "DATE_FIRST"), "2005-02-03 04:05:06");
- assert_string_equal(bc_trie_lookup(c, "DATE_LAST"), "2006-02-03 04:05:06");
- assert_string_equal(bc_trie_lookup(c, "FILTER_PAGE"), "3");
- assert_string_equal(bc_trie_lookup(c, "FILTER_PER_PAGE"), "2");
- assert_string_equal(bc_trie_lookup(c, "CURRENT_PAGE"), "3");
- assert_string_equal(bc_trie_lookup(c, "PREVIOUS_PAGE"), "2");
- assert_string_equal(bc_trie_lookup(c, "NEXT_PAGE"), "4");
- assert_string_equal(bc_trie_lookup(c, "FIRST_PAGE"), "1");
- assert_string_equal(bc_trie_lookup(c, "LAST_PAGE"), "4");
- bc_trie_free(c);
- bc_slist_free_full(s, free);
- bc_slist_free_full(t, (bc_free_func_t) bc_trie_free);
-}
-
-
-static void
-test_source_parse_from_files_filter_by_page3(void **state)
-{
- will_return(__wrap_bc_file_get_contents, "bola1.txt");
- will_return(__wrap_bc_file_get_contents, bc_strdup(
- "ASD: 123\n"
- "DATE: 2001-02-03 04:05:06\n"
- "--------\n"
- "bola"));
- will_return(__wrap_bc_file_get_contents, "bola2.txt");
- will_return(__wrap_bc_file_get_contents, bc_strdup(
- "ASD: 456\n"
- "DATE: 2002-02-03 04:05:06\n"
- "--------\n"
- "bola"));
- will_return(__wrap_bc_file_get_contents, "bola3.txt");
- will_return(__wrap_bc_file_get_contents, bc_strdup(
- "ASD: 789\n"
- "DATE: 2003-02-03 04:05:06\n"
- "--------\n"
- "bola"));
- will_return(__wrap_bc_file_get_contents, "bola4.txt");
- will_return(__wrap_bc_file_get_contents, bc_strdup(
- "ASD: 7891\n"
- "DATE: 2004-02-03 04:05:06\n"
- "--------\n"
- "bola"));
- will_return(__wrap_bc_file_get_contents, "bola5.txt");
- will_return(__wrap_bc_file_get_contents, bc_strdup(
- "ASD: 7892\n"
- "DATE: 2005-02-03 04:05:06\n"
- "--------\n"
- "bola"));
- will_return(__wrap_bc_file_get_contents, "bola6.txt");
- will_return(__wrap_bc_file_get_contents, bc_strdup(
- "ASD: 7893\n"
- "DATE: 2006-02-03 04:05:06\n"
- "--------\n"
- "bola"));
- will_return(__wrap_bc_file_get_contents, "bola7.txt");
- will_return(__wrap_bc_file_get_contents, bc_strdup(
- "ASD: 7894\n"
- "DATE: 2007-02-03 04:05:06\n"
- "--------\n"
- "bola"));
- bc_error_t *err = NULL;
- bc_slist_t *s = NULL;
- s = bc_slist_append(s, bc_strdup("bola1.txt"));
- s = bc_slist_append(s, bc_strdup("bola2.txt"));
- s = bc_slist_append(s, bc_strdup("bola3.txt"));
- s = bc_slist_append(s, bc_strdup("bola4.txt"));
- s = bc_slist_append(s, bc_strdup("bola5.txt"));
- s = bc_slist_append(s, bc_strdup("bola6.txt"));
- s = bc_slist_append(s, bc_strdup("bola7.txt"));
- bc_trie_t *c = bc_trie_new(free);
- bc_trie_insert(c, "FILTER_PAGE", bc_strdup("1"));
- bc_trie_insert(c, "FILTER_PER_PAGE", bc_strdup("2"));
- bc_slist_t *t = blogc_source_parse_from_files(c, s, &err);
- assert_null(err);
- assert_non_null(t);
- assert_int_equal(bc_slist_length(t), 2); // it is enough, no need to look at the items
- assert_int_equal(bc_trie_size(c), 10);
- assert_string_equal(bc_trie_lookup(c, "FILENAME_FIRST"), "bola1");
- assert_string_equal(bc_trie_lookup(c, "FILENAME_LAST"), "bola2");
- assert_string_equal(bc_trie_lookup(c, "DATE_FIRST"), "2001-02-03 04:05:06");
- assert_string_equal(bc_trie_lookup(c, "DATE_LAST"), "2002-02-03 04:05:06");
- assert_string_equal(bc_trie_lookup(c, "FILTER_PAGE"), "1");
- assert_string_equal(bc_trie_lookup(c, "FILTER_PER_PAGE"), "2");
- assert_string_equal(bc_trie_lookup(c, "CURRENT_PAGE"), "1");
- assert_string_equal(bc_trie_lookup(c, "NEXT_PAGE"), "2");
- assert_string_equal(bc_trie_lookup(c, "FIRST_PAGE"), "1");
- assert_string_equal(bc_trie_lookup(c, "LAST_PAGE"), "4");
- bc_trie_free(c);
- bc_slist_free_full(s, free);
- bc_slist_free_full(t, (bc_free_func_t) bc_trie_free);
-}
-
-
-static void
-test_source_parse_from_files_filter_sort_and_by_page_and_tag(void **state)
-{
- will_return(__wrap_bc_file_get_contents, "bola1.txt");
- will_return(__wrap_bc_file_get_contents, bc_strdup(
- "ASD: 123\n"
- "DATE: 2001-02-03 04:05:06\n"
- "--------\n"
- "bola"));
- will_return(__wrap_bc_file_get_contents, "bola2.txt");
- will_return(__wrap_bc_file_get_contents, bc_strdup(
- "ASD: 456\n"
- "DATE: 2002-02-03 04:05:06\n"
- "TAGS: chunda\n"
- "--------\n"
- "bola"));
- will_return(__wrap_bc_file_get_contents, "bola3.txt");
- will_return(__wrap_bc_file_get_contents, bc_strdup(
- "ASD: 789\n"
- "DATE: 2003-02-03 04:05:06\n"
- "TAGS: chunda bola\n"
- "--------\n"
- "bola"));
- will_return(__wrap_bc_file_get_contents, "bola4.txt");
- will_return(__wrap_bc_file_get_contents, bc_strdup(
- "ASD: 7891\n"
- "DATE: 2004-02-03 04:05:06\n"
- "TAGS: bola\n"
- "--------\n"
- "bola"));
- will_return(__wrap_bc_file_get_contents, "bola5.txt");
- will_return(__wrap_bc_file_get_contents, bc_strdup(
- "ASD: 7892\n"
- "DATE: 2005-02-03 04:05:06\n"
- "TAGS: chunda\n"
- "--------\n"
- "bola"));
- will_return(__wrap_bc_file_get_contents, "bola6.txt");
- will_return(__wrap_bc_file_get_contents, bc_strdup(
- "ASD: 7893\n"
- "DATE: 2006-02-03 04:05:06\n"
- "--------\n"
- "bola"));
- will_return(__wrap_bc_file_get_contents, "bola7.txt");
- will_return(__wrap_bc_file_get_contents, bc_strdup(
- "ASD: 7894\n"
- "DATE: 2007-02-03 04:05:06\n"
- "TAGS: yay chunda\n"
- "--------\n"
- "bola"));
- bc_error_t *err = NULL;
- bc_slist_t *s = NULL;
- s = bc_slist_append(s, bc_strdup("bola1.txt"));
- s = bc_slist_append(s, bc_strdup("bola2.txt"));
- s = bc_slist_append(s, bc_strdup("bola3.txt"));
- s = bc_slist_append(s, bc_strdup("bola4.txt"));
- s = bc_slist_append(s, bc_strdup("bola5.txt"));
- s = bc_slist_append(s, bc_strdup("bola6.txt"));
- s = bc_slist_append(s, bc_strdup("bola7.txt"));
- bc_trie_t *c = bc_trie_new(free);
- bc_trie_insert(c, "FILTER_SORT", bc_strdup("1"));
- bc_trie_insert(c, "FILTER_TAG", bc_strdup("chunda"));
- bc_trie_insert(c, "FILTER_PAGE", bc_strdup("2"));
- bc_trie_insert(c, "FILTER_PER_PAGE", bc_strdup("2"));
- bc_slist_t *t = blogc_source_parse_from_files(c, s, &err);
- assert_null(err);
- assert_non_null(t);
- assert_int_equal(bc_slist_length(t), 2); // it is enough, no need to look at the items
- assert_int_equal(bc_trie_size(c), 12);
- assert_string_equal(bc_trie_lookup(c, "FILENAME_FIRST"), "bola3");
- assert_string_equal(bc_trie_lookup(c, "FILENAME_LAST"), "bola2");
- assert_string_equal(bc_trie_lookup(c, "DATE_FIRST"), "2003-02-03 04:05:06");
- assert_string_equal(bc_trie_lookup(c, "DATE_LAST"), "2002-02-03 04:05:06");
- assert_string_equal(bc_trie_lookup(c, "FILTER_SORT"), "1");
- assert_string_equal(bc_trie_lookup(c, "FILTER_TAG"), "chunda");
- assert_string_equal(bc_trie_lookup(c, "FILTER_PAGE"), "2");
- assert_string_equal(bc_trie_lookup(c, "FILTER_PER_PAGE"), "2");
- assert_string_equal(bc_trie_lookup(c, "CURRENT_PAGE"), "2");
- assert_string_equal(bc_trie_lookup(c, "PREVIOUS_PAGE"), "1");
- assert_string_equal(bc_trie_lookup(c, "FIRST_PAGE"), "1");
- assert_string_equal(bc_trie_lookup(c, "LAST_PAGE"), "2");
- bc_trie_free(c);
- bc_slist_free_full(s, free);
- bc_slist_free_full(t, (bc_free_func_t) bc_trie_free);
-}
-
-
-static void
-test_source_parse_from_files_filter_by_page_invalid(void **state)
-{
- will_return(__wrap_bc_file_get_contents, "bola1.txt");
- will_return(__wrap_bc_file_get_contents, bc_strdup(
- "ASD: 123\n"
- "DATE: 2001-02-03 04:05:06\n"
- "--------\n"
- "bola"));
- will_return(__wrap_bc_file_get_contents, "bola2.txt");
- will_return(__wrap_bc_file_get_contents, bc_strdup(
- "ASD: 456\n"
- "DATE: 2002-02-03 04:05:06\n"
- "--------\n"
- "bola"));
- will_return(__wrap_bc_file_get_contents, "bola3.txt");
- will_return(__wrap_bc_file_get_contents, bc_strdup(
- "ASD: 789\n"
- "DATE: 2003-02-03 04:05:06\n"
- "--------\n"
- "bola"));
- will_return(__wrap_bc_file_get_contents, "bola4.txt");
- will_return(__wrap_bc_file_get_contents, bc_strdup(
- "ASD: 7891\n"
- "DATE: 2004-02-03 04:05:06\n"
- "--------\n"
- "bola"));
- will_return(__wrap_bc_file_get_contents, "bola5.txt");
- will_return(__wrap_bc_file_get_contents, bc_strdup(
- "ASD: 7892\n"
- "DATE: 2005-02-03 04:05:06\n"
- "--------\n"
- "bola"));
- will_return(__wrap_bc_file_get_contents, "bola6.txt");
- will_return(__wrap_bc_file_get_contents, bc_strdup(
- "ASD: 7893\n"
- "DATE: 2006-02-03 04:05:06\n"
- "--------\n"
- "bola"));
- will_return(__wrap_bc_file_get_contents, "bola7.txt");
- will_return(__wrap_bc_file_get_contents, bc_strdup(
- "ASD: 7894\n"
- "DATE: 2007-02-03 04:05:06\n"
- "--------\n"
- "bola"));
- bc_error_t *err = NULL;
- bc_slist_t *s = NULL;
- s = bc_slist_append(s, bc_strdup("bola1.txt"));
- s = bc_slist_append(s, bc_strdup("bola2.txt"));
- s = bc_slist_append(s, bc_strdup("bola3.txt"));
- s = bc_slist_append(s, bc_strdup("bola4.txt"));
- s = bc_slist_append(s, bc_strdup("bola5.txt"));
- s = bc_slist_append(s, bc_strdup("bola6.txt"));
- s = bc_slist_append(s, bc_strdup("bola7.txt"));
- bc_trie_t *c = bc_trie_new(free);
- bc_trie_insert(c, "FILTER_PAGE", bc_strdup("-1"));
- bc_trie_insert(c, "FILTER_PER_PAGE", bc_strdup("2"));
- bc_slist_t *t = blogc_source_parse_from_files(c, s, &err);
- assert_null(err);
- assert_non_null(t);
- assert_int_equal(bc_slist_length(t), 2); // it is enough, no need to look at the items
- assert_int_equal(bc_trie_size(c), 10);
- assert_string_equal(bc_trie_lookup(c, "FILENAME_FIRST"), "bola1");
- assert_string_equal(bc_trie_lookup(c, "FILENAME_LAST"), "bola2");
- assert_string_equal(bc_trie_lookup(c, "DATE_FIRST"), "2001-02-03 04:05:06");
- assert_string_equal(bc_trie_lookup(c, "DATE_LAST"), "2002-02-03 04:05:06");
- assert_string_equal(bc_trie_lookup(c, "FILTER_PAGE"), "-1");
- assert_string_equal(bc_trie_lookup(c, "FILTER_PER_PAGE"), "2");
- assert_string_equal(bc_trie_lookup(c, "CURRENT_PAGE"), "1");
- assert_string_equal(bc_trie_lookup(c, "NEXT_PAGE"), "2");
- assert_string_equal(bc_trie_lookup(c, "FIRST_PAGE"), "1");
- assert_string_equal(bc_trie_lookup(c, "LAST_PAGE"), "4");
- bc_trie_free(c);
- bc_slist_free_full(s, free);
- bc_slist_free_full(t, (bc_free_func_t) bc_trie_free);
-}
-
-
-static void
-test_source_parse_from_files_filter_by_page_invalid2(void **state)
-{
- will_return(__wrap_bc_file_get_contents, "bola1.txt");
- will_return(__wrap_bc_file_get_contents, bc_strdup(
- "ASD: 123\n"
- "DATE: 2001-02-03 04:05:06\n"
- "--------\n"
- "bola"));
- will_return(__wrap_bc_file_get_contents, "bola2.txt");
- will_return(__wrap_bc_file_get_contents, bc_strdup(
- "ASD: 456\n"
- "DATE: 2002-02-03 04:05:06\n"
- "--------\n"
- "bola"));
- will_return(__wrap_bc_file_get_contents, "bola3.txt");
- will_return(__wrap_bc_file_get_contents, bc_strdup(
- "ASD: 789\n"
- "DATE: 2003-02-03 04:05:06\n"
- "--------\n"
- "bola"));
- will_return(__wrap_bc_file_get_contents, "bola4.txt");
- will_return(__wrap_bc_file_get_contents, bc_strdup(
- "ASD: 7891\n"
- "DATE: 2004-02-03 04:05:06\n"
- "--------\n"
- "bola"));
- will_return(__wrap_bc_file_get_contents, "bola5.txt");
- will_return(__wrap_bc_file_get_contents, bc_strdup(
- "ASD: 7892\n"
- "DATE: 2005-02-03 04:05:06\n"
- "--------\n"
- "bola"));
- will_return(__wrap_bc_file_get_contents, "bola6.txt");
- will_return(__wrap_bc_file_get_contents, bc_strdup(
- "ASD: 7893\n"
- "DATE: 2006-02-03 04:05:06\n"
- "--------\n"
- "bola"));
- will_return(__wrap_bc_file_get_contents, "bola7.txt");
- will_return(__wrap_bc_file_get_contents, bc_strdup(
- "ASD: 7894\n"
- "DATE: 2007-02-03 04:05:06\n"
- "--------\n"
- "bola"));
- bc_error_t *err = NULL;
- bc_slist_t *s = NULL;
- s = bc_slist_append(s, bc_strdup("bola1.txt"));
- s = bc_slist_append(s, bc_strdup("bola2.txt"));
- s = bc_slist_append(s, bc_strdup("bola3.txt"));
- s = bc_slist_append(s, bc_strdup("bola4.txt"));
- s = bc_slist_append(s, bc_strdup("bola5.txt"));
- s = bc_slist_append(s, bc_strdup("bola6.txt"));
- s = bc_slist_append(s, bc_strdup("bola7.txt"));
- bc_trie_t *c = bc_trie_new(free);
- bc_trie_insert(c, "FILTER_PAGE", bc_strdup("5"));
- bc_trie_insert(c, "FILTER_PER_PAGE", bc_strdup("2"));
- bc_slist_t *t = blogc_source_parse_from_files(c, s, &err);
- assert_null(err);
- assert_null(t);
- bc_trie_free(c);
- bc_slist_free_full(s, free);
-}
-
-
-static void
-test_source_parse_from_files_without_all_dates(void **state)
-{
- will_return(__wrap_bc_file_get_contents, "bola1.txt");
- will_return(__wrap_bc_file_get_contents, bc_strdup(
- "ASD: 123\n"
- "--------\n"
- "bola"));
- will_return(__wrap_bc_file_get_contents, "bola2.txt");
- will_return(__wrap_bc_file_get_contents, bc_strdup(
- "ASD: 456\n"
- "DATE: 2002-02-03 04:05:06\n"
- "--------\n"
- "bola"));
- will_return(__wrap_bc_file_get_contents, "bola3.txt");
- will_return(__wrap_bc_file_get_contents, bc_strdup(
- "ASD: 789\n"
- "DATE: 2003-02-03 04:05:06\n"
- "--------\n"
- "bola"));
- bc_error_t *err = NULL;
- bc_slist_t *s = NULL;
- s = bc_slist_append(s, bc_strdup("bola1.txt"));
- s = bc_slist_append(s, bc_strdup("bola2.txt"));
- s = bc_slist_append(s, bc_strdup("bola3.txt"));
- bc_trie_t *c = bc_trie_new(free);
- bc_slist_t *t = blogc_source_parse_from_files(c, s, &err);
- assert_null(t);
- assert_non_null(err);
- assert_int_equal(err->type, BLOGC_ERROR_LOADER);
- assert_string_equal(err->msg,
- "'DATE' variable provided for at least one source file, but not for "
- "all source files. It must be provided for all files.");
- bc_error_free(err);
- assert_int_equal(bc_trie_size(c), 0);
- bc_trie_free(c);
- bc_slist_free_full(s, free);
-}
-
-
-static void
-test_source_parse_from_files_filter_sort_without_all_dates(void **state)
-{
- will_return(__wrap_bc_file_get_contents, "bola1.txt");
- will_return(__wrap_bc_file_get_contents, bc_strdup(
- "ASD: 123\n"
- "DATE: 2002-02-03 04:05:06\n"
- "--------\n"
- "bola"));
- will_return(__wrap_bc_file_get_contents, "bola2.txt");
- will_return(__wrap_bc_file_get_contents, bc_strdup(
- "ASD: 456\n"
- "--------\n"
- "bola"));
- bc_error_t *err = NULL;
- bc_slist_t *s = NULL;
- s = bc_slist_append(s, bc_strdup("bola1.txt"));
- s = bc_slist_append(s, bc_strdup("bola2.txt"));
- s = bc_slist_append(s, bc_strdup("bola3.txt"));
- bc_trie_t *c = bc_trie_new(free);
- bc_trie_insert(c, "FILTER_SORT", bc_strdup("1"));
- bc_slist_t *t = blogc_source_parse_from_files(c, s, &err);
- assert_null(t);
- assert_non_null(err);
- assert_int_equal(err->type, BLOGC_ERROR_LOADER);
- assert_string_equal(err->msg,
- "'FILTER_SORT' requires that 'DATE' variable is set for every source "
- "file: bola2.txt");
- bc_error_free(err);
- assert_int_equal(bc_trie_size(c), 1);
- assert_string_equal(bc_trie_lookup(c, "FILTER_SORT"), "1");
- bc_trie_free(c);
- bc_slist_free_full(s, free);
-}
-
-
-static void
-test_source_parse_from_files_filter_sort_with_wrong_date(void **state)
-{
- will_return(__wrap_bc_file_get_contents, "bola1.txt");
- will_return(__wrap_bc_file_get_contents, bc_strdup(
- "ASD: 123\n"
- "DATE: 2002-02-03 04:05:ab\n"
- "--------\n"
- "bola"));
- bc_error_t *err = NULL;
- bc_slist_t *s = NULL;
- s = bc_slist_append(s, bc_strdup("bola1.txt"));
- s = bc_slist_append(s, bc_strdup("bola2.txt"));
- s = bc_slist_append(s, bc_strdup("bola3.txt"));
- bc_trie_t *c = bc_trie_new(free);
- bc_trie_insert(c, "FILTER_SORT", bc_strdup("1"));
- bc_slist_t *t = blogc_source_parse_from_files(c, s, &err);
- assert_null(t);
- assert_non_null(err);
- assert_int_equal(err->type, BLOGC_ERROR_LOADER);
- assert_string_equal(err->msg,
- "An error occurred while parsing 'DATE' variable: bola1.txt\n\nInvalid "
- "first digit of seconds. Found 'a', must be integer >= 0 and <= 6.");
- bc_error_free(err);
- assert_int_equal(bc_trie_size(c), 1);
- assert_string_equal(bc_trie_lookup(c, "FILTER_SORT"), "1");
- bc_trie_free(c);
- bc_slist_free_full(s, free);
-}
-
-
-static void
-test_source_parse_from_files_null(void **state)
-{
- bc_error_t *err = NULL;
- bc_slist_t *s = NULL;
- bc_trie_t *c = bc_trie_new(free);
- bc_slist_t *t = blogc_source_parse_from_files(c, s, &err);
- assert_null(err);
- assert_null(t);
- assert_int_equal(bc_slist_length(t), 0);
- assert_int_equal(bc_trie_size(c), 0);
- bc_trie_free(c);
- bc_slist_free_full(s, free);
- bc_slist_free_full(t, (bc_free_func_t) bc_trie_free);
-}
-
-
-int
-main(void)
-{
- const struct CMUnitTest tests[] = {
- cmocka_unit_test(test_get_filename),
- cmocka_unit_test(test_template_parse_from_file),
- cmocka_unit_test(test_template_parse_from_file_null),
- cmocka_unit_test(test_source_parse_from_file),
- cmocka_unit_test(test_source_parse_from_file_maxdepth),
- cmocka_unit_test(test_source_parse_from_file_maxdepth2),
- cmocka_unit_test(test_source_parse_from_file_null),
- cmocka_unit_test(test_source_parse_from_files),
- cmocka_unit_test(test_source_parse_from_files_filter_sort),
- cmocka_unit_test(test_source_parse_from_files_filter_reverse),
- cmocka_unit_test(test_source_parse_from_files_filter_sort_reverse),
- cmocka_unit_test(test_source_parse_from_files_filter_by_tag),
- cmocka_unit_test(test_source_parse_from_files_filter_by_page),
- cmocka_unit_test(test_source_parse_from_files_filter_by_page2),
- cmocka_unit_test(test_source_parse_from_files_filter_by_page3),
- cmocka_unit_test(test_source_parse_from_files_filter_sort_and_by_page_and_tag),
- cmocka_unit_test(test_source_parse_from_files_filter_by_page_invalid),
- cmocka_unit_test(test_source_parse_from_files_filter_by_page_invalid2),
- cmocka_unit_test(test_source_parse_from_files_without_all_dates),
- cmocka_unit_test(test_source_parse_from_files_filter_sort_without_all_dates),
- cmocka_unit_test(test_source_parse_from_files_filter_sort_with_wrong_date),
- cmocka_unit_test(test_source_parse_from_files_null),
- };
- return cmocka_run_group_tests(tests, NULL, NULL);
-}
diff --git a/tests/blogc/check_renderer.c b/tests/blogc/check_renderer.c
deleted file mode 100644
index 08aed84..0000000
--- a/tests/blogc/check_renderer.c
+++ /dev/null
@@ -1,1435 +0,0 @@
-/*
- * blogc: A blog compiler.
- * Copyright (C) 2014-2020 Rafael G. Martins <rafael@rafaelmartins.eng.br>
- *
- * This program can be distributed under the terms of the BSD License.
- * See the file LICENSE.
- */
-
-#include <stdarg.h>
-#include <stddef.h>
-#include <setjmp.h>
-#include <cmocka.h>
-#include <stdbool.h>
-#include <stdlib.h>
-#include <string.h>
-#include "../../src/common/error.h"
-#include "../../src/common/utils.h"
-#include "../../src/blogc/renderer.h"
-#include "../../src/blogc/source-parser.h"
-#include "../../src/blogc/template-parser.h"
-
-
-static bc_slist_t*
-create_sources(size_t count)
-{
- const char *s[] = {
- "BOLA: asd\n"
- "GUDA: zxc\n"
- "GUDA2: zxc\n"
- "DATE: 2015-01-02 03:04:05\n"
- "DATE_FORMAT: %R\n"
- "TAGS: foo bar baz\n"
- "-----\n"
- "ahahahahahahahaha",
- "BOLA: asd2\n"
- "GUDA: zxc2\n"
- "DATE: 2014-02-03 04:05:06\n"
- "-----\n"
- "ahahahahahahahaha2",
- "BOLA: asd3\n"
- "GUDA: zxc3\n"
- "DATE: 2013-01-02 03:04:05\n"
- "-----\n"
- "ahahahahahahahaha3",
- };
- assert_false(count > 3);
- bc_error_t *err = NULL;
- bc_slist_t *l = NULL;
- for (size_t i = 0; i < count; i++) {
- l = bc_slist_append(l, blogc_source_parse(s[i], strlen(s[i]), -1, &err));
- assert_null(err);
- }
- assert_int_equal(bc_slist_length(l), count);
- return l;
-}
-
-
-static void
-test_render_entry(void **state)
-{
- const char *str =
- "foo\n"
- "{% block listing_once %}fuuu{% endblock %}\n"
- "{% block entry %}\n"
- "{{ DATE }}\n"
- "{% ifdef DATE_FORMATTED %}{{ DATE_FORMATTED }}{% endif %}\n"
- "{% ifdef GUDA %}{{ GUDA }}{% endif %}\n"
- "{% ifdef CHUNDA %}{{ CHUNDA }}{% endif %}\n"
- "{% endblock %}\n"
- "{% block listing %}lol{% endblock %}\n"
- "{% if GUDA == GUDA2 %}gudabola{% endif %}\n"
- "{% if GUDA == \"zxc\" %}LOL{% endif %}\n"
- "{% if GUDA != \"bola\" %}HEHE{% endif %}\n"
- "{% if GUDA < \"zxd\" %}LOL2{% endif %}\n"
- "{% if GUDA > \"zxd\" %}LOL3{% else %}ELSE{% endif %}\n"
- "{% if GUDA <= \"zxc\" %}LOL4{% endif %}\n"
- "{% foreach TAGS %}lol {{ FOREACH_ITEM }} haha {% endforeach %}\n"
- "{% foreach TAGS_ASD %}yay{% endforeach %}\n"
- "{% block listing_empty %}vazio{% endblock %}\n";
- bc_error_t *err = NULL;
- bc_slist_t *l = blogc_template_parse(str, strlen(str), &err);
- assert_non_null(l);
- assert_null(err);
- bc_slist_t *s = create_sources(1);
- assert_non_null(s);
- char *out = blogc_render(l, s, NULL, NULL, false);
- assert_string_equal(out,
- "foo\n"
- "\n"
- "\n"
- "2015-01-02 03:04:05\n"
- "03:04\n"
- "zxc\n"
- "\n"
- "\n"
- "\n"
- "gudabola\n"
- "LOL\n"
- "HEHE\n"
- "LOL2\n"
- "ELSE\n"
- "LOL4\n"
- "lol foo haha lol bar haha lol baz haha \n"
- "\n"
- "\n");
- blogc_template_free_ast(l);
- bc_slist_free_full(s, (bc_free_func_t) bc_trie_free);
- free(out);
-}
-
-
-static void
-test_render_listing(void **state)
-{
- const char *str =
- "foo\n"
- "{% block listing_once %}fuuu{% endblock %}\n"
- "{% block entry %}\n"
- "{% ifdef GUDA %}{{ GUDA }}{% endif %}\n"
- "{% ifdef CHUNDA %}{{ CHUNDA }}{% endif %}\n"
- "{% endblock %}\n"
- "{% block listing %}\n"
- "{% ifdef DATE_FORMATTED %}{{ DATE_FORMATTED }}{% endif %}\n"
- "bola: {% ifdef BOLA %}{{ BOLA }}{% endif %}\n"
- "{% foreach TAGS %}lol {{ FOREACH_ITEM }} haha {% endforeach %}\n"
- "{% foreach TAGS_ASD %}yay{% endforeach %}\n"
- "{% endblock %}\n"
- "{% block listing_empty %}vazio{% endblock %}\n";
- bc_error_t *err = NULL;
- bc_slist_t *l = blogc_template_parse(str, strlen(str), &err);
- assert_non_null(l);
- assert_null(err);
- bc_slist_t *s = create_sources(3);
- assert_non_null(s);
- char *out = blogc_render(l, s, NULL, NULL, true);
- assert_string_equal(out,
- "foo\n"
- "fuuu\n"
- "\n"
- "\n"
- "03:04\n"
- "bola: asd\n"
- "lol foo haha lol bar haha lol baz haha \n"
- "\n"
- "\n"
- "2014-02-03 04:05:06\n"
- "bola: asd2\n"
- "\n"
- "\n"
- "\n"
- "2013-01-02 03:04:05\n"
- "bola: asd3\n"
- "\n"
- "\n"
- "\n"
- "\n");
- blogc_template_free_ast(l);
- bc_slist_free_full(s, (bc_free_func_t) bc_trie_free);
- free(out);
-}
-
-
-static void
-test_render_listing_entry(void **state)
-{
- const char *str =
- "foo\n"
- "{% block listing_once %}fuuu{% endblock %}\n"
- "{% block entry %}\n"
- "{% ifdef GUDA %}{{ GUDA }}{% endif %}\n"
- "{% ifdef CHUNDA %}{{ CHUNDA }}{% endif %}\n"
- "{% endblock %}\n"
- "{% block listing_entry %}asd{% endblock %}\n"
- "{% block listing %}\n"
- "{% ifdef DATE_FORMATTED %}{{ DATE_FORMATTED }}{% endif %}\n"
- "bola: {% ifdef BOLA %}{{ BOLA }}{% endif %}\n"
- "{% foreach TAGS %}lol {{ FOREACH_ITEM }} haha {% endforeach %}\n"
- "{% foreach TAGS_ASD %}yay{% endforeach %}\n"
- "{% endblock %}\n"
- "{% block listing_empty %}vazio{% endblock %}\n";
- bc_error_t *err = NULL;
- bc_slist_t *l = blogc_template_parse(str, strlen(str), &err);
- assert_non_null(l);
- assert_null(err);
- bc_slist_t *s = create_sources(3);
- assert_non_null(s);
- char *out = blogc_render(l, s, NULL, NULL, true);
- assert_string_equal(out,
- "foo\n"
- "fuuu\n"
- "\n"
- "\n"
- "\n"
- "03:04\n"
- "bola: asd\n"
- "lol foo haha lol bar haha lol baz haha \n"
- "\n"
- "\n"
- "2014-02-03 04:05:06\n"
- "bola: asd2\n"
- "\n"
- "\n"
- "\n"
- "2013-01-02 03:04:05\n"
- "bola: asd3\n"
- "\n"
- "\n"
- "\n"
- "\n");
- blogc_template_free_ast(l);
- bc_slist_free_full(s, (bc_free_func_t) bc_trie_free);
- free(out);
-}
-
-
-static void
-test_render_listing_entry2(void **state)
-{
- const char *str =
- "foo\n"
- "{% block listing_once %}fuuu{% endblock %}\n"
- "{% block entry %}\n"
- "{% ifdef GUDA %}{{ GUDA }}{% endif %}\n"
- "{% ifdef CHUNDA %}{{ CHUNDA }}{% endif %}\n"
- "{% endblock %}\n"
- "{% block listing_entry %}{{ FUUUUU }}{% endblock %}\n"
- "{% block listing_entry %}{{ BAAAAA }}{% endblock %}\n"
- "{% block listing %}\n"
- "{% ifdef DATE_FORMATTED %}{{ DATE_FORMATTED }}{% endif %}\n"
- "bola: {% ifdef BOLA %}{{ BOLA }}{% endif %}\n"
- "{% foreach TAGS %}lol {{ FOREACH_ITEM }} haha {% endforeach %}\n"
- "{% foreach TAGS_ASD %}yay{% endforeach %}\n"
- "{% endblock %}\n"
- "{% block listing_empty %}vazio{% endblock %}\n";
- bc_error_t *err = NULL;
- bc_slist_t *l = blogc_template_parse(str, strlen(str), &err);
- assert_non_null(l);
- assert_null(err);
- bc_slist_t *s = create_sources(3);
- assert_non_null(s);
- bc_trie_t *entry = bc_trie_new(free);
- bc_trie_insert(entry, "FUUUUU", bc_strdup("XD"));
- bc_trie_insert(entry, "BAAAAA", bc_strdup(":p"));
- bc_slist_t *e = NULL;
- e = bc_slist_append(e, entry);
- char *out = blogc_render(l, s, e, NULL, true);
- bc_slist_free_full(e, (bc_free_func_t) bc_trie_free);
- assert_string_equal(out,
- "foo\n"
- "fuuu\n"
- "\n"
- "XD\n"
- "\n"
- "\n"
- "03:04\n"
- "bola: asd\n"
- "lol foo haha lol bar haha lol baz haha \n"
- "\n"
- "\n"
- "2014-02-03 04:05:06\n"
- "bola: asd2\n"
- "\n"
- "\n"
- "\n"
- "2013-01-02 03:04:05\n"
- "bola: asd3\n"
- "\n"
- "\n"
- "\n"
- "\n");
- blogc_template_free_ast(l);
- bc_slist_free_full(s, (bc_free_func_t) bc_trie_free);
- free(out);
-}
-
-
-static void
-test_render_listing_entry3(void **state)
-{
- const char *str =
- "foo\n"
- "{% block listing_once %}fuuu{% endblock %}\n"
- "{% block entry %}\n"
- "{% ifdef GUDA %}{{ GUDA }}{% endif %}\n"
- "{% ifdef CHUNDA %}{{ CHUNDA }}{% endif %}\n"
- "{% endblock %}\n"
- "{% block listing_entry %}{{ FUUUUU }}{% endblock %}\n"
- "{% block listing_entry %}{{ BAAAAA }}{% endblock %}\n"
- "{% block listing %}\n"
- "{% ifdef DATE_FORMATTED %}{{ DATE_FORMATTED }}{% endif %}\n"
- "bola: {% ifdef BOLA %}{{ BOLA }}{% endif %}\n"
- "{% foreach TAGS %}lol {{ FOREACH_ITEM }} haha {% endforeach %}\n"
- "{% foreach TAGS_ASD %}yay{% endforeach %}\n"
- "{% endblock %}\n"
- "{% block listing_empty %}vazio{% endblock %}\n";
- bc_error_t *err = NULL;
- bc_slist_t *l = blogc_template_parse(str, strlen(str), &err);
- assert_non_null(l);
- assert_null(err);
- bc_slist_t *s = create_sources(3);
- assert_non_null(s);
- bc_trie_t *entry = bc_trie_new(free);
- bc_trie_insert(entry, "FUUUUU", bc_strdup("XD"));
- bc_trie_insert(entry, "BAAAAA", bc_strdup(":p"));
- bc_slist_t *e = NULL;
- e = bc_slist_append(e, NULL);
- e = bc_slist_append(e, entry);
- char *out = blogc_render(l, s, e, NULL, true);
- bc_slist_free_full(e, (bc_free_func_t) bc_trie_free);
- assert_string_equal(out,
- "foo\n"
- "fuuu\n"
- "\n"
- "\n"
- ":p\n"
- "\n"
- "03:04\n"
- "bola: asd\n"
- "lol foo haha lol bar haha lol baz haha \n"
- "\n"
- "\n"
- "2014-02-03 04:05:06\n"
- "bola: asd2\n"
- "\n"
- "\n"
- "\n"
- "2013-01-02 03:04:05\n"
- "bola: asd3\n"
- "\n"
- "\n"
- "\n"
- "\n");
- blogc_template_free_ast(l);
- bc_slist_free_full(s, (bc_free_func_t) bc_trie_free);
- free(out);
-}
-
-
-static void
-test_render_listing_entry4(void **state)
-{
- const char *str =
- "foo\n"
- "{% block listing_once %}fuuu{% endblock %}\n"
- "{% block entry %}\n"
- "{% ifdef GUDA %}{{ GUDA }}{% endif %}\n"
- "{% ifdef CHUNDA %}{{ CHUNDA }}{% endif %}\n"
- "{% endblock %}\n"
- "{% block listing_entry %}{{ FUUUUU }}{% endblock %}\n"
- "{% block listing_entry %}{{ DDDDDD }}{% endblock %}\n"
- "{% block listing %}\n"
- "{% ifdef DATE_FORMATTED %}{{ DATE_FORMATTED }}{% endif %}\n"
- "bola: {% ifdef BOLA %}{{ BOLA }}{% endif %}\n"
- "{% foreach TAGS %}lol {{ FOREACH_ITEM }} haha {% endforeach %}\n"
- "{% foreach TAGS_ASD %}yay{% endforeach %}\n"
- "{% endblock %}\n"
- "{% block listing_empty %}vazio{% endblock %}\n";
- bc_error_t *err = NULL;
- bc_slist_t *l = blogc_template_parse(str, strlen(str), &err);
- assert_non_null(l);
- assert_null(err);
- bc_slist_t *s = create_sources(3);
- assert_non_null(s);
- bc_trie_t *entry1 = bc_trie_new(free);
- bc_trie_insert(entry1, "FUUUUU", bc_strdup("XD"));
- bc_trie_insert(entry1, "BAAAAA", bc_strdup(":p"));
- bc_trie_t *entry2 = bc_trie_new(free);
- bc_trie_insert(entry2, "CCCCCC", bc_strdup("er"));
- bc_trie_insert(entry2, "DDDDDD", bc_strdup("ty"));
- bc_slist_t *e = NULL;
- e = bc_slist_append(e, entry1);
- e = bc_slist_append(e, entry2);
- char *out = blogc_render(l, s, e, NULL, true);
- bc_slist_free_full(e, (bc_free_func_t) bc_trie_free);
- assert_string_equal(out,
- "foo\n"
- "fuuu\n"
- "\n"
- "XD\n"
- "ty\n"
- "\n"
- "03:04\n"
- "bola: asd\n"
- "lol foo haha lol bar haha lol baz haha \n"
- "\n"
- "\n"
- "2014-02-03 04:05:06\n"
- "bola: asd2\n"
- "\n"
- "\n"
- "\n"
- "2013-01-02 03:04:05\n"
- "bola: asd3\n"
- "\n"
- "\n"
- "\n"
- "\n");
- blogc_template_free_ast(l);
- bc_slist_free_full(s, (bc_free_func_t) bc_trie_free);
- free(out);
-}
-
-
-static void
-test_render_listing_empty(void **state)
-{
- const char *str =
- "foo\n"
- "{% block listing_once %}fuuu{% endblock %}\n"
- "{% block entry %}\n"
- "{% ifdef GUDA %}{{ GUDA }}{% endif %}\n"
- "{% ifdef CHUNDA %}{{ CHUNDA }}{% endif %}\n"
- "{% endblock %}\n"
- "{% block listing %}\n"
- "{% ifdef DATE_FORMATTED %}{{ DATE_FORMATTED }}{% endif %}\n"
- "bola: {% ifdef BOLA %}{{ BOLA }}{% endif %}\n"
- "{% foreach TAGS %}lol {{ FOREACH_ITEM }} haha {% endforeach %}\n"
- "{% endblock %}\n"
- "{% block listing_empty %}vazio{% endblock %}\n";
- bc_error_t *err = NULL;
- bc_slist_t *l = blogc_template_parse(str, strlen(str), &err);
- assert_non_null(l);
- assert_null(err);
- char *out = blogc_render(l, NULL, NULL, NULL, true);
- assert_string_equal(out,
- "foo\n"
- "fuuu\n"
- "\n"
- "\n"
- "vazio\n");
- blogc_template_free_ast(l);
- free(out);
-}
-
-
-static void
-test_render_ifdef(void **state)
-{
- const char *str =
- "{% block entry %}\n"
- "{% ifdef CHUNDA %}chunda\n"
- "{% ifdef GUDA %}guda\n"
- "{% ifdef BOLA %}bola\n"
- "{% endif %}\n"
- "{% endif %}\n"
- "{% endif %}\n"
- "{% endblock %}\n";
- bc_error_t *err = NULL;
- bc_slist_t *l = blogc_template_parse(str, strlen(str), &err);
- assert_non_null(l);
- assert_null(err);
- bc_slist_t *s = create_sources(1);
- assert_non_null(s);
- char *out = blogc_render(l, s, NULL, NULL, false);
- assert_string_equal(out,
- "\n"
- "\n"
- "\n");
- blogc_template_free_ast(l);
- bc_slist_free_full(s, (bc_free_func_t) bc_trie_free);
- free(out);
-}
-
-
-static void
-test_render_ifdef2(void **state)
-{
- const char *str =
- "{% block entry %}\n"
- "{% ifdef GUDA %}guda\n"
- "{% ifdef CHUNDA %}chunda\n"
- "{% ifdef BOLA %}bola\n"
- "{% endif %}\n"
- "{% endif %}\n"
- "{% endif %}\n"
- "{% endblock %}\n";
- bc_error_t *err = NULL;
- bc_slist_t *l = blogc_template_parse(str, strlen(str), &err);
- assert_non_null(l);
- assert_null(err);
- bc_slist_t *s = create_sources(1);
- assert_non_null(s);
- char *out = blogc_render(l, s, NULL, NULL, false);
- assert_string_equal(out,
- "\n"
- "guda\n"
- "\n"
- "\n"
- "\n");
- blogc_template_free_ast(l);
- bc_slist_free_full(s, (bc_free_func_t) bc_trie_free);
- free(out);
-}
-
-
-static void
-test_render_ifdef3(void **state)
-{
- const char *str =
- "{% block entry %}\n"
- "{% ifdef GUDA %}guda\n"
- "{% ifdef BOLA %}bola\n"
- "{% ifdef CHUNDA %}chunda\n"
- "{% endif %}\n"
- "{% endif %}\n"
- "{% endif %}\n"
- "{% endblock %}\n";
- bc_error_t *err = NULL;
- bc_slist_t *l = blogc_template_parse(str, strlen(str), &err);
- assert_non_null(l);
- assert_null(err);
- bc_slist_t *s = create_sources(1);
- assert_non_null(s);
- char *out = blogc_render(l, s, NULL, NULL, false);
- assert_string_equal(out,
- "\n"
- "guda\n"
- "bola\n"
- "\n"
- "\n"
- "\n"
- "\n");
- blogc_template_free_ast(l);
- bc_slist_free_full(s, (bc_free_func_t) bc_trie_free);
- free(out);
-}
-
-
-static void
-test_render_ifdef4(void **state)
-{
- const char *str =
- "{% block entry %}\n"
- "{% ifdef GUDA %}guda\n"
- "{% ifdef BOLA %}bola\n"
- "{% ifdef CHUNDA %}chunda\n"
- "{% else %}else\n"
- "{% endif %}\n"
- "{% endif %}\n"
- "{% else %}lol\n"
- "{% endif %}\n"
- "{% endblock %}\n";
- bc_error_t *err = NULL;
- bc_slist_t *l = blogc_template_parse(str, strlen(str), &err);
- assert_non_null(l);
- assert_null(err);
- bc_slist_t *s = create_sources(1);
- assert_non_null(s);
- char *out = blogc_render(l, s, NULL, NULL, false);
- assert_string_equal(out,
- "\n"
- "guda\n"
- "bola\n"
- "else\n"
- "\n"
- "\n"
- "\n"
- "\n");
- blogc_template_free_ast(l);
- bc_slist_free_full(s, (bc_free_func_t) bc_trie_free);
- free(out);
-}
-
-
-static void
-test_render_ifdef5(void **state)
-{
- const char *str =
- "{% block entry %}\n"
- "{% ifdef GUDA %}guda\n"
- "{% ifdef CHUNDA %}chunda\n"
- "{% ifdef BOLA %}bola\n"
- "{% endif %}\n"
- "{% else %}else\n"
- "{% endif %}\n"
- "{% else %}lol\n"
- "{% endif %}\n"
- "{% endblock %}\n";
- bc_error_t *err = NULL;
- bc_slist_t *l = blogc_template_parse(str, strlen(str), &err);
- assert_non_null(l);
- assert_null(err);
- bc_slist_t *s = create_sources(1);
- assert_non_null(s);
- char *out = blogc_render(l, s, NULL, NULL, false);
- assert_string_equal(out,
- "\n"
- "guda\n"
- "else\n"
- "\n"
- "\n"
- "\n");
- blogc_template_free_ast(l);
- bc_slist_free_full(s, (bc_free_func_t) bc_trie_free);
- free(out);
-}
-
-
-static void
-test_render_ifdef6(void **state)
-{
- const char *str =
- "{% block entry %}\n"
- "{% ifdef CHUNDA %}chunda\n"
- "{% ifdef GUDA %}guda\n"
- "{% ifdef BOLA %}bola\n"
- "{% endif %}\n"
- "{% else %}else\n"
- "{% endif %}\n"
- "{% else %}lol\n"
- "{% endif %}\n"
- "{% endblock %}\n";
- bc_error_t *err = NULL;
- bc_slist_t *l = blogc_template_parse(str, strlen(str), &err);
- assert_non_null(l);
- assert_null(err);
- bc_slist_t *s = create_sources(1);
- assert_non_null(s);
- char *out = blogc_render(l, s, NULL, NULL, false);
- assert_string_equal(out,
- "\n"
- "lol\n"
- "\n"
- "\n");
- blogc_template_free_ast(l);
- bc_slist_free_full(s, (bc_free_func_t) bc_trie_free);
- free(out);
-}
-
-
-static void
-test_render_ifdef7(void **state)
-{
- const char *str =
- "{% block entry %}\n"
- "{% ifdef GUDA %}guda\n"
- "{% ifdef BOLA %}bola\n"
- "{% ifdef CHUNDA %}chunda\n"
- "{% endif %}\n"
- "{% endif %}\n"
- "{% ifdef CHUNDA %}ch\n"
- "{% else %}else\n"
- "{% endif %}\n"
- "{% endif %}\n"
- "{% endblock %}\n";
- bc_error_t *err = NULL;
- bc_slist_t *l = blogc_template_parse(str, strlen(str), &err);
- assert_non_null(l);
- assert_null(err);
- bc_slist_t *s = create_sources(1);
- assert_non_null(s);
- char *out = blogc_render(l, s, NULL, NULL, false);
- assert_string_equal(out,
- "\n"
- "guda\n"
- "bola\n"
- "\n"
- "\n"
- "else\n"
- "\n"
- "\n"
- "\n");
- blogc_template_free_ast(l);
- bc_slist_free_full(s, (bc_free_func_t) bc_trie_free);
- free(out);
-}
-
-
-static void
-test_render_ifndef(void **state)
-{
- const char *str =
- "{% block entry %}\n"
- "{% ifndef CHUNDA %}chunda\n"
- "{% ifdef GUDA %}guda\n"
- "{% ifndef BOLA %}bola\n"
- "{% else %}else\n"
- "{% endif %}\n"
- "{% endif %}\n"
- "{% endif %}\n"
- "{% endblock %}\n";
- bc_error_t *err = NULL;
- bc_slist_t *l = blogc_template_parse(str, strlen(str), &err);
- assert_non_null(l);
- assert_null(err);
- bc_slist_t *s = create_sources(1);
- assert_non_null(s);
- char *out = blogc_render(l, s, NULL, NULL, false);
- assert_string_equal(out,
- "\n"
- "chunda\n"
- "guda\n"
- "else\n"
- "\n"
- "\n"
- "\n"
- "\n");
- blogc_template_free_ast(l);
- bc_slist_free_full(s, (bc_free_func_t) bc_trie_free);
- free(out);
-}
-
-
-static void
-test_render_if_eq(void **state)
-{
- const char *str =
- "{% block entry %}\n"
- "{% if GUDA == GUDA2 %}gudabola{% endif %}\n"
- "{% if GUDA == \"zxc\" %}guda\n"
- "{% ifdef BOLA %}bola\n"
- "{% if GUDA > \"zxc\" %}asd\n"
- "{% else %}else\n"
- "{% endif %}\n"
- "{% endif %}\n"
- "{% endif %}\n"
- "{% endblock %}\n";
- bc_error_t *err = NULL;
- bc_slist_t *l = blogc_template_parse(str, strlen(str), &err);
- assert_non_null(l);
- assert_null(err);
- bc_slist_t *s = create_sources(1);
- assert_non_null(s);
- char *out = blogc_render(l, s, NULL, NULL, false);
- assert_string_equal(out,
- "\n"
- "gudabola\n"
- "guda\n"
- "bola\n"
- "else\n"
- "\n"
- "\n"
- "\n"
- "\n");
- blogc_template_free_ast(l);
- bc_slist_free_full(s, (bc_free_func_t) bc_trie_free);
- free(out);
-}
-
-
-static void
-test_render_if_neq(void **state)
-{
- const char *str =
- "{% block entry %}\n"
- "{% if GUDA != BOLA %}gudabola{% endif %}\n"
- "{% if GUDA != \"zxa\" %}guda\n"
- "{% ifdef BOLA %}bola\n"
- "{% if GUDA > \"zxc\" %}asd\n"
- "{% else %}else\n"
- "{% endif %}\n"
- "{% endif %}\n"
- "{% endif %}\n"
- "{% endblock %}\n";
- bc_error_t *err = NULL;
- bc_slist_t *l = blogc_template_parse(str, strlen(str), &err);
- assert_non_null(l);
- assert_null(err);
- bc_slist_t *s = create_sources(1);
- assert_non_null(s);
- char *out = blogc_render(l, s, NULL, NULL, false);
- assert_string_equal(out,
- "\n"
- "gudabola\n"
- "guda\n"
- "bola\n"
- "else\n"
- "\n"
- "\n"
- "\n"
- "\n");
- blogc_template_free_ast(l);
- bc_slist_free_full(s, (bc_free_func_t) bc_trie_free);
- free(out);
-}
-
-
-static void
-test_render_if_lt(void **state)
-{
- const char *str =
- "{% block entry %}\n"
- "{% if BOLA < GUDA %}gudabola{% endif %}\n"
- "{% if GUDA < \"zxe\" %}guda\n"
- "{% ifdef BOLA %}bola\n"
- "{% if GUDA > \"zxc\" %}asd\n"
- "{% else %}else\n"
- "{% endif %}\n"
- "{% endif %}\n"
- "{% endif %}\n"
- "{% endblock %}\n";
- bc_error_t *err = NULL;
- bc_slist_t *l = blogc_template_parse(str, strlen(str), &err);
- assert_non_null(l);
- assert_null(err);
- bc_slist_t *s = create_sources(1);
- assert_non_null(s);
- char *out = blogc_render(l, s, NULL, NULL, false);
- assert_string_equal(out,
- "\n"
- "gudabola\n"
- "guda\n"
- "bola\n"
- "else\n"
- "\n"
- "\n"
- "\n"
- "\n");
- blogc_template_free_ast(l);
- bc_slist_free_full(s, (bc_free_func_t) bc_trie_free);
- free(out);
-}
-
-
-static void
-test_render_if_gt(void **state)
-{
- const char *str =
- "{% block entry %}\n"
- "{% if GUDA > BOLA %}gudabola{% endif %}\n"
- "{% if GUDA > \"zxa\" %}guda\n"
- "{% ifdef BOLA %}bola\n"
- "{% if GUDA > \"zxc\" %}asd\n"
- "{% else %}else\n"
- "{% endif %}\n"
- "{% endif %}\n"
- "{% endif %}\n"
- "{% endblock %}\n";
- bc_error_t *err = NULL;
- bc_slist_t *l = blogc_template_parse(str, strlen(str), &err);
- assert_non_null(l);
- assert_null(err);
- bc_slist_t *s = create_sources(1);
- assert_non_null(s);
- char *out = blogc_render(l, s, NULL, NULL, false);
- assert_string_equal(out,
- "\n"
- "gudabola\n"
- "guda\n"
- "bola\n"
- "else\n"
- "\n"
- "\n"
- "\n"
- "\n");
- blogc_template_free_ast(l);
- bc_slist_free_full(s, (bc_free_func_t) bc_trie_free);
- free(out);
-}
-
-
-static void
-test_render_if_lt_eq(void **state)
-{
- const char *str =
- "{% block entry %}\n"
- "{% if BOLA <= GUDA %}gudabola{% endif %}\n"
- "{% if GUDA <= \"zxc\" %}guda\n"
- "{% if GUDA <= \"zxe\" %}guda2\n"
- "{% ifdef BOLA %}bola\n"
- "{% if GUDA > \"zxc\" %}asd\n"
- "{% else %}else\n"
- "{% endif %}\n"
- "{% endif %}\n"
- "{% endif %}\n"
- "{% endif %}\n"
- "{% endblock %}\n";
- bc_error_t *err = NULL;
- bc_slist_t *l = blogc_template_parse(str, strlen(str), &err);
- assert_non_null(l);
- assert_null(err);
- bc_slist_t *s = create_sources(1);
- assert_non_null(s);
- char *out = blogc_render(l, s, NULL, NULL, false);
- assert_string_equal(out,
- "\n"
- "gudabola\n"
- "guda\n"
- "guda2\n"
- "bola\n"
- "else\n"
- "\n"
- "\n"
- "\n"
- "\n"
- "\n");
- blogc_template_free_ast(l);
- bc_slist_free_full(s, (bc_free_func_t) bc_trie_free);
- free(out);
-}
-
-
-static void
-test_render_if_gt_eq(void **state)
-{
- const char *str =
- "{% block entry %}\n"
- "{% if GUDA >= BOLA %}gudabola{% endif %}\n"
- "{% if GUDA >= \"zxc\" %}guda\n"
- "{% if GUDA >= \"zxa\" %}guda2\n"
- "{% ifdef BOLA %}bola\n"
- "{% if GUDA > \"zxc\" %}asd\n"
- "{% else %}else\n"
- "{% endif %}\n"
- "{% endif %}\n"
- "{% endif %}\n"
- "{% endif %}\n"
- "{% endblock %}\n";
- bc_error_t *err = NULL;
- bc_slist_t *l = blogc_template_parse(str, strlen(str), &err);
- assert_non_null(l);
- assert_null(err);
- bc_slist_t *s = create_sources(1);
- assert_non_null(s);
- char *out = blogc_render(l, s, NULL, NULL, false);
- assert_string_equal(out,
- "\n"
- "gudabola\n"
- "guda\n"
- "guda2\n"
- "bola\n"
- "else\n"
- "\n"
- "\n"
- "\n"
- "\n"
- "\n");
- blogc_template_free_ast(l);
- bc_slist_free_full(s, (bc_free_func_t) bc_trie_free);
- free(out);
-}
-
-
-static void
-test_render_foreach(void **state)
-{
- const char *str =
- "{% block entry %}\n"
- "{% foreach TAGS %} {{ FOREACH_ITEM }} {% endforeach %}\n"
- "{% endblock %}\n";
- bc_error_t *err = NULL;
- bc_slist_t *l = blogc_template_parse(str, strlen(str), &err);
- assert_non_null(l);
- assert_null(err);
- bc_slist_t *s = create_sources(1);
- assert_non_null(s);
- char *out = blogc_render(l, s, NULL, NULL, false);
- assert_string_equal(out,
- "\n"
- " foo bar baz \n"
- "\n");
- blogc_template_free_ast(l);
- bc_slist_free_full(s, (bc_free_func_t) bc_trie_free);
- free(out);
-}
-
-
-static void
-test_render_foreach_if(void **state)
-{
- const char *str =
- "{% block entry %}\n"
- "{% foreach TAGS %} {% if FOREACH_ITEM == \"bar\" %}{{ FOREACH_ITEM }}"
- "{% endif %} {% endforeach %}\n"
- "{% endblock %}\n";
- bc_error_t *err = NULL;
- bc_slist_t *l = blogc_template_parse(str, strlen(str), &err);
- assert_non_null(l);
- assert_null(err);
- bc_slist_t *s = create_sources(1);
- assert_non_null(s);
- char *out = blogc_render(l, s, NULL, NULL, false);
- assert_string_equal(out,
- "\n"
- " bar \n"
- "\n");
- blogc_template_free_ast(l);
- bc_slist_free_full(s, (bc_free_func_t) bc_trie_free);
- free(out);
-}
-
-
-static void
-test_render_foreach_if_else(void **state)
-{
- const char *str =
- "{% block entry %}\n"
- "{% foreach TAGS %}{% if FOREACH_ITEM == \"bar\" %}yay"
- "{% else %}{{ FOREACH_ITEM }}"
- "{% endif %} {% endforeach %}\n"
- "{% endblock %}\n";
- bc_error_t *err = NULL;
- bc_slist_t *l = blogc_template_parse(str, strlen(str), &err);
- assert_non_null(l);
- assert_null(err);
- bc_slist_t *s = create_sources(1);
- assert_non_null(s);
- char *out = blogc_render(l, s, NULL, NULL, false);
- assert_string_equal(out,
- "\n"
- "foo yay baz \n"
- "\n");
- blogc_template_free_ast(l);
- bc_slist_free_full(s, (bc_free_func_t) bc_trie_free);
- free(out);
-}
-
-
-static void
-test_render_null(void **state)
-{
- assert_null(blogc_render(NULL, NULL, NULL, NULL, false));
-}
-
-
-static void
-test_render_outside_block(void **state)
-{
- const char *str =
- "{% ifdef GUDA %}bola{% endif %}\n"
- "{{ BOLA }}\n"
- "{% ifndef CHUNDA %}lol{% endif %}\n";
- bc_error_t *err = NULL;
- bc_slist_t *l = blogc_template_parse(str, strlen(str), &err);
- assert_non_null(l);
- assert_null(err);
- bc_slist_t *s = create_sources(1);
- assert_non_null(s);
- bc_trie_t *c = bc_trie_new(free);
- bc_trie_insert(c, "GUDA", bc_strdup("asd"));
- char *out = blogc_render(l, s, NULL, c, false);
- assert_string_equal(out,
- "bola\n"
- "\n"
- "lol\n");
- bc_trie_free(c);
- blogc_template_free_ast(l);
- bc_slist_free_full(s, (bc_free_func_t) bc_trie_free);
- free(out);
-}
-
-
-static void
-test_render_prefer_local_variable(void **state)
-{
- const char *str =
- "{% block entry %}\n"
- "{% ifdef LOL %}{{ LOL }}{% endif %}\n"
- "{% ifndef CHUNDA %}chunda\n"
- "{% ifdef GUDA %}{{ GUDA }}\n"
- "{% ifndef BOLA %}bola\n"
- "{% endif %}\n"
- "{% endif %}\n"
- "{% endif %}\n"
- "{% endblock %}\n";
- bc_error_t *err = NULL;
- bc_slist_t *l = blogc_template_parse(str, strlen(str), &err);
- assert_non_null(l);
- assert_null(err);
- bc_slist_t *s = create_sources(1);
- assert_non_null(s);
- bc_trie_t *c = bc_trie_new(free);
- bc_trie_insert(c, "GUDA", bc_strdup("hehe"));
- bc_trie_insert(c, "LOL", bc_strdup("hmm"));
- char *out = blogc_render(l, s, NULL, c, false);
- assert_string_equal(out,
- "\n"
- "hmm\n"
- "chunda\n"
- "zxc\n"
- "\n"
- "\n"
- "\n"
- "\n");
- bc_trie_free(c);
- blogc_template_free_ast(l);
- bc_slist_free_full(s, (bc_free_func_t) bc_trie_free);
- free(out);
-}
-
-
-static void
-test_render_respect_variable_scope(void **state)
-{
- const char *str =
- "{{ LOL }}\n"
- "{{ BOLA }}\n"
- "{% block entry %}\n"
- "{% ifdef LOL %}{{ LOL }}{% endif %}\n"
- "{% ifdef BOLA %}{{ BOLA }}{% endif %}\n"
- "{% endblock %}\n";
- bc_error_t *err = NULL;
- bc_slist_t *l = blogc_template_parse(str, strlen(str), &err);
- assert_non_null(l);
- assert_null(err);
- bc_slist_t *s = create_sources(1);
- assert_non_null(s);
- bc_trie_t *c = bc_trie_new(free);
- char *out = blogc_render(l, s, NULL, c, false);
- assert_string_equal(out,
- "\n"
- "\n"
- "\n"
- "\n"
- "asd\n"
- "\n");
- bc_trie_free(c);
- blogc_template_free_ast(l);
- bc_slist_free_full(s, (bc_free_func_t) bc_trie_free);
- free(out);
-}
-
-
-static void
-test_render_ifcount_bug(void **state)
-{
- const char *str =
- "{% block entry %}\n"
- "{% ifdef TITLE %}<h3>{{ TITLE }}</h3>{% endif %}\n"
- "{% ifdef IS_POST %}\n"
- "{% ifdef ASD %}ASD{% endif %}\n"
- "{% endif %}\n"
- "{% endblock %}\n";
- bc_error_t *err = NULL;
- bc_slist_t *l = blogc_template_parse(str, strlen(str), &err);
- assert_non_null(l);
- assert_null(err);
- bc_slist_t *s = NULL;
- s = bc_slist_append(s, bc_trie_new(free));
- bc_trie_insert(s->data, "TITLE", bc_strdup("bola"));
- bc_trie_t *c = bc_trie_new(free);
- char *out = blogc_render(l, s, NULL, c, false);
- assert_string_equal(out,
- "\n"
- "<h3>bola</h3>\n"
- "\n"
- "\n");
- bc_trie_free(c);
- blogc_template_free_ast(l);
- bc_slist_free_full(s, (bc_free_func_t) bc_trie_free);
- free(out);
-}
-
-
-static void
-test_get_variable(void **state)
-{
- bc_trie_t *g = bc_trie_new(free);
- bc_trie_insert(g, "NAME", bc_strdup("bola"));
- bc_trie_insert(g, "TITLE", bc_strdup("bola2"));
- bc_trie_t *l = bc_trie_new(free);
- bc_trie_insert(l, "NAME", bc_strdup("chunda"));
- bc_trie_insert(l, "TITLE", bc_strdup("chunda2"));
- assert_string_equal(blogc_get_variable("NAME", g, l), "chunda");
- assert_string_equal(blogc_get_variable("TITLE", g, l), "chunda2");
- assert_null(blogc_get_variable("BOLA", g, l));
- bc_trie_free(g);
- bc_trie_free(l);
-}
-
-
-static void
-test_get_variable_only_local(void **state)
-{
- bc_trie_t *g = NULL;
- bc_trie_t *l = bc_trie_new(free);
- bc_trie_insert(l, "NAME", bc_strdup("chunda"));
- bc_trie_insert(l, "TITLE", bc_strdup("chunda2"));
- assert_string_equal(blogc_get_variable("NAME", g, l), "chunda");
- assert_string_equal(blogc_get_variable("TITLE", g, l), "chunda2");
- assert_null(blogc_get_variable("BOLA", g, l));
- bc_trie_free(l);
-}
-
-
-static void
-test_get_variable_only_global(void **state)
-{
- bc_trie_t *g = bc_trie_new(free);
- bc_trie_insert(g, "NAME", bc_strdup("bola"));
- bc_trie_insert(g, "TITLE", bc_strdup("bola2"));
- bc_trie_t *l = NULL;
- assert_string_equal(blogc_get_variable("NAME", g, l), "bola");
- assert_string_equal(blogc_get_variable("TITLE", g, l), "bola2");
- assert_null(blogc_get_variable("BOLA", g, l));
- bc_trie_free(g);
-}
-
-
-static void
-test_format_date(void **state)
-{
- bc_trie_t *g = bc_trie_new(free);
- bc_trie_insert(g, "DATE_FORMAT", bc_strdup("%H -- %M"));
- bc_trie_t *l = bc_trie_new(free);
- bc_trie_insert(l, "DATE_FORMAT", bc_strdup("%R"));
- char *date = blogc_format_date("2015-01-02 03:04:05", g, l);
- assert_string_equal(date, "03:04");
- free(date);
- bc_trie_free(g);
- bc_trie_free(l);
-}
-
-
-static void
-test_format_date_with_global_format(void **state)
-{
- bc_trie_t *g = bc_trie_new(free);
- bc_trie_insert(g, "DATE_FORMAT", bc_strdup("%H -- %M"));
- bc_trie_t *l = bc_trie_new(free);
- char *date = blogc_format_date("2015-01-02 03:04:05", g, l);
- assert_string_equal(date, "03 -- 04");
- free(date);
- bc_trie_free(g);
- bc_trie_free(l);
-}
-
-
-static void
-test_format_date_without_format(void **state)
-{
- bc_trie_t *g = bc_trie_new(free);
- bc_trie_t *l = bc_trie_new(free);
- char *date = blogc_format_date("2015-01-02 03:04:05", g, l);
- assert_string_equal(date, "2015-01-02 03:04:05");
- free(date);
- bc_trie_free(g);
- bc_trie_free(l);
-}
-
-
-static void
-test_format_date_without_date(void **state)
-{
- bc_trie_t *g = bc_trie_new(free);
- bc_trie_t *l = bc_trie_new(free);
- char *date = blogc_format_date(NULL, g, l);
- assert_null(date);
- free(date);
- bc_trie_free(g);
- bc_trie_free(l);
-}
-
-
-static void
-test_format_variable(void **state)
-{
- // FIXME: test warnings
- bc_trie_t *g = bc_trie_new(free);
- bc_trie_insert(g, "NAME", bc_strdup("bola"));
- bc_trie_insert(g, "TITLE", bc_strdup("bola2"));
- bc_trie_t *l = bc_trie_new(free);
- bc_trie_insert(l, "NAME", bc_strdup("chunda"));
- bc_trie_insert(l, "TITLE", bc_strdup("chunda2"));
- bc_trie_insert(l, "SIZE", bc_strdup("1234567890987654321"));
- char *tmp = blogc_format_variable("NAME", g, l, NULL, NULL);
- assert_string_equal(tmp, "chunda");
- free(tmp);
- tmp = blogc_format_variable("TITLE", g, l, NULL, NULL);
- assert_string_equal(tmp, "chunda2");
- free(tmp);
- tmp = blogc_format_variable("TITLE_2", g, l, NULL, NULL);
- assert_string_equal(tmp, "ch");
- free(tmp);
- tmp = blogc_format_variable("SIZE_12", g, l, NULL, NULL);
- assert_string_equal(tmp, "123456789098");
- free(tmp);
- tmp = blogc_format_variable("SIZE_200", g, l, NULL, NULL);
- assert_string_equal(tmp, "1234567890987654321");
- free(tmp);
- assert_null(blogc_format_variable("SIZE_", g, l, NULL, NULL));
- assert_null(blogc_format_variable("BOLA", g, l, NULL, NULL));
- bc_trie_free(g);
- bc_trie_free(l);
-}
-
-
-static void
-test_format_variable_with_date(void **state)
-{
- bc_trie_t *g = bc_trie_new(free);
- bc_trie_insert(g, "DATE", bc_strdup("2010-11-12 13:14:15"));
- bc_trie_insert(g, "DATE_FORMAT", bc_strdup("%R"));
- bc_trie_t *l = bc_trie_new(free);
- bc_trie_insert(l, "DATE", bc_strdup("2011-12-13 14:15:16"));
- char *tmp = blogc_format_variable("DATE_FORMATTED", g, l, NULL, NULL);
- assert_string_equal(tmp, "14:15");
- free(tmp);
- tmp = blogc_format_variable("DATE_FORMATTED_3", g, l, NULL, NULL);
- assert_string_equal(tmp, "14:");
- free(tmp);
- tmp = blogc_format_variable("DATE_FORMATTED_10", g, l, NULL, NULL);
- assert_string_equal(tmp, "14:15");
- free(tmp);
- bc_trie_free(g);
- bc_trie_free(l);
-}
-
-
-static void
-test_format_variable_foreach(void **state)
-{
- bc_slist_t *l = NULL;
- l = bc_slist_append(l, bc_strdup("asd"));
- l = bc_slist_append(l, bc_strdup("qwe"));
- l = bc_slist_append(l, bc_strdup("zxcvbn"));
- char *tmp = blogc_format_variable("FOREACH_ITEM", NULL, NULL, NULL, l->next);
- assert_string_equal(tmp, "qwe");
- free(tmp);
- tmp = blogc_format_variable("FOREACH_ITEM_4", NULL, NULL, NULL, l->next->next);
- assert_string_equal(tmp, "zxcv");
- free(tmp);
- tmp = blogc_format_variable("FOREACH_ITEM_10", NULL, NULL, NULL, l->next->next);
- assert_string_equal(tmp, "zxcvbn");
- free(tmp);
- bc_slist_free_full(l, free);
-}
-
-
-static void
-test_format_variable_foreach_value(void **state)
-{
- bc_trie_t *gl = bc_trie_new(free);
- bc_trie_insert(gl, "FOO_BAR__QWE", bc_strdup("bnm"));
- bc_trie_t *loc = bc_trie_new(free);
- bc_trie_insert(loc, "BAR__ZXCVBN", bc_strdup("dfg"));
- bc_trie_insert(loc, "HUE__ZXCVBN", bc_strdup("xcv"));
- bc_slist_t *l = NULL;
- l = bc_slist_append(l, bc_strdup("asd"));
- l = bc_slist_append(l, bc_strdup("qwe"));
- l = bc_slist_append(l, bc_strdup("zxcvbn"));
- char *tmp = blogc_format_variable("FOREACH_VALUE", gl, loc, "foo-bar", l->next);
- assert_string_equal(tmp, "bnm");
- free(tmp);
- tmp = blogc_format_variable("FOREACH_VALUE_2", gl, loc, "bar", l->next->next);
- assert_string_equal(tmp, "df");
- free(tmp);
- tmp = blogc_format_variable("FOREACH_VALUE_4", gl, loc, "hue", l->next->next);
- assert_string_equal(tmp, "xcv");
- free(tmp);
- bc_trie_free(gl);
- bc_trie_free(loc);
- bc_slist_free_full(l, free);
-}
-
-
-static void
-test_format_variable_foreach_empty(void **state)
-{
- assert_null(blogc_format_variable("FOREACH_ITEM", NULL, NULL, NULL, NULL));
- assert_null(blogc_format_variable("FOREACH_ITEM_4", NULL, NULL, NULL, NULL));
-}
-
-
-static void
-test_split_list_variable(void **state)
-{
- bc_trie_t *g = bc_trie_new(free);
- bc_trie_insert(g, "TAGS", bc_strdup("asd lol hehe"));
- bc_trie_t *l = bc_trie_new(free);
- bc_trie_insert(l, "TAGS", bc_strdup("asd lol XD"));
- bc_slist_t *tmp = blogc_split_list_variable("TAGS", g, l);
- assert_string_equal(tmp->data, "asd");
- assert_string_equal(tmp->next->data, "lol");
- assert_string_equal(tmp->next->next->data, "XD");
- bc_slist_free_full(tmp, free);
- bc_trie_free(g);
- bc_trie_free(l);
-}
-
-
-static void
-test_split_list_variable_not_found(void **state)
-{
- bc_trie_t *g = bc_trie_new(free);
- bc_trie_insert(g, "TAGS", bc_strdup("asd lol hehe"));
- bc_trie_t *l = bc_trie_new(free);
- bc_trie_insert(l, "TAGS", bc_strdup("asd lol XD"));
- bc_slist_t *tmp = blogc_split_list_variable("TAG", g, l);
- assert_null(tmp);
- bc_trie_free(g);
- bc_trie_free(l);
-}
-
-
-int
-main(void)
-{
- const struct CMUnitTest tests[] = {
- cmocka_unit_test(test_render_entry),
- cmocka_unit_test(test_render_listing),
- cmocka_unit_test(test_render_listing_entry),
- cmocka_unit_test(test_render_listing_entry2),
- cmocka_unit_test(test_render_listing_entry3),
- cmocka_unit_test(test_render_listing_entry4),
- cmocka_unit_test(test_render_listing_empty),
- cmocka_unit_test(test_render_ifdef),
- cmocka_unit_test(test_render_ifdef2),
- cmocka_unit_test(test_render_ifdef3),
- cmocka_unit_test(test_render_ifdef4),
- cmocka_unit_test(test_render_ifdef5),
- cmocka_unit_test(test_render_ifdef6),
- cmocka_unit_test(test_render_ifdef7),
- cmocka_unit_test(test_render_ifndef),
- cmocka_unit_test(test_render_if_eq),
- cmocka_unit_test(test_render_if_neq),
- cmocka_unit_test(test_render_if_lt),
- cmocka_unit_test(test_render_if_gt),
- cmocka_unit_test(test_render_if_lt_eq),
- cmocka_unit_test(test_render_if_gt_eq),
- cmocka_unit_test(test_render_foreach),
- cmocka_unit_test(test_render_foreach_if),
- cmocka_unit_test(test_render_foreach_if_else),
- cmocka_unit_test(test_render_null),
- cmocka_unit_test(test_render_outside_block),
- cmocka_unit_test(test_render_prefer_local_variable),
- cmocka_unit_test(test_render_respect_variable_scope),
- cmocka_unit_test(test_render_ifcount_bug),
- cmocka_unit_test(test_get_variable),
- cmocka_unit_test(test_get_variable_only_local),
- cmocka_unit_test(test_get_variable_only_global),
- cmocka_unit_test(test_format_date),
- cmocka_unit_test(test_format_date_with_global_format),
- cmocka_unit_test(test_format_date_without_format),
- cmocka_unit_test(test_format_date_without_date),
- cmocka_unit_test(test_format_variable),
- cmocka_unit_test(test_format_variable_with_date),
- cmocka_unit_test(test_format_variable_foreach),
- cmocka_unit_test(test_format_variable_foreach_value),
- cmocka_unit_test(test_format_variable_foreach_empty),
- cmocka_unit_test(test_split_list_variable),
- cmocka_unit_test(test_split_list_variable_not_found),
- };
- return cmocka_run_group_tests(tests, NULL, NULL);
-}
diff --git a/tests/blogc/check_rusage.c b/tests/blogc/check_rusage.c
deleted file mode 100644
index c332991..0000000
--- a/tests/blogc/check_rusage.c
+++ /dev/null
@@ -1,127 +0,0 @@
-/*
- * blogc: A blog compiler.
- * Copyright (C) 2014-2019 Rafael G. Martins <rafael@rafaelmartins.eng.br>
- *
- * This program can be distributed under the terms of the BSD License.
- * See the file LICENSE.
- */
-
-#include <stdarg.h>
-#include <stddef.h>
-#include <setjmp.h>
-#include <cmocka.h>
-#include <stdlib.h>
-#include <string.h>
-#include <stdio.h>
-#include <sys/time.h>
-#include <sys/resource.h>
-#include "../../src/common/utils.h"
-#include "../../src/blogc/rusage.h"
-
-
-int
-__wrap_getrusage(int who, struct rusage *usage)
-{
- assert_int_equal(who, RUSAGE_SELF);
- int rv = mock_type(int);
- if (rv == 0) {
- usage->ru_utime.tv_sec = 1;
- usage->ru_utime.tv_usec = 2;
- usage->ru_stime.tv_sec = 3;
- usage->ru_stime.tv_usec = 4;
- usage->ru_maxrss = 10250;
- }
- return rv;
-}
-
-
-static void
-test_rusage_get(void **state)
-{
- will_return(__wrap_getrusage, -1);
- assert_null(blogc_rusage_get());
-
- will_return(__wrap_getrusage, 0);
- blogc_rusage_t *r = blogc_rusage_get();
- assert_non_null(r);
- assert_int_equal(r->cpu_time, 4000006);
- assert_int_equal(r->memory, 10250);
- free(r);
-}
-
-
-static void
-test_rusage_format_cpu_time(void **state)
-{
- char *f = blogc_rusage_format_cpu_time(0);
- assert_string_equal(f, "0us");
- free(f);
-
- f = blogc_rusage_format_cpu_time(123);
- assert_string_equal(f, "123us");
- free(f);
-
- f = blogc_rusage_format_cpu_time(1234);
- assert_string_equal(f, "1.234ms");
- free(f);
-
- f = blogc_rusage_format_cpu_time(3000);
- assert_string_equal(f, "3ms");
- free(f);
-
- f = blogc_rusage_format_cpu_time(12345678);
- assert_string_equal(f, "12.346s");
- free(f);
-}
-
-
-static void
-test_rusage_format_memory(void **state)
-{
- char *f = blogc_rusage_format_memory(0);
- assert_string_equal(f, "0KB");
- free(f);
-
- f = blogc_rusage_format_memory(123);
- assert_string_equal(f, "123KB");
- free(f);
-
- f = blogc_rusage_format_memory(1234);
- assert_string_equal(f, "1.205MB");
- free(f);
-
- f = blogc_rusage_format_memory(12345678);
- assert_string_equal(f, "11.774GB");
- free(f);
-}
-
-
-static void
-test_rusage_inject(void **state)
-{
- bc_trie_t *t = bc_trie_new(free);
-
- will_return(__wrap_getrusage, -1);
- blogc_rusage_inject(t);
- assert_int_equal(bc_trie_size(t), 0);
-
- will_return(__wrap_getrusage, 0);
- blogc_rusage_inject(t);
- assert_int_equal(bc_trie_size(t), 2);
- assert_string_equal(bc_trie_lookup(t, "BLOGC_RUSAGE_CPU_TIME"), "4.000s");
- assert_string_equal(bc_trie_lookup(t, "BLOGC_RUSAGE_MEMORY"), "10.010MB");
- bc_trie_free(t);
-}
-
-
-int
-main(void)
-{
- const struct CMUnitTest tests[] = {
- cmocka_unit_test(test_rusage_get),
- cmocka_unit_test(test_rusage_format_cpu_time),
- cmocka_unit_test(test_rusage_format_memory),
- cmocka_unit_test(test_rusage_inject),
- };
- return cmocka_run_group_tests(tests, NULL, NULL);
-}
diff --git a/tests/blogc/check_source_parser.c b/tests/blogc/check_source_parser.c
deleted file mode 100644
index 822133c..0000000
--- a/tests/blogc/check_source_parser.c
+++ /dev/null
@@ -1,761 +0,0 @@
-/*
- * blogc: A blog compiler.
- * Copyright (C) 2014-2020 Rafael G. Martins <rafael@rafaelmartins.eng.br>
- *
- * This program can be distributed under the terms of the BSD License.
- * See the file LICENSE.
- */
-
-#include <stdarg.h>
-#include <stddef.h>
-#include <setjmp.h>
-#include <cmocka.h>
-#include <string.h>
-#include "../../src/common/error.h"
-#include "../../src/common/utils.h"
-#include "../../src/blogc/source-parser.h"
-
-
-static void
-test_source_parse(void **state)
-{
- const char *a =
- "VAR1: asd asd\n"
- "VAR2: 123chunda\n"
- "----------\n"
- "# This is a test\n"
- "\n"
- "bola\n";
- bc_error_t *err = NULL;
- bc_trie_t *source = blogc_source_parse(a, strlen(a), 0, &err);
- assert_null(err);
- assert_non_null(source);
- assert_int_equal(bc_trie_size(source), 7);
- assert_string_equal(bc_trie_lookup(source, "VAR1"), "asd asd");
- assert_string_equal(bc_trie_lookup(source, "VAR2"), "123chunda");
- assert_string_equal(bc_trie_lookup(source, "EXCERPT"),
- "<h1 id=\"this-is-a-test\">This is a test</h1>\n"
- "<p>bola</p>\n");
- assert_string_equal(bc_trie_lookup(source, "CONTENT"),
- "<h1 id=\"this-is-a-test\">This is a test</h1>\n"
- "<p>bola</p>\n");
- assert_string_equal(bc_trie_lookup(source, "RAW_CONTENT"),
- "# This is a test\n"
- "\n"
- "bola\n");
- assert_string_equal(bc_trie_lookup(source, "FIRST_HEADER"), "This is a test");
- assert_string_equal(bc_trie_lookup(source, "DESCRIPTION"), "bola");
- assert_null(bc_trie_lookup(source, "TOCTREE"));
- bc_trie_free(source);
-}
-
-
-static void
-test_source_parse_crlf(void **state)
-{
- const char *a =
- "VAR1: asd asd\r\n"
- "VAR2: 123chunda\r\n"
- "----------\r\n"
- "# This is a test\r\n"
- "\r\n"
- "bola\r\n";
- bc_error_t *err = NULL;
- bc_trie_t *source = blogc_source_parse(a, strlen(a), 1, &err);
- assert_null(err);
- assert_non_null(source);
- assert_int_equal(bc_trie_size(source), 8);
- assert_string_equal(bc_trie_lookup(source, "VAR1"), "asd asd");
- assert_string_equal(bc_trie_lookup(source, "VAR2"), "123chunda");
- assert_string_equal(bc_trie_lookup(source, "EXCERPT"),
- "<h1 id=\"this-is-a-test\">This is a test</h1>\r\n"
- "<p>bola</p>\r\n");
- assert_string_equal(bc_trie_lookup(source, "CONTENT"),
- "<h1 id=\"this-is-a-test\">This is a test</h1>\r\n"
- "<p>bola</p>\r\n");
- assert_string_equal(bc_trie_lookup(source, "RAW_CONTENT"),
- "# This is a test\r\n"
- "\r\n"
- "bola\r\n");
- assert_string_equal(bc_trie_lookup(source, "FIRST_HEADER"), "This is a test");
- assert_string_equal(bc_trie_lookup(source, "DESCRIPTION"), "bola");
- assert_string_equal(bc_trie_lookup(source, "TOCTREE"),
- "<ul>\r\n"
- " <li><a href=\"#this-is-a-test\">This is a test</a></li>\r\n"
- "</ul>\r\n");
- bc_trie_free(source);
-}
-
-
-static void
-test_source_parse_with_spaces(void **state)
-{
- const char *a =
- "\n \n"
- "VAR1: chunda \t \n"
- "\n\n"
- "BOLA: guda\n"
- "----------\n"
- "# This is a test\n"
- "\n"
- "bola\n";
- bc_error_t *err = NULL;
- bc_trie_t *source = blogc_source_parse(a, strlen(a), -1, &err);
- assert_null(err);
- assert_non_null(source);
- assert_int_equal(bc_trie_size(source), 8);
- assert_string_equal(bc_trie_lookup(source, "VAR1"), "chunda");
- assert_string_equal(bc_trie_lookup(source, "BOLA"), "guda");
- assert_string_equal(bc_trie_lookup(source, "EXCERPT"),
- "<h1 id=\"this-is-a-test\">This is a test</h1>\n"
- "<p>bola</p>\n");
- assert_string_equal(bc_trie_lookup(source, "CONTENT"),
- "<h1 id=\"this-is-a-test\">This is a test</h1>\n"
- "<p>bola</p>\n");
- assert_string_equal(bc_trie_lookup(source, "RAW_CONTENT"),
- "# This is a test\n"
- "\n"
- "bola\n");
- assert_string_equal(bc_trie_lookup(source, "FIRST_HEADER"), "This is a test");
- assert_string_equal(bc_trie_lookup(source, "DESCRIPTION"), "bola");
- assert_string_equal(bc_trie_lookup(source, "TOCTREE"),
- "<ul>\n"
- " <li><a href=\"#this-is-a-test\">This is a test</a></li>\n"
- "</ul>\n");
- bc_trie_free(source);
-}
-
-
-static void
-test_source_parse_with_excerpt(void **state)
-{
- const char *a =
- "VAR1: asd asd\n"
- "VAR2: 123chunda\n"
- "----------\n"
- "# This is a test\n"
- "\n"
- "bola\n"
- "\n"
- "...\n"
- "\n"
- "guda\n"
- "yay";
- bc_error_t *err = NULL;
- bc_trie_t *source = blogc_source_parse(a, strlen(a), 0, &err);
- assert_null(err);
- assert_non_null(source);
- assert_int_equal(bc_trie_size(source), 7);
- assert_string_equal(bc_trie_lookup(source, "VAR1"), "asd asd");
- assert_string_equal(bc_trie_lookup(source, "VAR2"), "123chunda");
- assert_string_equal(bc_trie_lookup(source, "EXCERPT"),
- "<h1 id=\"this-is-a-test\">This is a test</h1>\n"
- "<p>bola</p>\n");
- assert_string_equal(bc_trie_lookup(source, "CONTENT"),
- "<h1 id=\"this-is-a-test\">This is a test</h1>\n"
- "<p>bola</p>\n"
- "<p>guda\n"
- "yay</p>\n");
- assert_string_equal(bc_trie_lookup(source, "RAW_CONTENT"),
- "# This is a test\n"
- "\n"
- "bola\n"
- "\n"
- "...\n"
- "\n"
- "guda\n"
- "yay");
- assert_string_equal(bc_trie_lookup(source, "FIRST_HEADER"), "This is a test");
- assert_string_equal(bc_trie_lookup(source, "DESCRIPTION"), "bola");
- assert_null(bc_trie_lookup(source, "TOCTREE"));
- bc_trie_free(source);
-}
-
-
-static void
-test_source_parse_with_first_header(void **state)
-{
- const char *a =
- "VAR1: asd asd\n"
- "VAR2: 123chunda\n"
- "FIRST_HEADER: THIS IS CHUNDA!\n"
- "----------\n"
- "# This is a test\n"
- "\n"
- "bola\n";
- bc_error_t *err = NULL;
- bc_trie_t *source = blogc_source_parse(a, strlen(a), 0, &err);
- assert_null(err);
- assert_non_null(source);
- assert_int_equal(bc_trie_size(source), 7);
- assert_string_equal(bc_trie_lookup(source, "VAR1"), "asd asd");
- assert_string_equal(bc_trie_lookup(source, "VAR2"), "123chunda");
- assert_string_equal(bc_trie_lookup(source, "EXCERPT"),
- "<h1 id=\"this-is-a-test\">This is a test</h1>\n"
- "<p>bola</p>\n");
- assert_string_equal(bc_trie_lookup(source, "CONTENT"),
- "<h1 id=\"this-is-a-test\">This is a test</h1>\n"
- "<p>bola</p>\n");
- assert_string_equal(bc_trie_lookup(source, "RAW_CONTENT"),
- "# This is a test\n"
- "\n"
- "bola\n");
- assert_string_equal(bc_trie_lookup(source, "FIRST_HEADER"), "THIS IS CHUNDA!");
- assert_string_equal(bc_trie_lookup(source, "DESCRIPTION"), "bola");
- assert_null(bc_trie_lookup(source, "TOCTREE"));
- bc_trie_free(source);
-}
-
-
-static void
-test_source_parse_with_description(void **state)
-{
- const char *a =
- "VAR1: asd asd\n"
- "VAR2: 123chunda\n"
- "DESCRIPTION: huehuehuebrbr\n"
- "----------\n"
- "# This is a test\n"
- "\n"
- "bola\n";
- bc_error_t *err = NULL;
- bc_trie_t *source = blogc_source_parse(a, strlen(a), 0, &err);
- assert_null(err);
- assert_non_null(source);
- assert_int_equal(bc_trie_size(source), 7);
- assert_string_equal(bc_trie_lookup(source, "VAR1"), "asd asd");
- assert_string_equal(bc_trie_lookup(source, "VAR2"), "123chunda");
- assert_string_equal(bc_trie_lookup(source, "EXCERPT"),
- "<h1 id=\"this-is-a-test\">This is a test</h1>\n"
- "<p>bola</p>\n");
- assert_string_equal(bc_trie_lookup(source, "CONTENT"),
- "<h1 id=\"this-is-a-test\">This is a test</h1>\n"
- "<p>bola</p>\n");
- assert_string_equal(bc_trie_lookup(source, "RAW_CONTENT"),
- "# This is a test\n"
- "\n"
- "bola\n");
- assert_string_equal(bc_trie_lookup(source, "FIRST_HEADER"), "This is a test");
- assert_string_equal(bc_trie_lookup(source, "DESCRIPTION"), "huehuehuebrbr");
- assert_null(bc_trie_lookup(source, "TOCTREE"));
- bc_trie_free(source);
-}
-
-
-static void
-test_source_parse_with_toctree(void **state)
-{
- const char *a =
- "VAR1: asd asd\n"
- "VAR2: 123chunda\n"
- "----------\n"
- "### asd\n"
- "### qwe\n"
- "## zxc\n"
- "### rty\n"
- "#### bnm\n"
- "### asd\n";
- bc_error_t *err = NULL;
- bc_trie_t *source = blogc_source_parse(a, strlen(a), -1, &err);
- assert_null(err);
- assert_non_null(source);
- assert_int_equal(bc_trie_size(source), 7);
- assert_string_equal(bc_trie_lookup(source, "VAR1"), "asd asd");
- assert_string_equal(bc_trie_lookup(source, "VAR2"), "123chunda");
- assert_string_equal(bc_trie_lookup(source, "EXCERPT"),
- "<h3 id=\"asd\">asd</h3>\n"
- "<h3 id=\"qwe\">qwe</h3>\n"
- "<h2 id=\"zxc\">zxc</h2>\n"
- "<h3 id=\"rty\">rty</h3>\n"
- "<h4 id=\"bnm\">bnm</h4>\n"
- "<h3 id=\"asd\">asd</h3>\n");
- assert_string_equal(bc_trie_lookup(source, "CONTENT"),
- "<h3 id=\"asd\">asd</h3>\n"
- "<h3 id=\"qwe\">qwe</h3>\n"
- "<h2 id=\"zxc\">zxc</h2>\n"
- "<h3 id=\"rty\">rty</h3>\n"
- "<h4 id=\"bnm\">bnm</h4>\n"
- "<h3 id=\"asd\">asd</h3>\n");
- assert_string_equal(bc_trie_lookup(source, "RAW_CONTENT"),
- "### asd\n"
- "### qwe\n"
- "## zxc\n"
- "### rty\n"
- "#### bnm\n"
- "### asd\n");
- assert_string_equal(bc_trie_lookup(source, "FIRST_HEADER"), "asd");
- assert_string_equal(bc_trie_lookup(source, "TOCTREE"),
- "<ul>\n"
- " <ul>\n"
- " <li><a href=\"#asd\">asd</a></li>\n"
- " <li><a href=\"#qwe\">qwe</a></li>\n"
- " </ul>\n"
- " <li><a href=\"#zxc\">zxc</a></li>\n"
- " <ul>\n"
- " <li><a href=\"#rty\">rty</a></li>\n"
- " <ul>\n"
- " <li><a href=\"#bnm\">bnm</a></li>\n"
- " </ul>\n"
- " <li><a href=\"#asd\">asd</a></li>\n"
- " </ul>\n"
- "</ul>\n");
- bc_trie_free(source);
-}
-
-
-static void
-test_source_parse_with_toctree_noheader(void **state)
-{
- const char *a =
- "VAR1: asd asd\n"
- "VAR2: 123chunda\n"
- "----------\n"
- "asd\n";
- bc_error_t *err = NULL;
- bc_trie_t *source = blogc_source_parse(a, strlen(a), -1, &err);
- assert_null(err);
- assert_non_null(source);
- assert_int_equal(bc_trie_size(source), 6);
- assert_string_equal(bc_trie_lookup(source, "VAR1"), "asd asd");
- assert_string_equal(bc_trie_lookup(source, "VAR2"), "123chunda");
- assert_string_equal(bc_trie_lookup(source, "EXCERPT"),
- "<p>asd</p>\n");
- assert_string_equal(bc_trie_lookup(source, "CONTENT"),
- "<p>asd</p>\n");
- assert_string_equal(bc_trie_lookup(source, "RAW_CONTENT"),
- "asd\n");
- assert_null(bc_trie_lookup(source, "FIRST_HEADER"));
- assert_null(bc_trie_lookup(source, "TOCTREE"));
- bc_trie_free(source);
-}
-
-
-static void
-test_source_parse_with_toctree_maxdepth1(void **state)
-{
- const char *a =
- "VAR1: asd asd\n"
- "VAR2: 123chunda\n"
- "----------\n"
- "### asd\n"
- "### qwe\n"
- "## zxc\n"
- "### rty\n"
- "#### bnm\n"
- "### asd\n";
- bc_error_t *err = NULL;
- bc_trie_t *source = blogc_source_parse(a, strlen(a), 1, &err);
- assert_null(err);
- assert_non_null(source);
- assert_int_equal(bc_trie_size(source), 7);
- assert_string_equal(bc_trie_lookup(source, "VAR1"), "asd asd");
- assert_string_equal(bc_trie_lookup(source, "VAR2"), "123chunda");
- assert_string_equal(bc_trie_lookup(source, "EXCERPT"),
- "<h3 id=\"asd\">asd</h3>\n"
- "<h3 id=\"qwe\">qwe</h3>\n"
- "<h2 id=\"zxc\">zxc</h2>\n"
- "<h3 id=\"rty\">rty</h3>\n"
- "<h4 id=\"bnm\">bnm</h4>\n"
- "<h3 id=\"asd\">asd</h3>\n");
- assert_string_equal(bc_trie_lookup(source, "CONTENT"),
- "<h3 id=\"asd\">asd</h3>\n"
- "<h3 id=\"qwe\">qwe</h3>\n"
- "<h2 id=\"zxc\">zxc</h2>\n"
- "<h3 id=\"rty\">rty</h3>\n"
- "<h4 id=\"bnm\">bnm</h4>\n"
- "<h3 id=\"asd\">asd</h3>\n");
- assert_string_equal(bc_trie_lookup(source, "RAW_CONTENT"),
- "### asd\n"
- "### qwe\n"
- "## zxc\n"
- "### rty\n"
- "#### bnm\n"
- "### asd\n");
- assert_string_equal(bc_trie_lookup(source, "FIRST_HEADER"), "asd");
- assert_string_equal(bc_trie_lookup(source, "TOCTREE"),
- "<ul>\n"
- " <li><a href=\"#zxc\">zxc</a></li>\n"
- "</ul>\n");
- bc_trie_free(source);
-}
-
-
-static void
-test_source_parse_with_toctree_maxdepth_invalid(void **state)
-{
- const char *a =
- "VAR1: asd asd\n"
- "VAR2: 123chunda\n"
- "TOCTREE_MAXDEPTH: bola\n"
- "----------\n"
- "### asd\n"
- "### qwe\n"
- "## zxc\n"
- "### rty\n"
- "#### bnm\n"
- "### asd\n";
- bc_error_t *err = NULL;
- bc_trie_t *source = blogc_source_parse(a, strlen(a), 1, &err);
- assert_non_null(err);
- assert_null(source);
- assert_int_equal(err->type, BLOGC_ERROR_SOURCE_PARSER);
- assert_string_equal(err->msg,
- "Invalid value for 'TOCTREE_MAXDEPTH' variable: bola.\n"
- "Error occurred near line 10, position 8: ### asd");
- bc_error_free(err);
- bc_trie_free(source);
-}
-
-
-static void
-test_source_parse_config_empty(void **state)
-{
- const char *a = "";
- bc_error_t *err = NULL;
- bc_trie_t *source = blogc_source_parse(a, strlen(a), 0, &err);
- assert_null(source);
- assert_non_null(err);
- assert_int_equal(err->type, BLOGC_ERROR_SOURCE_PARSER);
- assert_string_equal(err->msg, "Your source file is empty.");
- bc_error_free(err);
- bc_trie_free(source);
-}
-
-
-static void
-test_source_parse_config_invalid_key(void **state)
-{
- const char *a = "bola: guda";
- bc_error_t *err = NULL;
- bc_trie_t *source = blogc_source_parse(a, strlen(a), 0, &err);
- assert_non_null(err);
- assert_int_equal(err->type, BLOGC_ERROR_SOURCE_PARSER);
- assert_string_equal(err->msg,
- "Can't find a configuration key or the content separator.\n"
- "Error occurred near line 1, position 1: bola: guda");
- bc_error_free(err);
- bc_trie_free(source);
-}
-
-
-static void
-test_source_parse_config_no_key(void **state)
-{
- const char *a = "BOLa";
- bc_error_t *err = NULL;
- bc_trie_t *source = blogc_source_parse(a, strlen(a), 0, &err);
- assert_non_null(err);
- assert_int_equal(err->type, BLOGC_ERROR_SOURCE_PARSER);
- assert_string_equal(err->msg,
- "Invalid configuration key.\n"
- "Error occurred near line 1, position 4: BOLa");
- bc_error_free(err);
- bc_trie_free(source);
-}
-
-
-static void
-test_source_parse_config_no_key2(void **state)
-{
- const char *a = "BOLA";
- bc_error_t *err = NULL;
- bc_trie_t *source = blogc_source_parse(a, strlen(a), 0, &err);
- assert_non_null(err);
- assert_int_equal(err->type, BLOGC_ERROR_SOURCE_PARSER);
- assert_string_equal(err->msg,
- "Your last configuration key is missing ':' and the value\n"
- "Error occurred near line 1, position 5: BOLA");
- bc_error_free(err);
- bc_trie_free(source);
-}
-
-
-static void
-test_source_parse_config_no_value(void **state)
-{
- // this is a special case, not an error
- const char *a = "BOLA:\r\n";
- bc_error_t *err = NULL;
- bc_trie_t *source = blogc_source_parse(a, strlen(a), 0, &err);
- assert_non_null(source);
- assert_null(err);
- assert_string_equal(bc_trie_lookup(source, "BOLA"), "");
- assert_null(bc_trie_lookup(source, "TOCTREE"));
- bc_trie_free(source);
-}
-
-
-static void
-test_source_parse_config_no_value2(void **state)
-{
- const char *a = "BOLA:";
- bc_error_t *err = NULL;
- bc_trie_t *source = blogc_source_parse(a, strlen(a), 0, &err);
- assert_null(source);
- assert_non_null(err);
- assert_int_equal(err->type, BLOGC_ERROR_SOURCE_PARSER);
- assert_string_equal(err->msg,
- "Configuration value not provided for 'BOLA'.\n"
- "Error occurred near line 1, position 6: BOLA:");
- bc_error_free(err);
- bc_trie_free(source);
-}
-
-
-static void
-test_source_parse_config_reserved_name(void **state)
-{
- const char *a = "FILENAME: asd\r\n";
- bc_error_t *err = NULL;
- bc_trie_t *source = blogc_source_parse(a, strlen(a), 0, &err);
- assert_null(source);
- assert_non_null(err);
- assert_int_equal(err->type, BLOGC_ERROR_SOURCE_PARSER);
- assert_string_equal(err->msg,
- "'FILENAME' variable is forbidden in source files. It will be set "
- "for you by the compiler.");
- bc_error_free(err);
- bc_trie_free(source);
-}
-
-
-static void
-test_source_parse_config_reserved_name2(void **state)
-{
- const char *a = "CONTENT: asd\r\n";
- bc_error_t *err = NULL;
- bc_trie_t *source = blogc_source_parse(a, strlen(a), 0, &err);
- assert_null(source);
- assert_non_null(err);
- assert_int_equal(err->type, BLOGC_ERROR_SOURCE_PARSER);
- assert_string_equal(err->msg,
- "'CONTENT' variable is forbidden in source files. It will be set "
- "for you by the compiler.");
- bc_error_free(err);
- bc_trie_free(source);
-}
-
-
-static void
-test_source_parse_config_reserved_name3(void **state)
-{
- const char *a = "DATE_FORMATTED: asd\r\n";
- bc_error_t *err = NULL;
- bc_trie_t *source = blogc_source_parse(a, strlen(a), 0, &err);
- assert_null(source);
- assert_non_null(err);
- assert_int_equal(err->type, BLOGC_ERROR_SOURCE_PARSER);
- assert_string_equal(err->msg,
- "'DATE_FORMATTED' variable is forbidden in source files. It will be set "
- "for you by the compiler.");
- bc_error_free(err);
- bc_trie_free(source);
-}
-
-
-static void
-test_source_parse_config_reserved_name4(void **state)
-{
- const char *a = "DATE_FIRST_FORMATTED: asd\r\n";
- bc_error_t *err = NULL;
- bc_trie_t *source = blogc_source_parse(a, strlen(a), 0, &err);
- assert_null(source);
- assert_non_null(err);
- assert_int_equal(err->type, BLOGC_ERROR_SOURCE_PARSER);
- assert_string_equal(err->msg,
- "'DATE_FIRST_FORMATTED' variable is forbidden in source files. It will be set "
- "for you by the compiler.");
- bc_error_free(err);
- bc_trie_free(source);
-}
-
-
-static void
-test_source_parse_config_reserved_name5(void **state)
-{
- const char *a = "DATE_LAST_FORMATTED: asd\r\n";
- bc_error_t *err = NULL;
- bc_trie_t *source = blogc_source_parse(a, strlen(a), 0, &err);
- assert_null(source);
- assert_non_null(err);
- assert_int_equal(err->type, BLOGC_ERROR_SOURCE_PARSER);
- assert_string_equal(err->msg,
- "'DATE_LAST_FORMATTED' variable is forbidden in source files. It will be set "
- "for you by the compiler.");
- bc_error_free(err);
- bc_trie_free(source);
-}
-
-
-static void
-test_source_parse_config_reserved_name6(void **state)
-{
- const char *a = "PAGE_FIRST: asd\r\n";
- bc_error_t *err = NULL;
- bc_trie_t *source = blogc_source_parse(a, strlen(a), 0, &err);
- assert_null(source);
- assert_non_null(err);
- assert_int_equal(err->type, BLOGC_ERROR_SOURCE_PARSER);
- assert_string_equal(err->msg,
- "'PAGE_FIRST' variable is forbidden in source files. It will be set "
- "for you by the compiler.");
- bc_error_free(err);
- bc_trie_free(source);
-}
-
-
-static void
-test_source_parse_config_reserved_name7(void **state)
-{
- const char *a = "PAGE_PREVIOUS: asd\r\n";
- bc_error_t *err = NULL;
- bc_trie_t *source = blogc_source_parse(a, strlen(a), 0, &err);
- assert_null(source);
- assert_non_null(err);
- assert_int_equal(err->type, BLOGC_ERROR_SOURCE_PARSER);
- assert_string_equal(err->msg,
- "'PAGE_PREVIOUS' variable is forbidden in source files. It will be set "
- "for you by the compiler.");
- bc_error_free(err);
- bc_trie_free(source);
-}
-
-
-static void
-test_source_parse_config_reserved_name8(void **state)
-{
- const char *a = "PAGE_CURRENT: asd\r\n";
- bc_error_t *err = NULL;
- bc_trie_t *source = blogc_source_parse(a, strlen(a), 0, &err);
- assert_null(source);
- assert_non_null(err);
- assert_int_equal(err->type, BLOGC_ERROR_SOURCE_PARSER);
- assert_string_equal(err->msg,
- "'PAGE_CURRENT' variable is forbidden in source files. It will be set "
- "for you by the compiler.");
- bc_error_free(err);
- bc_trie_free(source);
-}
-
-
-static void
-test_source_parse_config_reserved_name9(void **state)
-{
- const char *a = "PAGE_NEXT: asd\r\n";
- bc_error_t *err = NULL;
- bc_trie_t *source = blogc_source_parse(a, strlen(a), 0, &err);
- assert_null(source);
- assert_non_null(err);
- assert_int_equal(err->type, BLOGC_ERROR_SOURCE_PARSER);
- assert_string_equal(err->msg,
- "'PAGE_NEXT' variable is forbidden in source files. It will be set "
- "for you by the compiler.");
- bc_error_free(err);
- bc_trie_free(source);
-}
-
-
-static void
-test_source_parse_config_reserved_name10(void **state)
-{
- const char *a = "PAGE_LAST: asd\r\n";
- bc_error_t *err = NULL;
- bc_trie_t *source = blogc_source_parse(a, strlen(a), 0, &err);
- assert_null(source);
- assert_non_null(err);
- assert_int_equal(err->type, BLOGC_ERROR_SOURCE_PARSER);
- assert_string_equal(err->msg,
- "'PAGE_LAST' variable is forbidden in source files. It will be set "
- "for you by the compiler.");
- bc_error_free(err);
- bc_trie_free(source);
-}
-
-
-static void
-test_source_parse_config_reserved_name11(void **state)
-{
- const char *a = "BLOGC_VERSION: 1.0\r\n";
- bc_error_t *err = NULL;
- bc_trie_t *source = blogc_source_parse(a, strlen(a), 0, &err);
- assert_null(source);
- assert_non_null(err);
- assert_int_equal(err->type, BLOGC_ERROR_SOURCE_PARSER);
- assert_string_equal(err->msg,
- "'BLOGC_VERSION' variable is forbidden in source files. It will be set "
- "for you by the compiler.");
- bc_error_free(err);
- bc_trie_free(source);
-}
-
-
-static void
-test_source_parse_config_value_no_line_ending(void **state)
-{
- const char *a = "BOLA: asd";
- bc_error_t *err = NULL;
- bc_trie_t *source = blogc_source_parse(a, strlen(a), 0, &err);
- assert_null(source);
- assert_non_null(err);
- assert_int_equal(err->type, BLOGC_ERROR_SOURCE_PARSER);
- assert_string_equal(err->msg,
- "No line ending after the configuration value for 'BOLA'.\n"
- "Error occurred near line 1, position 10: BOLA: asd");
- bc_error_free(err);
- bc_trie_free(source);
-}
-
-
-static void
-test_source_parse_invalid_separator(void **state)
-{
- const char *a = "BOLA: asd\n---#";
- bc_error_t *err = NULL;
- bc_trie_t *source = blogc_source_parse(a, strlen(a), 0, &err);
- assert_null(source);
- assert_non_null(err);
- assert_int_equal(err->type, BLOGC_ERROR_SOURCE_PARSER);
- assert_string_equal(err->msg,
- "Invalid content separator. Must be more than one '-' characters.\n"
- "Error occurred near line 2, position 4: ---#");
- bc_error_free(err);
- bc_trie_free(source);
-}
-
-
-int
-main(void)
-{
- const struct CMUnitTest tests[] = {
- cmocka_unit_test(test_source_parse),
- cmocka_unit_test(test_source_parse_crlf),
- cmocka_unit_test(test_source_parse_with_spaces),
- cmocka_unit_test(test_source_parse_with_excerpt),
- cmocka_unit_test(test_source_parse_with_first_header),
- cmocka_unit_test(test_source_parse_with_description),
- cmocka_unit_test(test_source_parse_with_toctree),
- cmocka_unit_test(test_source_parse_with_toctree_noheader),
- cmocka_unit_test(test_source_parse_with_toctree_maxdepth1),
- cmocka_unit_test(test_source_parse_with_toctree_maxdepth_invalid),
- cmocka_unit_test(test_source_parse_config_empty),
- cmocka_unit_test(test_source_parse_config_invalid_key),
- cmocka_unit_test(test_source_parse_config_no_key),
- cmocka_unit_test(test_source_parse_config_no_key2),
- cmocka_unit_test(test_source_parse_config_no_value),
- cmocka_unit_test(test_source_parse_config_no_value2),
- cmocka_unit_test(test_source_parse_config_reserved_name),
- cmocka_unit_test(test_source_parse_config_reserved_name2),
- cmocka_unit_test(test_source_parse_config_reserved_name3),
- cmocka_unit_test(test_source_parse_config_reserved_name4),
- cmocka_unit_test(test_source_parse_config_reserved_name5),
- cmocka_unit_test(test_source_parse_config_reserved_name6),
- cmocka_unit_test(test_source_parse_config_reserved_name7),
- cmocka_unit_test(test_source_parse_config_reserved_name8),
- cmocka_unit_test(test_source_parse_config_reserved_name9),
- cmocka_unit_test(test_source_parse_config_reserved_name10),
- cmocka_unit_test(test_source_parse_config_reserved_name11),
- cmocka_unit_test(test_source_parse_config_value_no_line_ending),
- cmocka_unit_test(test_source_parse_invalid_separator),
- };
- return cmocka_run_group_tests(tests, NULL, NULL);
-}
diff --git a/tests/blogc/check_sysinfo.c b/tests/blogc/check_sysinfo.c
deleted file mode 100644
index 197092c..0000000
--- a/tests/blogc/check_sysinfo.c
+++ /dev/null
@@ -1,261 +0,0 @@
-/*
- * blogc: A blog compiler.
- * Copyright (C) 2014-2019 Rafael G. Martins <rafael@rafaelmartins.eng.br>
- *
- * This program can be distributed under the terms of the BSD License.
- * See the file LICENSE.
- */
-
-#include <stdarg.h>
-#include <stddef.h>
-#include <setjmp.h>
-#include <cmocka.h>
-#include <stdlib.h>
-#include <string.h>
-#include <stdio.h>
-#include "../../src/common/error.h"
-#include "../../src/common/utils.h"
-#include "../../src/blogc/sysinfo.h"
-
-#ifdef HAVE_SYSINFO_DATETIME
-#include <time.h>
-#endif
-
-#ifdef HAVE_NETDB_H
-#include <netdb.h>
-
-static struct hostent h = {
- .h_name = "bola.example.com",
-};
-
-struct hostent*
-__wrap_gethostbyname(const char *name)
-{
- if (0 == strcmp(name, "bola"))
- return &h;
- return NULL;
-}
-#endif
-
-
-#ifdef HAVE_SYSINFO_HOSTNAME
-int
-__wrap_gethostname(char *name, size_t len)
-{
- assert_int_equal(len, 1024);
- const char *f = mock_type(const char*);
- if (f != NULL)
- strcpy(name, f);
- return mock_type(int);
-}
-#endif
-
-
-char*
-__wrap_getenv(const char *name)
-{
- return mock_type(char*);
-}
-
-
-#ifdef HAVE_SYSINFO_DATETIME
-time_t
-__wrap_time(time_t *tloc)
-{
- *tloc = mock_type(time_t);
- return *tloc;
-}
-
-
-static struct tm tm = {
- .tm_sec = 1,
- .tm_min = 2,
- .tm_hour = 3,
- .tm_mday = 4,
- .tm_mon = 5,
- .tm_year = 6,
- .tm_wday = 6,
- .tm_yday = 7,
- .tm_isdst = 0,
-};
-
-struct tm*
-__wrap_gmtime(const time_t *timep)
-{
- if (*timep == 2)
- return NULL;
- return &tm;
-}
-#endif
-
-
-char*
-__wrap_bc_file_get_contents(const char *path, bool utf8, size_t *len, bc_error_t **err)
-{
- assert_string_equal(path, "/proc/1/cgroup");
- assert_false(utf8);
- char *rv = mock_type(char*);
- *len = strlen(rv);
- return rv;
-}
-
-
-static void
-test_sysinfo_get_hostname(void **state)
-{
- will_return(__wrap_gethostname, NULL);
- will_return(__wrap_gethostname, -1);
- char *f = blogc_sysinfo_get_hostname();
- assert_null(f);
-
- will_return(__wrap_gethostname, "bola");
- will_return(__wrap_gethostname, 0);
- f = blogc_sysinfo_get_hostname();
- assert_non_null(f);
- assert_string_equal(f, "bola.example.com");
- free(f);
-
- will_return(__wrap_gethostname, "guda");
- will_return(__wrap_gethostname, 0);
- f = blogc_sysinfo_get_hostname();
- assert_non_null(f);
- assert_string_equal(f, "guda");
- free(f);
-}
-
-
-static void
-test_sysinfo_inject_hostname(void **state)
-{
- bc_trie_t *t = bc_trie_new(free);
-
- will_return(__wrap_gethostname, NULL);
- will_return(__wrap_gethostname, -1);
- blogc_sysinfo_inject_hostname(t);
- assert_int_equal(bc_trie_size(t), 0);
-
- will_return(__wrap_gethostname, "bola");
- will_return(__wrap_gethostname, 0);
- blogc_sysinfo_inject_hostname(t);
- assert_int_equal(bc_trie_size(t), 1);
- assert_string_equal(bc_trie_lookup(t, "BLOGC_SYSINFO_HOSTNAME"), "bola.example.com");
- bc_trie_free(t);
-
- t = bc_trie_new(free);
- will_return(__wrap_gethostname, "guda");
- will_return(__wrap_gethostname, 0);
- blogc_sysinfo_inject_hostname(t);
- assert_int_equal(bc_trie_size(t), 1);
- assert_string_equal(bc_trie_lookup(t, "BLOGC_SYSINFO_HOSTNAME"), "guda");
- bc_trie_free(t);
-}
-
-
-static void
-test_sysinfo_get_username(void **state)
-{
- will_return(__wrap_getenv, NULL);
- char *f = blogc_sysinfo_get_username();
- assert_null(f);
-
- will_return(__wrap_getenv, "bola");
- f = blogc_sysinfo_get_username();
- assert_non_null(f);
- assert_string_equal(f, "bola");
- free(f);
-}
-
-
-static void
-test_sysinfo_inject_username(void **state)
-{
- bc_trie_t *t = bc_trie_new(free);
-
- will_return(__wrap_getenv, NULL);
- blogc_sysinfo_inject_username(t);
- assert_int_equal(bc_trie_size(t), 0);
-
- will_return(__wrap_getenv, "bola");
- blogc_sysinfo_inject_username(t);
- assert_int_equal(bc_trie_size(t), 1);
- assert_string_equal(bc_trie_lookup(t, "BLOGC_SYSINFO_USERNAME"), "bola");
- bc_trie_free(t);
-}
-
-
-static void
-test_sysinfo_get_datetime(void **state)
-{
- will_return(__wrap_time, -1);
- char *f = blogc_sysinfo_get_datetime();
- assert_null(f);
-
- will_return(__wrap_time, 2);
- f = blogc_sysinfo_get_datetime();
- assert_null(f);
-
- will_return(__wrap_time, 1);
- f = blogc_sysinfo_get_datetime();
- assert_non_null(f);
- assert_string_equal(f, "1906-06-04 03:02:01");
- free(f);
-}
-
-
-static void
-test_sysinfo_inject_datetime(void **state)
-{
- bc_trie_t *t = bc_trie_new(free);
-
- will_return(__wrap_time, -1);
- blogc_sysinfo_inject_datetime(t);
- assert_int_equal(bc_trie_size(t), 0);
-
- will_return(__wrap_time, 2);
- blogc_sysinfo_inject_datetime(t);
- assert_int_equal(bc_trie_size(t), 0);
-
- will_return(__wrap_time, 1);
- blogc_sysinfo_inject_datetime(t);
- assert_int_equal(bc_trie_size(t), 1);
- assert_string_equal(bc_trie_lookup(t, "BLOGC_SYSINFO_DATETIME"), "1906-06-04 03:02:01");
- bc_trie_free(t);
-}
-
-
-static void
-test_sysinfo_get_inside_docker(void **state)
-{
- // the "positive" case was already tested in check_funcvars. this is done
- // this way because this function caches the results in a global variable.
- will_return(__wrap_bc_file_get_contents, bc_strdup("bola"));
- assert_false(blogc_sysinfo_get_inside_docker());
-}
-
-
-// the blogc_sysinfo_inject_inside_docker() function was already indirectly
-// tested in check_funcvars.c
-
-
-int
-main(void)
-{
- const struct CMUnitTest tests[] = {
-
-#ifdef HAVE_SYSINFO_HOSTNAME
- cmocka_unit_test(test_sysinfo_get_hostname),
- cmocka_unit_test(test_sysinfo_inject_hostname),
-#endif
-
- cmocka_unit_test(test_sysinfo_get_username),
- cmocka_unit_test(test_sysinfo_inject_username),
-
-#ifdef HAVE_SYSINFO_DATETIME
- cmocka_unit_test(test_sysinfo_get_datetime),
- cmocka_unit_test(test_sysinfo_inject_datetime),
-#endif
-
- cmocka_unit_test(test_sysinfo_get_inside_docker),
- };
- return cmocka_run_group_tests(tests, NULL, NULL);
-}
diff --git a/tests/blogc/check_sysinfo2.c b/tests/blogc/check_sysinfo2.c
deleted file mode 100644
index 7dd440d..0000000
--- a/tests/blogc/check_sysinfo2.c
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * blogc: A blog compiler.
- * Copyright (C) 2014-2019 Rafael G. Martins <rafael@rafaelmartins.eng.br>
- *
- * This program can be distributed under the terms of the BSD License.
- * See the file LICENSE.
- */
-
-#include <stdarg.h>
-#include <stddef.h>
-#include <setjmp.h>
-#include <cmocka.h>
-#include <stdlib.h>
-#include <string.h>
-#include <stdio.h>
-#include "../../src/common/error.h"
-#include "../../src/common/utils.h"
-#include "../../src/blogc/sysinfo.h"
-
-// this test exists because we can't test more than one return values for
-// blogc_sysinfo_get_inside_docker() in the same binary, because the results
-// are cached globally for performance.
-
-
-char*
-__wrap_bc_file_get_contents(const char *path, bool utf8, size_t *len, bc_error_t **err)
-{
- assert_string_equal(path, "/proc/1/cgroup");
- assert_false(utf8);
- *err = bc_error_new(0, "");
- return NULL;
-}
-
-
-static void
-test_sysinfo_get_inside_docker(void **state)
-{
- assert_false(blogc_sysinfo_get_inside_docker());
-}
-
-
-int
-main(void)
-{
- const struct CMUnitTest tests[] = {
- cmocka_unit_test(test_sysinfo_get_inside_docker),
- };
- return cmocka_run_group_tests(tests, NULL, NULL);
-}
diff --git a/tests/blogc/check_template_parser.c b/tests/blogc/check_template_parser.c
deleted file mode 100644
index ace8ac4..0000000
--- a/tests/blogc/check_template_parser.c
+++ /dev/null
@@ -1,1331 +0,0 @@
-/*
- * blogc: A blog compiler.
- * Copyright (C) 2014-2020 Rafael G. Martins <rafael@rafaelmartins.eng.br>
- *
- * This program can be distributed under the terms of the BSD License.
- * See the file LICENSE.
- */
-
-#include <stdarg.h>
-#include <stddef.h>
-#include <setjmp.h>
-#include <cmocka.h>
-#include <string.h>
-#include "../../src/common/error.h"
-#include "../../src/common/utils.h"
-#include "../../src/blogc/template-parser.h"
-
-
-static void
-blogc_assert_template_node(bc_slist_t *l, const char *data,
- const blogc_template_node_type_t type)
-{
- blogc_template_node_t *node = l->data;
- if (data == NULL)
- assert_null(node->data[0]);
- else
- assert_string_equal(node->data[0], data);
- assert_int_equal(node->type, type);
-}
-
-
-static void
-blogc_assert_template_if_node(bc_slist_t *l, const char *variable,
- blogc_template_operator_t operator, const char *operand)
-{
- blogc_template_node_t *node = l->data;
- assert_string_equal(node->data[0], variable);
- assert_int_equal(node->op, operator);
- assert_string_equal(node->data[1], operand);
- assert_int_equal(node->type, BLOGC_TEMPLATE_NODE_IF);
-}
-
-
-static void
-test_template_parse(void **state)
-{
- const char *a =
- "Test\n"
- "\n"
- " {%- block entry -%}\n"
- "{% ifdef CHUNDA %}\n"
- "bola\n"
- "{% endif %}\n"
- "{% ifndef BOLA %}\n"
- "bolao\n"
- "{%- endif %}\n"
- "{% endblock %}\n"
- "{% block listing %}{{ BOLA }}{% endblock %}\n"
- "{% block listing_once %}asd{% endblock %}\n"
- "{%- foreach BOLA %}hahaha{% endforeach %}\n"
- "{% if BOLA == \"1\\\"0\" %}aee{% else %}fffuuuuuuu{% endif %}\n"
- "{% block listing_entry %}lol{% endblock %}\n"
- "{% block listing_empty %}empty{% endblock %}";
- bc_error_t *err = NULL;
- bc_slist_t *ast = blogc_template_parse(a, strlen(a), &err);
- assert_null(err);
- assert_non_null(ast);
- blogc_assert_template_node(ast, "Test",
- BLOGC_TEMPLATE_NODE_CONTENT);
- blogc_assert_template_node(ast->next, "entry",
- BLOGC_TEMPLATE_NODE_BLOCK);
- blogc_assert_template_node(ast->next->next, "",
- BLOGC_TEMPLATE_NODE_CONTENT);
- blogc_assert_template_node(ast->next->next->next, "CHUNDA",
- BLOGC_TEMPLATE_NODE_IFDEF);
- blogc_assert_template_node(ast->next->next->next->next, "\nbola\n",
- BLOGC_TEMPLATE_NODE_CONTENT);
- blogc_assert_template_node(ast->next->next->next->next->next, NULL,
- BLOGC_TEMPLATE_NODE_ENDIF);
- blogc_assert_template_node(ast->next->next->next->next->next->next, "\n",
- BLOGC_TEMPLATE_NODE_CONTENT);
- bc_slist_t *tmp = ast->next->next->next->next->next->next->next;
- blogc_assert_template_node(tmp, "BOLA", BLOGC_TEMPLATE_NODE_IFNDEF);
- blogc_assert_template_node(tmp->next, "\nbolao", BLOGC_TEMPLATE_NODE_CONTENT);
- blogc_assert_template_node(tmp->next->next, NULL, BLOGC_TEMPLATE_NODE_ENDIF);
- blogc_assert_template_node(tmp->next->next->next, "\n",
- BLOGC_TEMPLATE_NODE_CONTENT);
- tmp = tmp->next->next->next->next;
- blogc_assert_template_node(tmp, NULL, BLOGC_TEMPLATE_NODE_ENDBLOCK);
- blogc_assert_template_node(tmp->next, "\n", BLOGC_TEMPLATE_NODE_CONTENT);
- blogc_assert_template_node(tmp->next->next, "listing",
- BLOGC_TEMPLATE_NODE_BLOCK);
- blogc_assert_template_node(tmp->next->next->next, "BOLA",
- BLOGC_TEMPLATE_NODE_VARIABLE);
- blogc_assert_template_node(tmp->next->next->next->next,
- NULL, BLOGC_TEMPLATE_NODE_ENDBLOCK);
- blogc_assert_template_node(tmp->next->next->next->next->next, "\n",
- BLOGC_TEMPLATE_NODE_CONTENT);
- blogc_assert_template_node(tmp->next->next->next->next->next->next,
- "listing_once", BLOGC_TEMPLATE_NODE_BLOCK);
- blogc_assert_template_node(tmp->next->next->next->next->next->next->next,
- "asd", BLOGC_TEMPLATE_NODE_CONTENT);
- blogc_assert_template_node(tmp->next->next->next->next->next->next->next->next,
- NULL, BLOGC_TEMPLATE_NODE_ENDBLOCK);
- blogc_assert_template_node(tmp->next->next->next->next->next->next->next->next->next,
- "", BLOGC_TEMPLATE_NODE_CONTENT);
- tmp = tmp->next->next->next->next->next->next->next->next->next->next;
- blogc_assert_template_node(tmp, "BOLA", BLOGC_TEMPLATE_NODE_FOREACH);
- blogc_assert_template_node(tmp->next, "hahaha",
- BLOGC_TEMPLATE_NODE_CONTENT);
- blogc_assert_template_node(tmp->next->next, NULL,
- BLOGC_TEMPLATE_NODE_ENDFOREACH);
- blogc_assert_template_node(tmp->next->next->next, "\n",
- BLOGC_TEMPLATE_NODE_CONTENT);
- blogc_assert_template_if_node(tmp->next->next->next->next, "BOLA",
- BLOGC_TEMPLATE_OP_EQ, "\"1\\\"0\"");
- blogc_assert_template_node(tmp->next->next->next->next->next, "aee",
- BLOGC_TEMPLATE_NODE_CONTENT);
- blogc_assert_template_node(tmp->next->next->next->next->next->next, NULL,
- BLOGC_TEMPLATE_NODE_ELSE);
- blogc_assert_template_node(tmp->next->next->next->next->next->next->next,
- "fffuuuuuuu", BLOGC_TEMPLATE_NODE_CONTENT);
- blogc_assert_template_node(tmp->next->next->next->next->next->next->next->next,
- NULL, BLOGC_TEMPLATE_NODE_ENDIF);
- tmp = tmp->next->next->next->next->next->next->next->next->next;
- blogc_assert_template_node(tmp, "\n", BLOGC_TEMPLATE_NODE_CONTENT);
- blogc_assert_template_node(tmp->next, "listing_entry", BLOGC_TEMPLATE_NODE_BLOCK);
- blogc_assert_template_node(tmp->next->next, "lol", BLOGC_TEMPLATE_NODE_CONTENT);
- blogc_assert_template_node(tmp->next->next->next, NULL,
- BLOGC_TEMPLATE_NODE_ENDBLOCK);
- blogc_assert_template_node(tmp->next->next->next->next, "\n",
- BLOGC_TEMPLATE_NODE_CONTENT);
- blogc_assert_template_node(tmp->next->next->next->next->next, "listing_empty",
- BLOGC_TEMPLATE_NODE_BLOCK);
- blogc_assert_template_node(tmp->next->next->next->next->next->next, "empty",
- BLOGC_TEMPLATE_NODE_CONTENT);
- blogc_assert_template_node(tmp->next->next->next->next->next->next->next, NULL,
- BLOGC_TEMPLATE_NODE_ENDBLOCK);
- assert_null(tmp->next->next->next->next->next->next->next->next);
- blogc_template_free_ast(ast);
-}
-
-
-static void
-test_template_parse_crlf(void **state)
-{
- const char *a =
- "Test\r\n"
- "\r\n"
- " {%- block entry -%}\r\n"
- "{% ifdef CHUNDA %}\r\n"
- "bola\r\n"
- "{% endif %}\r\n"
- "{% ifndef BOLA %}\r\n"
- "bolao\r\n"
- "{%- endif %}\r\n"
- "{% endblock %}\r\n"
- "{% block listing %}{{ BOLA }}{% endblock %}\r\n"
- "{% block listing_once %}asd{% endblock %}\r\n"
- "{%- foreach BOLA %}hahaha{% endforeach %}\r\n"
- "{% if BOLA == \"1\\\"0\" %}aee{% else %}fffuuuuuuu{% endif %}";
- bc_error_t *err = NULL;
- bc_slist_t *ast = blogc_template_parse(a, strlen(a), &err);
- assert_null(err);
- assert_non_null(ast);
- blogc_assert_template_node(ast, "Test",
- BLOGC_TEMPLATE_NODE_CONTENT);
- blogc_assert_template_node(ast->next, "entry",
- BLOGC_TEMPLATE_NODE_BLOCK);
- blogc_assert_template_node(ast->next->next, "",
- BLOGC_TEMPLATE_NODE_CONTENT);
- blogc_assert_template_node(ast->next->next->next, "CHUNDA",
- BLOGC_TEMPLATE_NODE_IFDEF);
- blogc_assert_template_node(ast->next->next->next->next, "\r\nbola\r\n",
- BLOGC_TEMPLATE_NODE_CONTENT);
- blogc_assert_template_node(ast->next->next->next->next->next, NULL,
- BLOGC_TEMPLATE_NODE_ENDIF);
- blogc_assert_template_node(ast->next->next->next->next->next->next, "\r\n",
- BLOGC_TEMPLATE_NODE_CONTENT);
- bc_slist_t *tmp = ast->next->next->next->next->next->next->next;
- blogc_assert_template_node(tmp, "BOLA", BLOGC_TEMPLATE_NODE_IFNDEF);
- blogc_assert_template_node(tmp->next, "\r\nbolao", BLOGC_TEMPLATE_NODE_CONTENT);
- blogc_assert_template_node(tmp->next->next, NULL, BLOGC_TEMPLATE_NODE_ENDIF);
- blogc_assert_template_node(tmp->next->next->next, "\r\n",
- BLOGC_TEMPLATE_NODE_CONTENT);
- tmp = tmp->next->next->next->next;
- blogc_assert_template_node(tmp, NULL, BLOGC_TEMPLATE_NODE_ENDBLOCK);
- blogc_assert_template_node(tmp->next, "\r\n", BLOGC_TEMPLATE_NODE_CONTENT);
- blogc_assert_template_node(tmp->next->next, "listing",
- BLOGC_TEMPLATE_NODE_BLOCK);
- blogc_assert_template_node(tmp->next->next->next, "BOLA",
- BLOGC_TEMPLATE_NODE_VARIABLE);
- blogc_assert_template_node(tmp->next->next->next->next,
- NULL, BLOGC_TEMPLATE_NODE_ENDBLOCK);
- blogc_assert_template_node(tmp->next->next->next->next->next, "\r\n",
- BLOGC_TEMPLATE_NODE_CONTENT);
- blogc_assert_template_node(tmp->next->next->next->next->next->next,
- "listing_once", BLOGC_TEMPLATE_NODE_BLOCK);
- blogc_assert_template_node(tmp->next->next->next->next->next->next->next,
- "asd", BLOGC_TEMPLATE_NODE_CONTENT);
- blogc_assert_template_node(tmp->next->next->next->next->next->next->next->next,
- NULL, BLOGC_TEMPLATE_NODE_ENDBLOCK);
- blogc_assert_template_node(tmp->next->next->next->next->next->next->next->next->next,
- "", BLOGC_TEMPLATE_NODE_CONTENT);
- tmp = tmp->next->next->next->next->next->next->next->next->next->next;
- blogc_assert_template_node(tmp, "BOLA", BLOGC_TEMPLATE_NODE_FOREACH);
- blogc_assert_template_node(tmp->next, "hahaha",
- BLOGC_TEMPLATE_NODE_CONTENT);
- blogc_assert_template_node(tmp->next->next, NULL,
- BLOGC_TEMPLATE_NODE_ENDFOREACH);
- blogc_assert_template_node(tmp->next->next->next, "\r\n",
- BLOGC_TEMPLATE_NODE_CONTENT);
- blogc_assert_template_if_node(tmp->next->next->next->next, "BOLA",
- BLOGC_TEMPLATE_OP_EQ, "\"1\\\"0\"");
- blogc_assert_template_node(tmp->next->next->next->next->next, "aee",
- BLOGC_TEMPLATE_NODE_CONTENT);
- blogc_assert_template_node(tmp->next->next->next->next->next->next, NULL,
- BLOGC_TEMPLATE_NODE_ELSE);
- blogc_assert_template_node(tmp->next->next->next->next->next->next->next,
- "fffuuuuuuu", BLOGC_TEMPLATE_NODE_CONTENT);
- blogc_assert_template_node(tmp->next->next->next->next->next->next->next->next,
- NULL, BLOGC_TEMPLATE_NODE_ENDIF);
- assert_null(tmp->next->next->next->next->next->next->next->next->next);
- blogc_template_free_ast(ast);
-}
-
-
-static void
-test_template_parse_html(void **state)
-{
- const char *a =
- "<html>\n"
- " <head>\n"
- " {% block entry %}\n"
- " <title>My cool blog >> {{ TITLE }}</title>\n"
- " {% endblock %}\n"
- " {% block listing_once %}\n"
- " <title>My cool blog - Main page</title>\n"
- " {% endblock %}\n"
- " </head>\n"
- " <body>\n"
- " <h1>My cool blog</h1>\n"
- " {% block entry %}\n"
- " <h2>{{ TITLE }}</h2>\n"
- " {% ifdef DATE %}<h4>Published in: {{ DATE }}</h4>{% endif %}\n"
- " <pre>{{ CONTENT }}</pre>\n"
- " {% endblock %}\n"
- " {% block listing_once %}<ul>{% endblock %}\n"
- " {% block listing %}<p><a href=\"{{ FILENAME }}.html\">"
- "{{ TITLE }}</a>{% ifdef DATE %} - {{ DATE }}{% endif %}</p>{% endblock %}\n"
- " {% block listing_once %}</ul>{% endblock %}\n"
- " </body>\n"
- "</html>\n";
- bc_error_t *err = NULL;
- bc_slist_t *ast = blogc_template_parse(a, strlen(a), &err);
- assert_null(err);
- assert_non_null(ast);
- blogc_assert_template_node(ast, "<html>\n <head>\n ",
- BLOGC_TEMPLATE_NODE_CONTENT);
- blogc_assert_template_node(ast->next, "entry",
- BLOGC_TEMPLATE_NODE_BLOCK);
- blogc_assert_template_node(ast->next->next,
- "\n <title>My cool blog >> ", BLOGC_TEMPLATE_NODE_CONTENT);
- blogc_assert_template_node(ast->next->next->next, "TITLE",
- BLOGC_TEMPLATE_NODE_VARIABLE);
- blogc_assert_template_node(ast->next->next->next->next,
- "</title>\n ", BLOGC_TEMPLATE_NODE_CONTENT);
- blogc_assert_template_node(ast->next->next->next->next->next, NULL,
- BLOGC_TEMPLATE_NODE_ENDBLOCK);
- blogc_assert_template_node(ast->next->next->next->next->next->next,
- "\n ", BLOGC_TEMPLATE_NODE_CONTENT);
- blogc_assert_template_node(ast->next->next->next->next->next->next->next,
- "listing_once", BLOGC_TEMPLATE_NODE_BLOCK);
- bc_slist_t *tmp = ast->next->next->next->next->next->next->next->next;
- blogc_assert_template_node(tmp,
- "\n <title>My cool blog - Main page</title>\n ",
- BLOGC_TEMPLATE_NODE_CONTENT);
- blogc_assert_template_node(tmp->next, NULL, BLOGC_TEMPLATE_NODE_ENDBLOCK);
- blogc_assert_template_node(tmp->next->next,
- "\n </head>\n <body>\n <h1>My cool blog</h1>\n ",
- BLOGC_TEMPLATE_NODE_CONTENT);
- blogc_assert_template_node(tmp->next->next->next, "entry",
- BLOGC_TEMPLATE_NODE_BLOCK);
- blogc_assert_template_node(tmp->next->next->next->next,
- "\n <h2>", BLOGC_TEMPLATE_NODE_CONTENT);
- blogc_assert_template_node(tmp->next->next->next->next->next,
- "TITLE", BLOGC_TEMPLATE_NODE_VARIABLE);
- blogc_assert_template_node(tmp->next->next->next->next->next->next,
- "</h2>\n ", BLOGC_TEMPLATE_NODE_CONTENT);
- blogc_assert_template_node(tmp->next->next->next->next->next->next->next,
- "DATE", BLOGC_TEMPLATE_NODE_IFDEF);
- tmp = tmp->next->next->next->next->next->next->next->next;
- blogc_assert_template_node(tmp, "<h4>Published in: ",
- BLOGC_TEMPLATE_NODE_CONTENT);
- blogc_assert_template_node(tmp->next, "DATE", BLOGC_TEMPLATE_NODE_VARIABLE);
- blogc_assert_template_node(tmp->next->next, "</h4>",
- BLOGC_TEMPLATE_NODE_CONTENT);
- blogc_assert_template_node(tmp->next->next->next, NULL,
- BLOGC_TEMPLATE_NODE_ENDIF);
- blogc_assert_template_node(tmp->next->next->next->next, "\n <pre>",
- BLOGC_TEMPLATE_NODE_CONTENT);
- blogc_assert_template_node(tmp->next->next->next->next->next,
- "CONTENT", BLOGC_TEMPLATE_NODE_VARIABLE);
- blogc_assert_template_node(tmp->next->next->next->next->next->next,
- "</pre>\n ", BLOGC_TEMPLATE_NODE_CONTENT);
- blogc_assert_template_node(tmp->next->next->next->next->next->next->next,
- NULL, BLOGC_TEMPLATE_NODE_ENDBLOCK);
- tmp = tmp->next->next->next->next->next->next->next->next;
- blogc_assert_template_node(tmp, "\n ", BLOGC_TEMPLATE_NODE_CONTENT);
- blogc_assert_template_node(tmp->next, "listing_once",
- BLOGC_TEMPLATE_NODE_BLOCK);
- blogc_assert_template_node(tmp->next->next, "<ul>",
- BLOGC_TEMPLATE_NODE_CONTENT);
- blogc_assert_template_node(tmp->next->next->next, NULL,
- BLOGC_TEMPLATE_NODE_ENDBLOCK);
- blogc_assert_template_node(tmp->next->next->next->next, "\n ",
- BLOGC_TEMPLATE_NODE_CONTENT);
- blogc_assert_template_node(tmp->next->next->next->next->next,
- "listing", BLOGC_TEMPLATE_NODE_BLOCK);
- blogc_assert_template_node(tmp->next->next->next->next->next->next,
- "<p><a href=\"", BLOGC_TEMPLATE_NODE_CONTENT);
- blogc_assert_template_node(tmp->next->next->next->next->next->next->next,
- "FILENAME", BLOGC_TEMPLATE_NODE_VARIABLE);
- tmp = tmp->next->next->next->next->next->next->next->next;
- blogc_assert_template_node(tmp, ".html\">", BLOGC_TEMPLATE_NODE_CONTENT);
- blogc_assert_template_node(tmp->next, "TITLE",
- BLOGC_TEMPLATE_NODE_VARIABLE);
- blogc_assert_template_node(tmp->next->next, "</a>",
- BLOGC_TEMPLATE_NODE_CONTENT);
- blogc_assert_template_node(tmp->next->next->next, "DATE",
- BLOGC_TEMPLATE_NODE_IFDEF);
- blogc_assert_template_node(tmp->next->next->next->next, " - ",
- BLOGC_TEMPLATE_NODE_CONTENT);
- blogc_assert_template_node(tmp->next->next->next->next->next, "DATE",
- BLOGC_TEMPLATE_NODE_VARIABLE);
- blogc_assert_template_node(tmp->next->next->next->next->next->next,
- NULL, BLOGC_TEMPLATE_NODE_ENDIF);
- blogc_assert_template_node(tmp->next->next->next->next->next->next->next,
- "</p>", BLOGC_TEMPLATE_NODE_CONTENT);
- tmp = tmp->next->next->next->next->next->next->next->next;
- blogc_assert_template_node(tmp, NULL, BLOGC_TEMPLATE_NODE_ENDBLOCK);
- blogc_assert_template_node(tmp->next, "\n ",
- BLOGC_TEMPLATE_NODE_CONTENT);
- blogc_assert_template_node(tmp->next->next, "listing_once",
- BLOGC_TEMPLATE_NODE_BLOCK);
- blogc_assert_template_node(tmp->next->next->next, "</ul>",
- BLOGC_TEMPLATE_NODE_CONTENT);
- blogc_assert_template_node(tmp->next->next->next->next, NULL,
- BLOGC_TEMPLATE_NODE_ENDBLOCK);
- blogc_assert_template_node(tmp->next->next->next->next->next,
- "\n </body>\n</html>\n", BLOGC_TEMPLATE_NODE_CONTENT);
- assert_null(tmp->next->next->next->next->next->next);
- blogc_template_free_ast(ast);
-}
-
-
-static void
-test_template_parse_html_whitespace(void **state)
-{
- const char *a =
- "<html>\n"
- " <head>\n"
- " {%\n block entry\n%}\n"
- " <title>My cool blog >> {{ TITLE }}</title>\n"
- " {% \vendblock\v %}\n"
- " {% \r\nblock listing_once\n%}\n"
- " <title>My cool blog - Main page</title>\n"
- " {%\t endblock\t%}\n"
- " </head>\n"
- " <body>\n"
- " <h1>My cool blog</h1>\n"
- " {%\t\t\tblock entry\n%}\n"
- " <h2>{{\tTITLE\n}}</h2>\n"
- " {%\nifdef DATE\v%}<h4>Published in: {{\tDATE\t}}</h4>{%\fendif\f%}\n"
- " <pre>{{\tCONTENT\n}}</pre>\n"
- " {%\n\n \nendblock\f\f\n\t%}\n"
- " {%\nblock\n\nlisting_once\t%}<ul>{%\tendblock\f\f%}\n"
- " {%\n\nblock\t\tlisting\f\t%}<p><a href=\"{{\t\fFILENAME\t\t}}.html\">"
- "{{ TITLE }}</a>{%\f\tifdef\v\vDATE\f%} - {{\fDATE\f}}{%\tendif\f%}</p>{%\tendblock\t%}\n"
- " {%\tblock\tlisting_once\t%}</ul>{%\nendblock\n%}\n"
- " </body>\n"
- "</html>\n";
- bc_error_t *err = NULL;
- bc_slist_t *ast = blogc_template_parse(a, strlen(a), &err);
- assert_null(err);
- assert_non_null(ast);
- blogc_assert_template_node(ast, "<html>\n <head>\n ",
- BLOGC_TEMPLATE_NODE_CONTENT);
- blogc_assert_template_node(ast->next, "entry",
- BLOGC_TEMPLATE_NODE_BLOCK);
- blogc_assert_template_node(ast->next->next,
- "\n <title>My cool blog >> ", BLOGC_TEMPLATE_NODE_CONTENT);
- blogc_assert_template_node(ast->next->next->next, "TITLE",
- BLOGC_TEMPLATE_NODE_VARIABLE);
- blogc_assert_template_node(ast->next->next->next->next,
- "</title>\n ", BLOGC_TEMPLATE_NODE_CONTENT);
- blogc_assert_template_node(ast->next->next->next->next->next, NULL,
- BLOGC_TEMPLATE_NODE_ENDBLOCK);
- blogc_assert_template_node(ast->next->next->next->next->next->next,
- "\n ", BLOGC_TEMPLATE_NODE_CONTENT);
- blogc_assert_template_node(ast->next->next->next->next->next->next->next,
- "listing_once", BLOGC_TEMPLATE_NODE_BLOCK);
- bc_slist_t *tmp = ast->next->next->next->next->next->next->next->next;
- blogc_assert_template_node(tmp,
- "\n <title>My cool blog - Main page</title>\n ",
- BLOGC_TEMPLATE_NODE_CONTENT);
- blogc_assert_template_node(tmp->next, NULL, BLOGC_TEMPLATE_NODE_ENDBLOCK);
- blogc_assert_template_node(tmp->next->next,
- "\n </head>\n <body>\n <h1>My cool blog</h1>\n ",
- BLOGC_TEMPLATE_NODE_CONTENT);
- blogc_assert_template_node(tmp->next->next->next, "entry",
- BLOGC_TEMPLATE_NODE_BLOCK);
- blogc_assert_template_node(tmp->next->next->next->next,
- "\n <h2>", BLOGC_TEMPLATE_NODE_CONTENT);
- blogc_assert_template_node(tmp->next->next->next->next->next,
- "TITLE", BLOGC_TEMPLATE_NODE_VARIABLE);
- blogc_assert_template_node(tmp->next->next->next->next->next->next,
- "</h2>\n ", BLOGC_TEMPLATE_NODE_CONTENT);
- blogc_assert_template_node(tmp->next->next->next->next->next->next->next,
- "DATE", BLOGC_TEMPLATE_NODE_IFDEF);
- tmp = tmp->next->next->next->next->next->next->next->next;
- blogc_assert_template_node(tmp, "<h4>Published in: ",
- BLOGC_TEMPLATE_NODE_CONTENT);
- blogc_assert_template_node(tmp->next, "DATE", BLOGC_TEMPLATE_NODE_VARIABLE);
- blogc_assert_template_node(tmp->next->next, "</h4>",
- BLOGC_TEMPLATE_NODE_CONTENT);
- blogc_assert_template_node(tmp->next->next->next, NULL,
- BLOGC_TEMPLATE_NODE_ENDIF);
- blogc_assert_template_node(tmp->next->next->next->next, "\n <pre>",
- BLOGC_TEMPLATE_NODE_CONTENT);
- blogc_assert_template_node(tmp->next->next->next->next->next,
- "CONTENT", BLOGC_TEMPLATE_NODE_VARIABLE);
- blogc_assert_template_node(tmp->next->next->next->next->next->next,
- "</pre>\n ", BLOGC_TEMPLATE_NODE_CONTENT);
- blogc_assert_template_node(tmp->next->next->next->next->next->next->next,
- NULL, BLOGC_TEMPLATE_NODE_ENDBLOCK);
- tmp = tmp->next->next->next->next->next->next->next->next;
- blogc_assert_template_node(tmp, "\n ", BLOGC_TEMPLATE_NODE_CONTENT);
- blogc_assert_template_node(tmp->next, "listing_once",
- BLOGC_TEMPLATE_NODE_BLOCK);
- blogc_assert_template_node(tmp->next->next, "<ul>",
- BLOGC_TEMPLATE_NODE_CONTENT);
- blogc_assert_template_node(tmp->next->next->next, NULL,
- BLOGC_TEMPLATE_NODE_ENDBLOCK);
- blogc_assert_template_node(tmp->next->next->next->next, "\n ",
- BLOGC_TEMPLATE_NODE_CONTENT);
- blogc_assert_template_node(tmp->next->next->next->next->next,
- "listing", BLOGC_TEMPLATE_NODE_BLOCK);
- blogc_assert_template_node(tmp->next->next->next->next->next->next,
- "<p><a href=\"", BLOGC_TEMPLATE_NODE_CONTENT);
- blogc_assert_template_node(tmp->next->next->next->next->next->next->next,
- "FILENAME", BLOGC_TEMPLATE_NODE_VARIABLE);
- tmp = tmp->next->next->next->next->next->next->next->next;
- blogc_assert_template_node(tmp, ".html\">", BLOGC_TEMPLATE_NODE_CONTENT);
- blogc_assert_template_node(tmp->next, "TITLE",
- BLOGC_TEMPLATE_NODE_VARIABLE);
- blogc_assert_template_node(tmp->next->next, "</a>",
- BLOGC_TEMPLATE_NODE_CONTENT);
- blogc_assert_template_node(tmp->next->next->next, "DATE",
- BLOGC_TEMPLATE_NODE_IFDEF);
- blogc_assert_template_node(tmp->next->next->next->next, " - ",
- BLOGC_TEMPLATE_NODE_CONTENT);
- blogc_assert_template_node(tmp->next->next->next->next->next, "DATE",
- BLOGC_TEMPLATE_NODE_VARIABLE);
- blogc_assert_template_node(tmp->next->next->next->next->next->next,
- NULL, BLOGC_TEMPLATE_NODE_ENDIF);
- blogc_assert_template_node(tmp->next->next->next->next->next->next->next,
- "</p>", BLOGC_TEMPLATE_NODE_CONTENT);
- tmp = tmp->next->next->next->next->next->next->next->next;
- blogc_assert_template_node(tmp, NULL, BLOGC_TEMPLATE_NODE_ENDBLOCK);
- blogc_assert_template_node(tmp->next, "\n ",
- BLOGC_TEMPLATE_NODE_CONTENT);
- blogc_assert_template_node(tmp->next->next, "listing_once",
- BLOGC_TEMPLATE_NODE_BLOCK);
- blogc_assert_template_node(tmp->next->next->next, "</ul>",
- BLOGC_TEMPLATE_NODE_CONTENT);
- blogc_assert_template_node(tmp->next->next->next->next, NULL,
- BLOGC_TEMPLATE_NODE_ENDBLOCK);
- blogc_assert_template_node(tmp->next->next->next->next->next,
- "\n </body>\n</html>\n", BLOGC_TEMPLATE_NODE_CONTENT);
- assert_null(tmp->next->next->next->next->next->next);
- blogc_template_free_ast(ast);
-}
-
-
-static void
-test_template_parse_ifdef_and_var_outside_block(void **state)
-{
- const char *a =
- "{% ifdef GUDA %}bola{% endif %}\n"
- "{{ BOLA }}\n"
- "{% ifndef CHUNDA %}{{ CHUNDA }}{% endif %}\n";
- bc_error_t *err = NULL;
- bc_slist_t *ast = blogc_template_parse(a, strlen(a), &err);
- assert_null(err);
- assert_non_null(ast);
- blogc_assert_template_node(ast, "GUDA", BLOGC_TEMPLATE_NODE_IFDEF);
- blogc_assert_template_node(ast->next, "bola",
- BLOGC_TEMPLATE_NODE_CONTENT);
- blogc_assert_template_node(ast->next->next, NULL,
- BLOGC_TEMPLATE_NODE_ENDIF);
- blogc_assert_template_node(ast->next->next->next, "\n",
- BLOGC_TEMPLATE_NODE_CONTENT);
- blogc_assert_template_node(ast->next->next->next->next, "BOLA",
- BLOGC_TEMPLATE_NODE_VARIABLE);
- blogc_assert_template_node(ast->next->next->next->next->next, "\n",
- BLOGC_TEMPLATE_NODE_CONTENT);
- blogc_assert_template_node(ast->next->next->next->next->next->next,
- "CHUNDA", BLOGC_TEMPLATE_NODE_IFNDEF);
- bc_slist_t *tmp = ast->next->next->next->next->next->next->next;
- blogc_assert_template_node(tmp, "CHUNDA", BLOGC_TEMPLATE_NODE_VARIABLE);
- blogc_assert_template_node(tmp->next, NULL, BLOGC_TEMPLATE_NODE_ENDIF);
- blogc_assert_template_node(tmp->next->next, "\n",
- BLOGC_TEMPLATE_NODE_CONTENT);
- assert_null(tmp->next->next->next);
- blogc_template_free_ast(ast);
-}
-
-
-static void
-test_template_parse_nested_else(void **state)
-{
- const char *a =
- "{% ifdef GUDA %}\n"
- "{% ifdef BOLA %}\n"
- "asd\n"
- "{% else %}\n"
- "{% ifdef CHUNDA %}\n"
- "qwe\n"
- "{% else %}\n"
- "rty\n"
- "{% endif %}\n"
- "{% endif %}\n"
- "{% ifdef LOL %}\n"
- "zxc\n"
- "{% else %}\n"
- "bnm\n"
- "{% endif %}\n"
- "{% endif %}\n";
- bc_error_t *err = NULL;
- bc_slist_t *ast = blogc_template_parse(a, strlen(a), &err);
- assert_null(err);
- assert_non_null(ast);
- blogc_assert_template_node(ast, "GUDA", BLOGC_TEMPLATE_NODE_IFDEF);
- blogc_assert_template_node(ast->next, "\n", BLOGC_TEMPLATE_NODE_CONTENT);
- blogc_assert_template_node(ast->next->next, "BOLA", BLOGC_TEMPLATE_NODE_IFDEF);
- blogc_assert_template_node(ast->next->next->next, "\nasd\n",
- BLOGC_TEMPLATE_NODE_CONTENT);
- blogc_assert_template_node(ast->next->next->next->next, NULL,
- BLOGC_TEMPLATE_NODE_ELSE);
- blogc_assert_template_node(ast->next->next->next->next->next, "\n",
- BLOGC_TEMPLATE_NODE_CONTENT);
- blogc_assert_template_node(ast->next->next->next->next->next->next,
- "CHUNDA", BLOGC_TEMPLATE_NODE_IFDEF);
- blogc_assert_template_node(ast->next->next->next->next->next->next->next,
- "\nqwe\n", BLOGC_TEMPLATE_NODE_CONTENT);
- bc_slist_t *tmp = ast->next->next->next->next->next->next->next->next;
- blogc_assert_template_node(tmp, NULL, BLOGC_TEMPLATE_NODE_ELSE);
- blogc_assert_template_node(tmp->next, "\nrty\n", BLOGC_TEMPLATE_NODE_CONTENT);
- blogc_assert_template_node(tmp->next->next, NULL,
- BLOGC_TEMPLATE_NODE_ENDIF);
- blogc_assert_template_node(tmp->next->next->next, "\n",
- BLOGC_TEMPLATE_NODE_CONTENT);
- blogc_assert_template_node(tmp->next->next->next->next, NULL,
- BLOGC_TEMPLATE_NODE_ENDIF);
- blogc_assert_template_node(tmp->next->next->next->next->next, "\n",
- BLOGC_TEMPLATE_NODE_CONTENT);
- blogc_assert_template_node(tmp->next->next->next->next->next->next,
- "LOL", BLOGC_TEMPLATE_NODE_IFDEF);
- blogc_assert_template_node(tmp->next->next->next->next->next->next->next,
- "\nzxc\n", BLOGC_TEMPLATE_NODE_CONTENT);
- tmp = tmp->next->next->next->next->next->next->next->next;
- blogc_assert_template_node(tmp, NULL, BLOGC_TEMPLATE_NODE_ELSE);
- blogc_assert_template_node(tmp->next, "\nbnm\n", BLOGC_TEMPLATE_NODE_CONTENT);
- blogc_assert_template_node(tmp->next->next, NULL,
- BLOGC_TEMPLATE_NODE_ENDIF);
- blogc_assert_template_node(tmp->next->next->next, "\n",
- BLOGC_TEMPLATE_NODE_CONTENT);
- blogc_assert_template_node(tmp->next->next->next->next, NULL,
- BLOGC_TEMPLATE_NODE_ENDIF);
- blogc_assert_template_node(tmp->next->next->next->next->next, "\n",
- BLOGC_TEMPLATE_NODE_CONTENT);
- assert_null(tmp->next->next->next->next->next->next);
- blogc_template_free_ast(ast);
-}
-
-
-static void
-test_template_parse_invalid_block_start(void **state)
-{
- const char *a = "{% ASD %}\n";
- bc_error_t *err = NULL;
- bc_slist_t *ast = blogc_template_parse(a, strlen(a), &err);
- assert_non_null(err);
- assert_null(ast);
- assert_int_equal(err->type, BLOGC_ERROR_TEMPLATE_PARSER);
- assert_string_equal(err->msg,
- "Invalid statement syntax. Must begin with lowercase letter.\n"
- "Error occurred near line 1, position 4: {% ASD %}");
- bc_error_free(err);
- a = "{%-- block entry %}\n";
- err = NULL;
- ast = blogc_template_parse(a, strlen(a), &err);
- assert_non_null(err);
- assert_null(ast);
- assert_int_equal(err->type, BLOGC_ERROR_TEMPLATE_PARSER);
- assert_string_equal(err->msg,
- "Invalid statement syntax. Duplicated whitespace cleaner before statement.\n"
- "Error occurred near line 1, position 4: {%-- block entry %}");
- bc_error_free(err);
- a = "{% block entry --%}\n";
- err = NULL;
- ast = blogc_template_parse(a, strlen(a), &err);
- assert_non_null(err);
- assert_null(ast);
- assert_int_equal(err->type, BLOGC_ERROR_TEMPLATE_PARSER);
- assert_string_equal(err->msg,
- "Invalid statement syntax. Duplicated whitespace cleaner after statement.\n"
- "Error occurred near line 1, position 17: {% block entry --%}");
- bc_error_free(err);
-}
-
-
-static void
-test_template_parse_invalid_block_nested(void **state)
-{
- const char *a =
- "{% block entry %}\n"
- "{% block listing %}\n";
- bc_error_t *err = NULL;
- bc_slist_t *ast = blogc_template_parse(a, strlen(a), &err);
- assert_non_null(err);
- assert_null(ast);
- assert_int_equal(err->type, BLOGC_ERROR_TEMPLATE_PARSER);
- assert_string_equal(err->msg,
- "Blocks can't be nested.\n"
- "Error occurred near line 2, position 9: {% block listing %}");
- bc_error_free(err);
-}
-
-
-static void
-test_template_parse_invalid_foreach_nested(void **state)
-{
- const char *a =
- "{% foreach A %}\n"
- "{% foreach B %}\n";
- bc_error_t *err = NULL;
- bc_slist_t *ast = blogc_template_parse(a, strlen(a), &err);
- assert_non_null(err);
- assert_null(ast);
- assert_int_equal(err->type, BLOGC_ERROR_TEMPLATE_PARSER);
- assert_string_equal(err->msg,
- "'foreach' statements can't be nested.\n"
- "Error occurred near line 2, position 11: {% foreach B %}");
- bc_error_free(err);
-}
-
-
-static void
-test_template_parse_invalid_block_not_open(void **state)
-{
- const char *a = "{% endblock %}\n";
- bc_error_t *err = NULL;
- bc_slist_t *ast = blogc_template_parse(a, strlen(a), &err);
- assert_non_null(err);
- assert_null(ast);
- assert_int_equal(err->type, BLOGC_ERROR_TEMPLATE_PARSER);
- assert_string_equal(err->msg,
- "'endblock' statement without an open 'block' statement.\n"
- "Error occurred near line 1, position 12: {% endblock %}");
- bc_error_free(err);
-}
-
-
-static void
-test_template_parse_invalid_endif_not_open(void **state)
-{
- const char *a = "{% block listing %}{% endif %}{% endblock %}\n";
- bc_error_t *err = NULL;
- bc_slist_t *ast = blogc_template_parse(a, strlen(a), &err);
- assert_non_null(err);
- assert_null(ast);
- assert_int_equal(err->type, BLOGC_ERROR_TEMPLATE_PARSER);
- assert_string_equal(err->msg,
- "'endif' statement without an open 'if', 'ifdef' or 'ifndef' statement.\n"
- "Error occurred near line 1, position 28: "
- "{% block listing %}{% endif %}{% endblock %}");
- bc_error_free(err);
-}
-
-
-static void
-test_template_parse_invalid_endif_not_open_inside_block(void **state)
-{
- const char *a = "{% ifdef BOLA %}{% block listing %}{% endif %}{% endblock %}";
- bc_error_t *err = NULL;
- bc_slist_t *ast = blogc_template_parse(a, strlen(a), &err);
- assert_non_null(err);
- assert_null(ast);
- assert_int_equal(err->type, BLOGC_ERROR_TEMPLATE_PARSER);
- assert_string_equal(err->msg,
- "'endif' statement without an open 'if', 'ifdef' or 'ifndef' statement.\n"
- "Error occurred near line 1, position 44: {% ifdef BOLA %}{% block "
- "listing %}{% endif %}{% endblock %}");
- bc_error_free(err);
-}
-
-
-static void
-test_template_parse_invalid_else_not_open_inside_block(void **state)
-{
- const char *a = "{% ifdef BOLA %}{% block listing %}{% else %}{% endif %}{% endblock %}";
- bc_error_t *err = NULL;
- bc_slist_t *ast = blogc_template_parse(a, strlen(a), &err);
- assert_non_null(err);
- assert_null(ast);
- assert_int_equal(err->type, BLOGC_ERROR_TEMPLATE_PARSER);
- assert_string_equal(err->msg,
- "'else' statement without an open 'if', 'ifdef' or 'ifndef' statement.\n"
- "Error occurred near line 1, position 43: {% ifdef BOLA %}"
- "{% block listing %}{% else %}{% endif %}{% endblock %}");
- bc_error_free(err);
-}
-
-
-static void
-test_template_parse_invalid_endforeach_not_open(void **state)
-{
- const char *a = "{% endforeach %}\n";
- bc_error_t *err = NULL;
- bc_slist_t *ast = blogc_template_parse(a, strlen(a), &err);
- assert_non_null(err);
- assert_null(ast);
- assert_int_equal(err->type, BLOGC_ERROR_TEMPLATE_PARSER);
- assert_string_equal(err->msg,
- "'endforeach' statement without an open 'foreach' statement.\n"
- "Error occurred near line 1, position 14: {% endforeach %}");
- bc_error_free(err);
-}
-
-
-static void
-test_template_parse_invalid_endforeach_not_open_inside_block(void **state)
-{
- const char *a = "{% foreach TAGS %}{% block entry %}{% endforeach %}"
- "{% endblock %}\n";
- bc_error_t *err = NULL;
- bc_slist_t *ast = blogc_template_parse(a, strlen(a), &err);
- assert_non_null(err);
- assert_null(ast);
- assert_int_equal(err->type, BLOGC_ERROR_TEMPLATE_PARSER);
- assert_string_equal(err->msg,
- "'endforeach' statement without an open 'foreach' statement.\n"
- "Error occurred near line 1, position 49: {% foreach TAGS %}"
- "{% block entry %}{% endforeach %}{% endblock %}");
- bc_error_free(err);
-}
-
-
-static void
-test_template_parse_invalid_endforeach_not_open_inside_block2(void **state)
-{
- const char *a = "{% block entry %}{% foreach TAGS %}"
- "{% endforeach %}{% endforeach %}{% endblock %}\n";
- bc_error_t *err = NULL;
- bc_slist_t *ast = blogc_template_parse(a, strlen(a), &err);
- assert_non_null(err);
- assert_null(ast);
- assert_int_equal(err->type, BLOGC_ERROR_TEMPLATE_PARSER);
- assert_string_equal(err->msg,
- "'endforeach' statement without an open 'foreach' statement.\n"
- "Error occurred near line 1, position 65: {% block entry %}"
- "{% foreach TAGS %}{% endforeach %}{% endforeach %}{% endblock %}");
- bc_error_free(err);
-}
-
-
-static void
-test_template_parse_invalid_endforeach_not_closed_inside_block(void **state)
-{
- const char *a = "{% block entry %}{% foreach TAGS %}{% endblock %}"
- "{% endforeach %}\n";
- bc_error_t *err = NULL;
- bc_slist_t *ast = blogc_template_parse(a, strlen(a), &err);
- assert_non_null(err);
- assert_null(ast);
- assert_int_equal(err->type, BLOGC_ERROR_TEMPLATE_PARSER);
- assert_string_equal(err->msg,
- "An open 'foreach' statement was not closed inside a 'entry' block!");
- bc_error_free(err);
-}
-
-
-static void
-test_template_parse_invalid_endforeach_not_closed_inside_block2(void **state)
-{
- const char *a = "{% block entry %}{% foreach TAGS %}{% endforeach %}"
- "{% foreach TAGS %}{% endblock %}{% endforeach %}\n";
- bc_error_t *err = NULL;
- bc_slist_t *ast = blogc_template_parse(a, strlen(a), &err);
- assert_non_null(err);
- assert_null(ast);
- assert_int_equal(err->type, BLOGC_ERROR_TEMPLATE_PARSER);
- assert_string_equal(err->msg,
- "An open 'foreach' statement was not closed inside a 'entry' block!");
- bc_error_free(err);
-}
-
-
-static void
-test_template_parse_invalid_block_name(void **state)
-{
- const char *a = "{% chunda %}\n";
- bc_error_t *err = NULL;
- bc_slist_t *ast = blogc_template_parse(a, strlen(a), &err);
- assert_non_null(err);
- assert_null(ast);
- assert_int_equal(err->type, BLOGC_ERROR_TEMPLATE_PARSER);
- assert_string_equal(err->msg,
- "Invalid statement type: Allowed types are: 'block', 'endblock', 'if', "
- "'ifdef', 'ifndef', 'else', 'endif', 'foreach' and 'endforeach'.\n"
- "Error occurred near line 1, position 10: {% chunda %}");
- bc_error_free(err);
-}
-
-
-static void
-test_template_parse_invalid_block_type_start(void **state)
-{
- const char *a = "{% block ENTRY %}\n";
- bc_error_t *err = NULL;
- bc_slist_t *ast = blogc_template_parse(a, strlen(a), &err);
- assert_non_null(err);
- assert_null(ast);
- assert_int_equal(err->type, BLOGC_ERROR_TEMPLATE_PARSER);
- assert_string_equal(err->msg,
- "Invalid block syntax. Must begin with lowercase letter.\n"
- "Error occurred near line 1, position 10: {% block ENTRY %}");
- bc_error_free(err);
-}
-
-
-static void
-test_template_parse_invalid_block_type(void **state)
-{
- const char *a = "{% block chunda %}\n";
- bc_error_t *err = NULL;
- bc_slist_t *ast = blogc_template_parse(a, strlen(a), &err);
- assert_non_null(err);
- assert_null(ast);
- assert_int_equal(err->type, BLOGC_ERROR_TEMPLATE_PARSER);
- assert_string_equal(err->msg,
- "Invalid block type. Allowed types are: 'entry', 'listing', 'listing_once', "
- "'listing_empty' and 'listing_entry'.\n"
- "Error occurred near line 1, position 16: {% block chunda %}");
- bc_error_free(err);
-}
-
-
-static void
-test_template_parse_invalid_ifdef_start(void **state)
-{
- const char *a = "{% block entry %}{% ifdef guda %}\n";
- bc_error_t *err = NULL;
- bc_slist_t *ast = blogc_template_parse(a, strlen(a), &err);
- assert_non_null(err);
- assert_null(ast);
- assert_int_equal(err->type, BLOGC_ERROR_TEMPLATE_PARSER);
- assert_string_equal(err->msg,
- "Invalid variable name. Must begin with uppercase letter.\n"
- "Error occurred near line 1, position 27: "
- "{% block entry %}{% ifdef guda %}");
- bc_error_free(err);
-}
-
-
-static void
-test_template_parse_invalid_foreach_start(void **state)
-{
- const char *a = "{% block entry %}{% foreach guda %}\n";
- bc_error_t *err = NULL;
- bc_slist_t *ast = blogc_template_parse(a, strlen(a), &err);
- assert_non_null(err);
- assert_null(ast);
- assert_int_equal(err->type, BLOGC_ERROR_TEMPLATE_PARSER);
- assert_string_equal(err->msg,
- "Invalid foreach variable name. Must begin with uppercase letter.\n"
- "Error occurred near line 1, position 29: "
- "{% block entry %}{% foreach guda %}");
- bc_error_free(err);
-}
-
-
-static void
-test_template_parse_invalid_ifdef_variable(void **state)
-{
- const char *a = "{% block entry %}{% ifdef BoLA %}\n";
- bc_error_t *err = NULL;
- bc_slist_t *ast = blogc_template_parse(a, strlen(a), &err);
- assert_non_null(err);
- assert_null(ast);
- assert_int_equal(err->type, BLOGC_ERROR_TEMPLATE_PARSER);
- assert_string_equal(err->msg,
- "Invalid variable name. Must be uppercase letter, number or '_'.\n"
- "Error occurred near line 1, position 28: "
- "{% block entry %}{% ifdef BoLA %}");
- bc_error_free(err);
-}
-
-
-static void
-test_template_parse_invalid_ifdef_variable2(void **state)
-{
- const char *a = "{% block entry %}{% ifdef 0123 %}\n";
- bc_error_t *err = NULL;
- bc_slist_t *ast = blogc_template_parse(a, strlen(a), &err);
- assert_non_null(err);
- assert_null(ast);
- assert_int_equal(err->type, BLOGC_ERROR_TEMPLATE_PARSER);
- assert_string_equal(err->msg,
- "Invalid variable name. Must begin with uppercase letter.\n"
- "Error occurred near line 1, position 27: "
- "{% block entry %}{% ifdef 0123 %}");
- bc_error_free(err);
-}
-
-
-static void
-test_template_parse_invalid_foreach_variable(void **state)
-{
- const char *a = "{% block entry %}{% foreach BoLA %}\n";
- bc_error_t *err = NULL;
- bc_slist_t *ast = blogc_template_parse(a, strlen(a), &err);
- assert_non_null(err);
- assert_null(ast);
- assert_int_equal(err->type, BLOGC_ERROR_TEMPLATE_PARSER);
- assert_string_equal(err->msg,
- "Invalid foreach variable name. Must be uppercase letter, number or '_'.\n"
- "Error occurred near line 1, position 30: "
- "{% block entry %}{% foreach BoLA %}");
- bc_error_free(err);
-}
-
-
-static void
-test_template_parse_invalid_foreach_variable2(void **state)
-{
- const char *a = "{% block entry %}{% foreach 0123 %}\n";
- bc_error_t *err = NULL;
- bc_slist_t *ast = blogc_template_parse(a, strlen(a), &err);
- assert_non_null(err);
- assert_null(ast);
- assert_int_equal(err->type, BLOGC_ERROR_TEMPLATE_PARSER);
- assert_string_equal(err->msg,
- "Invalid foreach variable name. Must begin with uppercase letter.\n"
- "Error occurred near line 1, position 29: {% block entry %}"
- "{% foreach 0123 %}");
- bc_error_free(err);
-}
-
-
-static void
-test_template_parse_invalid_if_operator(void **state)
-{
- const char *a = "{% block entry %}{% if BOLA = \"asd\" %}\n";
- bc_error_t *err = NULL;
- bc_slist_t *ast = blogc_template_parse(a, strlen(a), &err);
- assert_non_null(err);
- assert_null(ast);
- assert_int_equal(err->type, BLOGC_ERROR_TEMPLATE_PARSER);
- assert_string_equal(err->msg,
- "Invalid 'if' operator. Must be '<', '>', '<=', '>=', '==' or '!='.\n"
- "Error occurred near line 1, position 29: "
- "{% block entry %}{% if BOLA = \"asd\" %}");
- bc_error_free(err);
-}
-
-
-static void
-test_template_parse_invalid_if_operand(void **state)
-{
- const char *a = "{% block entry %}{% if BOLA == asd %}\n";
- bc_error_t *err = NULL;
- bc_slist_t *ast = blogc_template_parse(a, strlen(a), &err);
- assert_non_null(err);
- assert_null(ast);
- assert_int_equal(err->type, BLOGC_ERROR_TEMPLATE_PARSER);
- assert_string_equal(err->msg,
- "Invalid 'if' operand. Must be double-quoted static string or variable.\n"
- "Error occurred near line 1, position 32: "
- "{% block entry %}{% if BOLA == asd %}");
- bc_error_free(err);
-}
-
-
-static void
-test_template_parse_invalid_if_operand2(void **state)
-{
- const char *a = "{% block entry %}{% if BOLA == \"asd %}\n";
- bc_error_t *err = NULL;
- bc_slist_t *ast = blogc_template_parse(a, strlen(a), &err);
- assert_non_null(err);
- assert_null(ast);
- assert_int_equal(err->type, BLOGC_ERROR_TEMPLATE_PARSER);
- assert_string_equal(err->msg,
- "Found an open double-quoted string.\n"
- "Error occurred near line 1, position 32: "
- "{% block entry %}{% if BOLA == \"asd %}");
- bc_error_free(err);
-}
-
-
-static void
-test_template_parse_invalid_if_operand3(void **state)
-{
- const char *a = "{% block entry %}{% if BOLA == 0123 %}\n";
- bc_error_t *err = NULL;
- bc_slist_t *ast = blogc_template_parse(a, strlen(a), &err);
- assert_non_null(err);
- assert_null(ast);
- assert_int_equal(err->type, BLOGC_ERROR_TEMPLATE_PARSER);
- assert_string_equal(err->msg,
- "Invalid 'if' operand. Must be double-quoted static string or variable.\n"
- "Error occurred near line 1, position 32: "
- "{% block entry %}{% if BOLA == 0123 %}");
- bc_error_free(err);
-}
-
-
-static void
-test_template_parse_invalid_else1(void **state)
-{
- const char *a = "{% else %}\n";
- bc_error_t *err = NULL;
- bc_slist_t *ast = blogc_template_parse(a, strlen(a), &err);
- assert_non_null(err);
- assert_null(ast);
- assert_int_equal(err->type, BLOGC_ERROR_TEMPLATE_PARSER);
- assert_string_equal(err->msg,
- "'else' statement without an open 'if', 'ifdef' or 'ifndef' statement.\n"
- "Error occurred near line 1, position 8: {% else %}");
- bc_error_free(err);
-}
-
-
-static void
-test_template_parse_invalid_else2(void **state)
-{
- const char *a = "{% if BOLA == \"123\" %}{% if GUDA == \"1\" %}{% else %}{% else %}\n";
- bc_error_t *err = NULL;
- bc_slist_t *ast = blogc_template_parse(a, strlen(a), &err);
- assert_non_null(err);
- assert_null(ast);
- assert_int_equal(err->type, BLOGC_ERROR_TEMPLATE_PARSER);
- assert_string_equal(err->msg,
- "More than one 'else' statement for an open 'if', 'ifdef' or 'ifndef' "
- "statement.\nError occurred near line 1, position 60: {% if BOLA == \"123\" "
- "%}{% if GUDA == \"1\" %}{% else %}{% else %}");
- bc_error_free(err);
-}
-
-
-static void
-test_template_parse_invalid_else3(void **state)
-{
- const char *a =
- "{% if BOLA == \"123\" %}\n"
- "{% if GUDA == \"1\" %}\n"
- "{% else %}\n"
- "asd\n"
- "{% endif %}\n"
- "{% else %}\n"
- "{% else %}\n";
- bc_error_t *err = NULL;
- bc_slist_t *ast = blogc_template_parse(a, strlen(a), &err);
- assert_non_null(err);
- assert_null(ast);
- assert_int_equal(err->type, BLOGC_ERROR_TEMPLATE_PARSER);
- assert_string_equal(err->msg,
- "More than one 'else' statement for an open 'if', 'ifdef' or 'ifndef' "
- "statement.\nError occurred near line 7, position 8: {% else %}");
- bc_error_free(err);
-}
-
-
-static void
-test_template_parse_invalid_block_end(void **state)
-{
- const char *a = "{% block entry }}\n";
- bc_error_t *err = NULL;
- bc_slist_t *ast = blogc_template_parse(a, strlen(a), &err);
- assert_non_null(err);
- assert_null(ast);
- assert_int_equal(err->type, BLOGC_ERROR_TEMPLATE_PARSER);
- assert_string_equal(err->msg,
- "Invalid statement syntax. Must end with '%}'.\n"
- "Error occurred near line 1, position 16: {% block entry }}");
- bc_error_free(err);
-}
-
-
-static void
-test_template_parse_invalid_variable_name(void **state)
-{
- const char *a = "{% block entry %}{{ bola }}{% endblock %}\n";
- bc_error_t *err = NULL;
- bc_slist_t *ast = blogc_template_parse(a, strlen(a), &err);
- assert_non_null(err);
- assert_null(ast);
- assert_int_equal(err->type, BLOGC_ERROR_TEMPLATE_PARSER);
- assert_string_equal(err->msg,
- "Invalid variable name. Must begin with uppercase letter.\n"
- "Error occurred near line 1, position 21: "
- "{% block entry %}{{ bola }}{% endblock %}");
- bc_error_free(err);
-}
-
-
-static void
-test_template_parse_invalid_variable_name2(void **state)
-{
- const char *a = "{% block entry %}{{ Bola }}{% endblock %}\n";
- bc_error_t *err = NULL;
- bc_slist_t *ast = blogc_template_parse(a, strlen(a), &err);
- assert_non_null(err);
- assert_null(ast);
- assert_int_equal(err->type, BLOGC_ERROR_TEMPLATE_PARSER);
- assert_string_equal(err->msg,
- "Invalid variable name. Must be uppercase letter, number or '_'.\n"
- "Error occurred near line 1, position 22: "
- "{% block entry %}{{ Bola }}{% endblock %}");
- bc_error_free(err);
-}
-
-
-static void
-test_template_parse_invalid_variable_name3(void **state)
-{
- const char *a = "{% block entry %}{{ 0123 }}{% endblock %}\n";
- bc_error_t *err = NULL;
- bc_slist_t *ast = blogc_template_parse(a, strlen(a), &err);
- assert_non_null(err);
- assert_null(ast);
- assert_int_equal(err->type, BLOGC_ERROR_TEMPLATE_PARSER);
- assert_string_equal(err->msg,
- "Invalid variable name. Must begin with uppercase letter.\n"
- "Error occurred near line 1, position 21: {% block entry %}{{ 0123 }}"
- "{% endblock %}");
- bc_error_free(err);
-}
-
-
-static void
-test_template_parse_invalid_variable_end(void **state)
-{
- const char *a = "{% block entry %}{{ BOLA %}{% endblock %}\n";
- bc_error_t *err = NULL;
- bc_slist_t *ast = blogc_template_parse(a, strlen(a), &err);
- assert_non_null(err);
- assert_null(ast);
- assert_int_equal(err->type, BLOGC_ERROR_TEMPLATE_PARSER);
- assert_string_equal(err->msg,
- "Invalid statement syntax. Must end with '}}'.\n"
- "Error occurred near line 1, position 26: "
- "{% block entry %}{{ BOLA %}{% endblock %}");
- bc_error_free(err);
-}
-
-
-static void
-test_template_parse_invalid_close(void **state)
-{
- const char *a = "{% block entry %%\n";
- bc_error_t *err = NULL;
- bc_slist_t *ast = blogc_template_parse(a, strlen(a), &err);
- assert_non_null(err);
- assert_null(ast);
- assert_int_equal(err->type, BLOGC_ERROR_TEMPLATE_PARSER);
- assert_string_equal(err->msg,
- "Invalid statement syntax. Must end with '}'.\n"
- "Error occurred near line 1, position 17: {% block entry %%");
- bc_error_free(err);
-}
-
-
-static void
-test_template_parse_invalid_close2(void **state)
-{
- const char *a = "{% block entry %}{{ BOLA }%{% endblock %}\n";
- bc_error_t *err = NULL;
- bc_slist_t *ast = blogc_template_parse(a, strlen(a), &err);
- assert_non_null(err);
- assert_null(ast);
- assert_int_equal(err->type, BLOGC_ERROR_TEMPLATE_PARSER);
- assert_string_equal(err->msg,
- "Invalid statement syntax. Must end with '}'.\n"
- "Error occurred near line 1, position 27: "
- "{% block entry %}{{ BOLA }%{% endblock %}");
- bc_error_free(err);
-}
-
-
-static void
-test_template_parse_invalid_endif_not_closed(void **state)
-{
- const char *a = "{% block entry %}{% endblock %}{% ifdef BOLA %}\n";
- bc_error_t *err = NULL;
- bc_slist_t *ast = blogc_template_parse(a, strlen(a), &err);
- assert_non_null(err);
- assert_null(ast);
- assert_int_equal(err->type, BLOGC_ERROR_TEMPLATE_PARSER);
- assert_string_equal(err->msg, "1 open 'if', 'ifdef' and/or 'ifndef' statements "
- "were not closed!");
- bc_error_free(err);
-}
-
-
-static void
-test_template_parse_invalid_endif_not_closed_inside_block(void **state)
-{
- const char *a = "{% block listing %}{% ifdef BOLA %}{% endblock %}{% endif %}";
- bc_error_t *err = NULL;
- bc_slist_t *ast = blogc_template_parse(a, strlen(a), &err);
- assert_non_null(err);
- assert_null(ast);
- assert_int_equal(err->type, BLOGC_ERROR_TEMPLATE_PARSER);
- assert_string_equal(err->msg,
- "1 open 'if', 'ifdef' and/or 'ifndef' statements were not closed inside "
- "a 'listing' block!");
- bc_error_free(err);
-}
-
-
-static void
-test_template_parse_invalid_else_not_closed_inside_block(void **state)
-{
- const char *a = "{% block listing %}{% ifdef BOLA %}{% else %}{% endblock %}{% endif %}";
- bc_error_t *err = NULL;
- bc_slist_t *ast = blogc_template_parse(a, strlen(a), &err);
- assert_non_null(err);
- assert_null(ast);
- assert_int_equal(err->type, BLOGC_ERROR_TEMPLATE_PARSER);
- assert_string_equal(err->msg,
- "1 open 'if', 'ifdef' and/or 'ifndef' statements were not closed inside "
- "a 'listing' block!");
- bc_error_free(err);
-}
-
-
-static void
-test_template_parse_invalid_block_not_closed(void **state)
-{
- const char *a = "{% block entry %}\n";
- bc_error_t *err = NULL;
- bc_slist_t *ast = blogc_template_parse(a, strlen(a), &err);
- assert_non_null(err);
- assert_null(ast);
- assert_int_equal(err->type, BLOGC_ERROR_TEMPLATE_PARSER);
- assert_string_equal(err->msg, "An open block was not closed!");
- bc_error_free(err);
-}
-
-
-static void
-test_template_parse_invalid_foreach_not_closed(void **state)
-{
- const char *a = "{% foreach ASD %}\n";
- bc_error_t *err = NULL;
- bc_slist_t *ast = blogc_template_parse(a, strlen(a), &err);
- assert_non_null(err);
- assert_null(ast);
- assert_int_equal(err->type, BLOGC_ERROR_TEMPLATE_PARSER);
- assert_string_equal(err->msg, "An open 'foreach' statement was not closed!");
- bc_error_free(err);
-}
-
-
-int
-main(void)
-{
- const struct CMUnitTest tests[] = {
- cmocka_unit_test(test_template_parse),
- cmocka_unit_test(test_template_parse_crlf),
- cmocka_unit_test(test_template_parse_html),
- cmocka_unit_test(test_template_parse_html_whitespace),
- cmocka_unit_test(test_template_parse_ifdef_and_var_outside_block),
- cmocka_unit_test(test_template_parse_nested_else),
- cmocka_unit_test(test_template_parse_invalid_block_start),
- cmocka_unit_test(test_template_parse_invalid_block_nested),
- cmocka_unit_test(test_template_parse_invalid_foreach_nested),
- cmocka_unit_test(test_template_parse_invalid_block_not_open),
- cmocka_unit_test(test_template_parse_invalid_endif_not_open),
- cmocka_unit_test(test_template_parse_invalid_endif_not_open_inside_block),
- cmocka_unit_test(test_template_parse_invalid_else_not_open_inside_block),
- cmocka_unit_test(test_template_parse_invalid_endforeach_not_open),
- cmocka_unit_test(test_template_parse_invalid_endforeach_not_open_inside_block),
- cmocka_unit_test(test_template_parse_invalid_endforeach_not_open_inside_block2),
- cmocka_unit_test(test_template_parse_invalid_endforeach_not_closed_inside_block),
- cmocka_unit_test(test_template_parse_invalid_endforeach_not_closed_inside_block2),
- cmocka_unit_test(test_template_parse_invalid_block_name),
- cmocka_unit_test(test_template_parse_invalid_block_type_start),
- cmocka_unit_test(test_template_parse_invalid_block_type),
- cmocka_unit_test(test_template_parse_invalid_ifdef_start),
- cmocka_unit_test(test_template_parse_invalid_foreach_start),
- cmocka_unit_test(test_template_parse_invalid_ifdef_variable),
- cmocka_unit_test(test_template_parse_invalid_ifdef_variable2),
- cmocka_unit_test(test_template_parse_invalid_foreach_variable),
- cmocka_unit_test(test_template_parse_invalid_foreach_variable2),
- cmocka_unit_test(test_template_parse_invalid_if_operator),
- cmocka_unit_test(test_template_parse_invalid_if_operand),
- cmocka_unit_test(test_template_parse_invalid_if_operand2),
- cmocka_unit_test(test_template_parse_invalid_if_operand3),
- cmocka_unit_test(test_template_parse_invalid_else1),
- cmocka_unit_test(test_template_parse_invalid_else2),
- cmocka_unit_test(test_template_parse_invalid_else3),
- cmocka_unit_test(test_template_parse_invalid_block_end),
- cmocka_unit_test(test_template_parse_invalid_variable_name),
- cmocka_unit_test(test_template_parse_invalid_variable_name2),
- cmocka_unit_test(test_template_parse_invalid_variable_name3),
- cmocka_unit_test(test_template_parse_invalid_variable_end),
- cmocka_unit_test(test_template_parse_invalid_close),
- cmocka_unit_test(test_template_parse_invalid_close2),
- cmocka_unit_test(test_template_parse_invalid_endif_not_closed),
- cmocka_unit_test(test_template_parse_invalid_endif_not_closed_inside_block),
- cmocka_unit_test(test_template_parse_invalid_else_not_closed_inside_block),
- cmocka_unit_test(test_template_parse_invalid_block_not_closed),
- cmocka_unit_test(test_template_parse_invalid_foreach_not_closed),
- };
- return cmocka_run_group_tests(tests, NULL, NULL);
-}
diff --git a/tests/blogc/check_toctree.c b/tests/blogc/check_toctree.c
deleted file mode 100644
index 05cc008..0000000
--- a/tests/blogc/check_toctree.c
+++ /dev/null
@@ -1,234 +0,0 @@
-/*
- * blogc: A blog compiler.
- * Copyright (C) 2014-2020 Rafael G. Martins <rafael@rafaelmartins.eng.br>
- *
- * This program can be distributed under the terms of the BSD License.
- * See the file LICENSE.
- */
-
-#include <stdarg.h>
-#include <stddef.h>
-#include <setjmp.h>
-#include <cmocka.h>
-#include <stdlib.h>
-#include <string.h>
-#include <stdio.h>
-#include "../../src/common/utils.h"
-#include "../../src/blogc/toctree.h"
-
-
-static void
-test_toctree_append(void **state)
-{
- bc_slist_t *l = NULL;
-
- l = blogc_toctree_append(l, 0, "", "");
- assert_null(l);
-
- l = blogc_toctree_append(l, 1, "f1", "bola");
- assert_non_null(l);
- assert_int_equal(((blogc_toctree_header_t*) l->data)->level, 1);
- assert_string_equal(((blogc_toctree_header_t*) l->data)->slug, "f1");
- assert_string_equal(((blogc_toctree_header_t*) l->data)->text, "bola");
- assert_null(l->next);
-
- l = blogc_toctree_append(l, 2, "f2", "guda");
- assert_non_null(l);
- assert_int_equal(((blogc_toctree_header_t*) l->data)->level, 1);
- assert_string_equal(((blogc_toctree_header_t*) l->data)->slug, "f1");
- assert_string_equal(((blogc_toctree_header_t*) l->data)->text, "bola");
- assert_non_null(l->next);
- assert_int_equal(((blogc_toctree_header_t*) l->next->data)->level, 2);
- assert_string_equal(((blogc_toctree_header_t*) l->next->data)->slug, "f2");
- assert_string_equal(((blogc_toctree_header_t*) l->next->data)->text, "guda");
- assert_null(l->next->next);
-
- l = blogc_toctree_append(l, 0, "", "");
- assert_non_null(l);
- assert_int_equal(((blogc_toctree_header_t*) l->data)->level, 1);
- assert_string_equal(((blogc_toctree_header_t*) l->data)->slug, "f1");
- assert_string_equal(((blogc_toctree_header_t*) l->data)->text, "bola");
- assert_non_null(l->next);
- assert_int_equal(((blogc_toctree_header_t*) l->next->data)->level, 2);
- assert_string_equal(((blogc_toctree_header_t*) l->next->data)->slug, "f2");
- assert_string_equal(((blogc_toctree_header_t*) l->next->data)->text, "guda");
- assert_null(l->next->next);
-
- blogc_toctree_free(l);
-}
-
-
-static void
-test_toctree_render(void **state)
-{
- bc_slist_t *l = NULL;
- assert_null(blogc_toctree_render(l, 6, NULL));
-
- l = blogc_toctree_append(l, 1, "f1", "bola");
- l = blogc_toctree_append(l, 1, "f2", "guda");
- l = blogc_toctree_append(l, 2, "f3", "asd");
- l = blogc_toctree_append(l, 3, NULL, "foo");
- l = blogc_toctree_append(l, 1, "f5", NULL);
- l = blogc_toctree_append(l, 5, NULL, NULL);
- char *o = blogc_toctree_render(l, -2, NULL);
- assert_string_equal(o,
- "<ul>\n"
- " <li><a href=\"#f1\">bola</a></li>\n"
- " <li><a href=\"#f2\">guda</a></li>\n"
- " <ul>\n"
- " <li><a href=\"#f3\">asd</a></li>\n"
- " <ul>\n"
- " <li>foo</li>\n"
- " </ul>\n"
- " </ul>\n"
- " <li><a href=\"#f5\"></a></li>\n"
- " <ul>\n"
- " <ul>\n"
- " <ul>\n"
- " <ul>\n"
- " <li></li>\n"
- " </ul>\n"
- " </ul>\n"
- " </ul>\n"
- " </ul>\n"
- "</ul>\n");
- free(o);
-
- o = blogc_toctree_render(l, -1, "\n");
- assert_string_equal(o,
- "<ul>\n"
- " <li><a href=\"#f1\">bola</a></li>\n"
- " <li><a href=\"#f2\">guda</a></li>\n"
- " <ul>\n"
- " <li><a href=\"#f3\">asd</a></li>\n"
- " <ul>\n"
- " <li>foo</li>\n"
- " </ul>\n"
- " </ul>\n"
- " <li><a href=\"#f5\"></a></li>\n"
- " <ul>\n"
- " <ul>\n"
- " <ul>\n"
- " <ul>\n"
- " <li></li>\n"
- " </ul>\n"
- " </ul>\n"
- " </ul>\n"
- " </ul>\n"
- "</ul>\n");
- free(o);
-
- o = blogc_toctree_render(l, 6, "\r\n");
- assert_string_equal(o,
- "<ul>\r\n"
- " <li><a href=\"#f1\">bola</a></li>\r\n"
- " <li><a href=\"#f2\">guda</a></li>\r\n"
- " <ul>\r\n"
- " <li><a href=\"#f3\">asd</a></li>\r\n"
- " <ul>\r\n"
- " <li>foo</li>\r\n"
- " </ul>\r\n"
- " </ul>\r\n"
- " <li><a href=\"#f5\"></a></li>\r\n"
- " <ul>\r\n"
- " <ul>\r\n"
- " <ul>\r\n"
- " <ul>\r\n"
- " <li></li>\r\n"
- " </ul>\r\n"
- " </ul>\r\n"
- " </ul>\r\n"
- " </ul>\r\n"
- "</ul>\r\n");
- free(o);
-
- o = blogc_toctree_render(l, 5, NULL);
- assert_string_equal(o,
- "<ul>\n"
- " <li><a href=\"#f1\">bola</a></li>\n"
- " <li><a href=\"#f2\">guda</a></li>\n"
- " <ul>\n"
- " <li><a href=\"#f3\">asd</a></li>\n"
- " <ul>\n"
- " <li>foo</li>\n"
- " </ul>\n"
- " </ul>\n"
- " <li><a href=\"#f5\"></a></li>\n"
- " <ul>\n"
- " <ul>\n"
- " <ul>\n"
- " <ul>\n"
- " <li></li>\n"
- " </ul>\n"
- " </ul>\n"
- " </ul>\n"
- " </ul>\n"
- "</ul>\n");
- free(o);
-
- o = blogc_toctree_render(l, 4, "\n");
- assert_string_equal(o,
- "<ul>\n"
- " <li><a href=\"#f1\">bola</a></li>\n"
- " <li><a href=\"#f2\">guda</a></li>\n"
- " <ul>\n"
- " <li><a href=\"#f3\">asd</a></li>\n"
- " <ul>\n"
- " <li>foo</li>\n"
- " </ul>\n"
- " </ul>\n"
- " <li><a href=\"#f5\"></a></li>\n"
- "</ul>\n");
- free(o);
-
- o = blogc_toctree_render(l, 3, "\r\n");
- assert_string_equal(o,
- "<ul>\r\n"
- " <li><a href=\"#f1\">bola</a></li>\r\n"
- " <li><a href=\"#f2\">guda</a></li>\r\n"
- " <ul>\r\n"
- " <li><a href=\"#f3\">asd</a></li>\r\n"
- " <ul>\r\n"
- " <li>foo</li>\r\n"
- " </ul>\r\n"
- " </ul>\r\n"
- " <li><a href=\"#f5\"></a></li>\r\n"
- "</ul>\r\n");
- free(o);
-
- o = blogc_toctree_render(l, 2, NULL);
- assert_string_equal(o,
- "<ul>\n"
- " <li><a href=\"#f1\">bola</a></li>\n"
- " <li><a href=\"#f2\">guda</a></li>\n"
- " <ul>\n"
- " <li><a href=\"#f3\">asd</a></li>\n"
- " </ul>\n"
- " <li><a href=\"#f5\"></a></li>\n"
- "</ul>\n");
- free(o);
-
- o = blogc_toctree_render(l, 1, NULL);
- assert_string_equal(o,
- "<ul>\n"
- " <li><a href=\"#f1\">bola</a></li>\n"
- " <li><a href=\"#f2\">guda</a></li>\n"
- " <li><a href=\"#f5\"></a></li>\n"
- "</ul>\n");
- free(o);
-
- assert_null(blogc_toctree_render(l, 0, NULL));
-
- blogc_toctree_free(l);
-}
-
-
-int
-main(void)
-{
- const struct CMUnitTest tests[] = {
- cmocka_unit_test(test_toctree_append),
- cmocka_unit_test(test_toctree_render),
- };
- return cmocka_run_group_tests(tests, NULL, NULL);
-}
diff --git a/tests/blogc/check_content_parser.c b/tests/check_content_parser.c
index 71f1680..fb43201 100644
--- a/tests/blogc/check_content_parser.c
+++ b/tests/check_content_parser.c
@@ -1,6 +1,6 @@
/*
* blogc: A blog compiler.
- * Copyright (C) 2014-2020 Rafael G. Martins <rafael@rafaelmartins.eng.br>
+ * Copyright (C) 2015-2016 Rafael G. Martins <rafael@rafaelmartins.eng.br>
*
* This program can be distributed under the terms of the BSD License.
* See the file LICENSE.
@@ -11,8 +11,7 @@
#include <setjmp.h>
#include <cmocka.h>
#include <stdlib.h>
-#include "../../src/blogc/toctree.h"
-#include "../../src/blogc/content-parser.h"
+#include "../src/content-parser.h"
static void
@@ -123,11 +122,8 @@ test_is_ordered_list_item(void **state)
static void
test_content_parse(void **state)
{
- size_t l = 0;
- char *t = NULL;
+ char *l = NULL;
char *d = NULL;
- char *n = NULL;
- bc_slist_t *h = NULL;
char *html = blogc_content_parse(
"# um\n"
"## dois\n"
@@ -169,17 +165,11 @@ test_content_parse(void **state)
"\n"
"-- asd\n"
"\n"
- "--- lol\n", &l, &t, &d, &n, &h);
+ "--- lol\n", &l, &d);
assert_non_null(html);
- assert_int_equal(l, 0);
- assert_non_null(t);
- assert_string_equal(t, "um");
+ assert_null(l);
assert_non_null(d);
assert_string_equal(d, "bola chunda");
- assert_non_null(n);
- assert_string_equal(n, "\n");
- assert_non_null(h);
- assert_int_equal(bc_slist_length(h), 6);
assert_string_equal(html,
"<h1 id=\"um\">um</h1>\n"
"<h2 id=\"dois\">dois</h2>\n"
@@ -217,21 +207,15 @@ test_content_parse(void **state)
"<p>&ndash; asd</p>\n"
"<p>&mdash; lol</p>\n");
free(html);
- free(t);
free(d);
- free(n);
- blogc_toctree_free(h);
}
static void
test_content_parse_crlf(void **state)
{
- size_t l = 0;
- char *t = NULL;
+ char *l = NULL;
char *d = NULL;
- char *n = NULL;
- bc_slist_t *h = NULL;
char *html = blogc_content_parse(
"# um\r\n"
"## dois\r\n"
@@ -273,17 +257,11 @@ test_content_parse_crlf(void **state)
"\r\n"
"-- asd\r\n"
"\r\n"
- "--- lol\r\n", &l, &t, &d, &n, &h);
+ "--- lol\r\n", &l, &d);
assert_non_null(html);
- assert_int_equal(l, 0);
- assert_non_null(t);
- assert_string_equal(t, "um");
+ assert_null(l);
assert_non_null(d);
assert_string_equal(d, "bola chunda");
- assert_non_null(n);
- assert_string_equal(n, "\r\n");
- assert_non_null(h);
- assert_int_equal(bc_slist_length(h), 6);
assert_string_equal(html,
"<h1 id=\"um\">um</h1>\r\n"
"<h2 id=\"dois\">dois</h2>\r\n"
@@ -321,21 +299,15 @@ test_content_parse_crlf(void **state)
"<p>&ndash; asd</p>\r\n"
"<p>&mdash; lol</p>\r\n");
free(html);
- free(t);
free(d);
- free(n);
- blogc_toctree_free(h);
}
static void
test_content_parse_with_excerpt(void **state)
{
- size_t l = 0;
- char *t = NULL;
+ char *l = NULL;
char *d = NULL;
- char *n = NULL;
- bc_slist_t *h = NULL;
char *html = blogc_content_parse(
"# test\n"
"\n"
@@ -344,32 +316,24 @@ test_content_parse_with_excerpt(void **state)
"..\n"
"\n"
"guda\n"
- "lol", &l, &t, &d, &n, &h);
+ "lol", &l, &d);
assert_non_null(html);
- assert_int_equal(l, 38);
- assert_non_null(t);
- assert_string_equal(t, "test");
+ assert_non_null(l);
+ assert_string_equal(l,
+ "<h1 id=\"test\">test</h1>\n"
+ "<p>chunda</p>\n");
assert_non_null(d);
assert_string_equal(d, "chunda");
- assert_non_null(n);
- assert_string_equal(n, "\n");
- assert_non_null(h);
- assert_int_equal(bc_slist_length(h), 1);
assert_string_equal(html,
"<h1 id=\"test\">test</h1>\n"
"<p>chunda</p>\n"
"<p>guda\n"
"lol</p>\n");
free(html);
- l = 0;
- free(t);
+ free(l);
+ l = NULL;
free(d);
- free(n);
- blogc_toctree_free(h);
- t = NULL;
d = NULL;
- n = NULL;
- h = NULL;
html = blogc_content_parse(
"# test\n"
"\n"
@@ -378,38 +342,30 @@ test_content_parse_with_excerpt(void **state)
"...\n"
"\n"
"guda\n"
- "lol", &l, &t, &d, &n, &h);
+ "lol", &l, &d);
assert_non_null(html);
- assert_int_equal(l, 38);
- assert_non_null(t);
- assert_string_equal(t, "test");
+ assert_non_null(l);
+ assert_string_equal(l,
+ "<h1 id=\"test\">test</h1>\n"
+ "<p>chunda</p>\n");
assert_non_null(d);
assert_string_equal(d, "chunda");
- assert_non_null(n);
- assert_string_equal(n, "\n");
- assert_non_null(h);
- assert_int_equal(bc_slist_length(h), 1);
assert_string_equal(html,
"<h1 id=\"test\">test</h1>\n"
"<p>chunda</p>\n"
"<p>guda\n"
"lol</p>\n");
free(html);
- free(t);
+ free(l);
free(d);
- free(n);
- blogc_toctree_free(h);
}
static void
test_content_parse_with_excerpt_crlf(void **state)
{
- size_t l = 0;
- char *t = NULL;
+ char *l = NULL;
char *d = NULL;
- char *n = NULL;
- bc_slist_t *h = NULL;
char *html = blogc_content_parse(
"# test\r\n"
"\r\n"
@@ -418,32 +374,24 @@ test_content_parse_with_excerpt_crlf(void **state)
"..\r\n"
"\r\n"
"guda\r\n"
- "lol", &l, &t, &d, &n, &h);
+ "lol", &l, &d);
assert_non_null(html);
- assert_int_equal(l, 40);
- assert_non_null(t);
- assert_string_equal(t, "test");
+ assert_non_null(l);
+ assert_string_equal(l,
+ "<h1 id=\"test\">test</h1>\r\n"
+ "<p>chunda</p>\r\n");
assert_non_null(d);
assert_string_equal(d, "chunda");
- assert_non_null(n);
- assert_string_equal(n, "\r\n");
- assert_non_null(h);
- assert_int_equal(bc_slist_length(h), 1);
assert_string_equal(html,
"<h1 id=\"test\">test</h1>\r\n"
"<p>chunda</p>\r\n"
"<p>guda\r\n"
"lol</p>\r\n");
free(html);
- l = 0;
- free(t);
+ free(l);
+ l = NULL;
free(d);
- free(n);
- blogc_toctree_free(h);
- t = NULL;
d = NULL;
- n = NULL;
- h = NULL;
html = blogc_content_parse(
"# test\r\n"
"\r\n"
@@ -452,38 +400,33 @@ test_content_parse_with_excerpt_crlf(void **state)
"...\r\n"
"\r\n"
"guda\r\n"
- "lol", &l, &t, &d, &n, &h);
+ "lol", &l, &d);
assert_non_null(html);
- assert_int_equal(l, 40);
- assert_non_null(t);
- assert_string_equal(t, "test");
+ assert_non_null(l);
+ assert_string_equal(l,
+ "<h1 id=\"test\">test</h1>\r\n"
+ "<p>chunda</p>\r\n");
assert_non_null(d);
assert_string_equal(d, "chunda");
- assert_non_null(n);
- assert_string_equal(n, "\r\n");
- assert_non_null(h);
- assert_int_equal(bc_slist_length(h), 1);
assert_string_equal(html,
"<h1 id=\"test\">test</h1>\r\n"
"<p>chunda</p>\r\n"
"<p>guda\r\n"
"lol</p>\r\n");
free(html);
- free(t);
+ free(l);
free(d);
- free(n);
- blogc_toctree_free(h);
}
static void
test_content_parse_header(void **state)
{
- char *html = blogc_content_parse("## bola", NULL, NULL, NULL, NULL, NULL);
+ char *html = blogc_content_parse("## bola", NULL, NULL);
assert_non_null(html);
assert_string_equal(html, "<h2 id=\"bola\">bola</h2>\n");
free(html);
- html = blogc_content_parse("## bola\n", NULL, NULL, NULL, NULL, NULL);
+ html = blogc_content_parse("## bola\n", NULL, NULL);
assert_non_null(html);
assert_string_equal(html, "<h2 id=\"bola\">bola</h2>\n");
free(html);
@@ -492,7 +435,7 @@ test_content_parse_header(void **state)
"\n"
"## bola\n"
"\n"
- "guda\n", NULL, NULL, NULL, NULL, NULL);
+ "guda\n", NULL, NULL);
assert_non_null(html);
assert_string_equal(html,
"<p>bola</p>\n"
@@ -505,11 +448,11 @@ test_content_parse_header(void **state)
static void
test_content_parse_header_crlf(void **state)
{
- char *html = blogc_content_parse("## bola", NULL, NULL, NULL, NULL, NULL);
+ char *html = blogc_content_parse("## bola", NULL, NULL);
assert_non_null(html);
assert_string_equal(html, "<h2 id=\"bola\">bola</h2>\n");
free(html);
- html = blogc_content_parse("## bola\r\n", NULL, NULL, NULL, NULL, NULL);
+ html = blogc_content_parse("## bola\r\n", NULL, NULL);
assert_non_null(html);
assert_string_equal(html, "<h2 id=\"bola\">bola</h2>\r\n");
free(html);
@@ -518,7 +461,7 @@ test_content_parse_header_crlf(void **state)
"\r\n"
"## bola\r\n"
"\r\n"
- "guda\r\n", NULL, NULL, NULL, NULL, NULL);
+ "guda\r\n", NULL, NULL);
assert_non_null(html);
assert_string_equal(html,
"<p>bola</p>\r\n"
@@ -531,11 +474,11 @@ test_content_parse_header_crlf(void **state)
static void
test_content_parse_html(void **state)
{
- char *html = blogc_content_parse("<div>\n</div>", NULL, NULL, NULL, NULL, NULL);
+ char *html = blogc_content_parse("<div>\n</div>", NULL, NULL);
assert_non_null(html);
assert_string_equal(html, "<div>\n</div>\n");
free(html);
- html = blogc_content_parse("<div>\n</div>\n", NULL, NULL, NULL, NULL, NULL);
+ html = blogc_content_parse("<div>\n</div>\n", NULL, NULL);
assert_non_null(html);
assert_string_equal(html, "<div>\n</div>\n");
free(html);
@@ -545,7 +488,7 @@ test_content_parse_html(void **state)
"<div>\n"
"</div>\n"
"\n"
- "chunda\n", NULL, NULL, NULL, NULL, NULL);
+ "chunda\n", NULL, NULL);
assert_non_null(html);
assert_string_equal(html,
"<p>bola</p>\n"
@@ -558,11 +501,11 @@ test_content_parse_html(void **state)
static void
test_content_parse_html_crlf(void **state)
{
- char *html = blogc_content_parse("<div>\r\n</div>", NULL, NULL, NULL, NULL, NULL);
+ char *html = blogc_content_parse("<div>\r\n</div>", NULL, NULL);
assert_non_null(html);
assert_string_equal(html, "<div>\r\n</div>\r\n");
free(html);
- html = blogc_content_parse("<div>\r\n</div>\r\n", NULL, NULL, NULL, NULL, NULL);
+ html = blogc_content_parse("<div>\r\n</div>\r\n", NULL, NULL);
assert_non_null(html);
assert_string_equal(html, "<div>\r\n</div>\r\n");
free(html);
@@ -572,7 +515,7 @@ test_content_parse_html_crlf(void **state)
"<div>\r\n"
"</div>\r\n"
"\r\n"
- "chunda\r\n", NULL, NULL, NULL, NULL, NULL);
+ "chunda\r\n", NULL, NULL);
assert_non_null(html);
assert_string_equal(html,
"<p>bola</p>\r\n"
@@ -585,14 +528,14 @@ test_content_parse_html_crlf(void **state)
static void
test_content_parse_blockquote(void **state)
{
- char *html = blogc_content_parse("> bola\n> guda", NULL, NULL, NULL, NULL, NULL);
+ char *html = blogc_content_parse("> bola\n> guda", NULL, NULL);
assert_non_null(html);
assert_string_equal(html,
"<blockquote><p>bola\n"
"guda</p>\n"
"</blockquote>\n");
free(html);
- html = blogc_content_parse("> bola\n> guda\n", NULL, NULL, NULL, NULL, NULL);
+ html = blogc_content_parse("> bola\n> guda\n", NULL, NULL);
assert_non_null(html);
assert_string_equal(html,
"<blockquote><p>bola\n"
@@ -604,7 +547,7 @@ test_content_parse_blockquote(void **state)
"\n"
"> bola\n"
"\n"
- "chunda\n", NULL, NULL, NULL, NULL, NULL);
+ "chunda\n", NULL, NULL);
assert_non_null(html);
assert_string_equal(html,
"<p>bola</p>\n"
@@ -618,7 +561,7 @@ test_content_parse_blockquote(void **state)
"> bola\n"
"> guda\n"
"\n"
- "chunda\n", NULL, NULL, NULL, NULL, NULL);
+ "chunda\n", NULL, NULL);
assert_non_null(html);
assert_string_equal(html,
"<p>bola</p>\n"
@@ -633,14 +576,14 @@ test_content_parse_blockquote(void **state)
static void
test_content_parse_blockquote_crlf(void **state)
{
- char *html = blogc_content_parse("> bola\r\n> guda", NULL, NULL, NULL, NULL, NULL);
+ char *html = blogc_content_parse("> bola\r\n> guda", NULL, NULL);
assert_non_null(html);
assert_string_equal(html,
"<blockquote><p>bola\r\n"
"guda</p>\r\n"
"</blockquote>\r\n");
free(html);
- html = blogc_content_parse("> bola\r\n> guda\r\n", NULL, NULL, NULL, NULL, NULL);
+ html = blogc_content_parse("> bola\r\n> guda\r\n", NULL, NULL);
assert_non_null(html);
assert_string_equal(html,
"<blockquote><p>bola\r\n"
@@ -652,7 +595,7 @@ test_content_parse_blockquote_crlf(void **state)
"\r\n"
"> bola\r\n"
"\r\n"
- "chunda\r\n", NULL, NULL, NULL, NULL, NULL);
+ "chunda\r\n", NULL, NULL);
assert_non_null(html);
assert_string_equal(html,
"<p>bola</p>\r\n"
@@ -666,7 +609,7 @@ test_content_parse_blockquote_crlf(void **state)
"> bola\r\n"
"> guda\r\n"
"\r\n"
- "chunda\r\n", NULL, NULL, NULL, NULL, NULL);
+ "chunda\r\n", NULL, NULL);
assert_non_null(html);
assert_string_equal(html,
"<p>bola</p>\r\n"
@@ -681,13 +624,13 @@ test_content_parse_blockquote_crlf(void **state)
static void
test_content_parse_code(void **state)
{
- char *html = blogc_content_parse(" bola\n guda", NULL, NULL, NULL, NULL, NULL);
+ char *html = blogc_content_parse(" bola\n guda", NULL, NULL);
assert_non_null(html);
assert_string_equal(html,
"<pre><code>bola\n"
"guda</code></pre>\n");
free(html);
- html = blogc_content_parse(" bola\n guda\n", NULL, NULL, NULL, NULL, NULL);
+ html = blogc_content_parse(" bola\n guda\n", NULL, NULL);
assert_non_null(html);
assert_string_equal(html,
"<pre><code>bola\n"
@@ -699,7 +642,7 @@ test_content_parse_code(void **state)
" bola\n"
" guda\n"
"\n"
- "chunda\n", NULL, NULL, NULL, NULL, NULL);
+ "chunda\n", NULL, NULL);
assert_non_null(html);
assert_string_equal(html,
"<p>bola</p>\n"
@@ -713,13 +656,13 @@ test_content_parse_code(void **state)
static void
test_content_parse_code_crlf(void **state)
{
- char *html = blogc_content_parse(" bola\r\n guda", NULL, NULL, NULL, NULL, NULL);
+ char *html = blogc_content_parse(" bola\r\n guda", NULL, NULL);
assert_non_null(html);
assert_string_equal(html,
"<pre><code>bola\r\n"
"guda</code></pre>\r\n");
free(html);
- html = blogc_content_parse(" bola\r\n guda\r\n", NULL, NULL, NULL, NULL, NULL);
+ html = blogc_content_parse(" bola\r\n guda\r\n", NULL, NULL);
assert_non_null(html);
assert_string_equal(html,
"<pre><code>bola\r\n"
@@ -731,7 +674,7 @@ test_content_parse_code_crlf(void **state)
" bola\r\n"
" guda\r\n"
"\r\n"
- "chunda\r\n", NULL, NULL, NULL, NULL, NULL);
+ "chunda\r\n", NULL, NULL);
assert_non_null(html);
assert_string_equal(html,
"<p>bola</p>\r\n"
@@ -745,28 +688,28 @@ test_content_parse_code_crlf(void **state)
static void
test_content_parse_horizontal_rule(void **state)
{
- char *html = blogc_content_parse("bola\nguda\n\n***", NULL, NULL, NULL, NULL, NULL);
+ char *html = blogc_content_parse("bola\nguda\n\n**", NULL, NULL);
assert_non_null(html);
assert_string_equal(html,
"<p>bola\n"
"guda</p>\n"
"<hr />\n");
free(html);
- html = blogc_content_parse("bola\nguda\n\n++++", NULL, NULL, NULL, NULL, NULL);
+ html = blogc_content_parse("bola\nguda\n\n++++", NULL, NULL);
assert_non_null(html);
assert_string_equal(html,
"<p>bola\n"
"guda</p>\n"
"<hr />\n");
free(html);
- html = blogc_content_parse("bola\nguda\n\n---\n", NULL, NULL, NULL, NULL, NULL);
+ html = blogc_content_parse("bola\nguda\n\n--\n", NULL, NULL);
assert_non_null(html);
assert_string_equal(html,
"<p>bola\n"
"guda</p>\n"
"<hr />\n");
free(html);
- html = blogc_content_parse("bola\nguda\n\n****\n", NULL, NULL, NULL, NULL, NULL);
+ html = blogc_content_parse("bola\nguda\n\n****\n", NULL, NULL);
assert_non_null(html);
assert_string_equal(html,
"<p>bola\n"
@@ -776,9 +719,9 @@ test_content_parse_horizontal_rule(void **state)
html = blogc_content_parse(
"bola\n"
"\n"
- "***\n"
+ "**\n"
"\n"
- "chunda\n", NULL, NULL, NULL, NULL, NULL);
+ "chunda\n", NULL, NULL);
assert_non_null(html);
assert_string_equal(html,
"<p>bola</p>\n"
@@ -790,7 +733,7 @@ test_content_parse_horizontal_rule(void **state)
"\n"
"----\n"
"\n"
- "chunda\n", NULL, NULL, NULL, NULL, NULL);
+ "chunda\n", NULL, NULL);
assert_non_null(html);
assert_string_equal(html,
"<p>bola</p>\n"
@@ -803,28 +746,28 @@ test_content_parse_horizontal_rule(void **state)
static void
test_content_parse_horizontal_rule_crlf(void **state)
{
- char *html = blogc_content_parse("bola\r\nguda\r\n\r\n***", NULL, NULL, NULL, NULL, NULL);
+ char *html = blogc_content_parse("bola\r\nguda\r\n\r\n**", NULL, NULL);
assert_non_null(html);
assert_string_equal(html,
"<p>bola\r\n"
"guda</p>\r\n"
"<hr />\r\n");
free(html);
- html = blogc_content_parse("bola\r\nguda\r\n\r\n++++", NULL, NULL, NULL, NULL, NULL);
+ html = blogc_content_parse("bola\r\nguda\r\n\r\n++++", NULL, NULL);
assert_non_null(html);
assert_string_equal(html,
"<p>bola\r\n"
"guda</p>\r\n"
"<hr />\r\n");
free(html);
- html = blogc_content_parse("bola\r\nguda\r\n\r\n---\r\n", NULL, NULL, NULL, NULL, NULL);
+ html = blogc_content_parse("bola\r\nguda\r\n\r\n--\r\n", NULL, NULL);
assert_non_null(html);
assert_string_equal(html,
"<p>bola\r\n"
"guda</p>\r\n"
"<hr />\r\n");
free(html);
- html = blogc_content_parse("bola\r\nguda\r\n\r\n****\r\n", NULL, NULL, NULL, NULL, NULL);
+ html = blogc_content_parse("bola\r\nguda\r\n\r\n****\r\n", NULL, NULL);
assert_non_null(html);
assert_string_equal(html,
"<p>bola\r\n"
@@ -834,9 +777,9 @@ test_content_parse_horizontal_rule_crlf(void **state)
html = blogc_content_parse(
"bola\r\n"
"\r\n"
- "***\r\n"
+ "**\r\n"
"\r\n"
- "chunda\r\n", NULL, NULL, NULL, NULL, NULL);
+ "chunda\r\n", NULL, NULL);
assert_non_null(html);
assert_string_equal(html,
"<p>bola</p>\r\n"
@@ -848,7 +791,7 @@ test_content_parse_horizontal_rule_crlf(void **state)
"\r\n"
"----\r\n"
"\r\n"
- "chunda\r\n", NULL, NULL, NULL, NULL, NULL);
+ "chunda\r\n", NULL, NULL);
assert_non_null(html);
assert_string_equal(html,
"<p>bola</p>\r\n"
@@ -866,7 +809,7 @@ test_content_parse_unordered_list(void **state)
"\n"
"* asd\n"
"* qwe\n"
- "* zxc", NULL, NULL, NULL, NULL, NULL);
+ "* zxc", NULL, NULL);
assert_non_null(html);
assert_string_equal(html,
"<p>lol</p>\n"
@@ -881,7 +824,7 @@ test_content_parse_unordered_list(void **state)
"\n"
"* asd\n"
"* qwe\n"
- "* zxc\n", NULL, NULL, NULL, NULL, NULL);
+ "* zxc\n", NULL, NULL);
assert_non_null(html);
assert_string_equal(html,
"<p>lol</p>\n"
@@ -898,7 +841,7 @@ test_content_parse_unordered_list(void **state)
"* qwe\n"
"* zxc\n"
"\n"
- "fuuuu\n", NULL, NULL, NULL, NULL, NULL);
+ "fuuuu\n", NULL, NULL);
assert_non_null(html);
assert_string_equal(html,
"<p>lol</p>\n"
@@ -918,7 +861,7 @@ test_content_parse_unordered_list(void **state)
"* zxc\n"
" 1234\n"
"\n"
- "fuuuu\n", NULL, NULL, NULL, NULL, NULL);
+ "fuuuu\n", NULL, NULL);
assert_non_null(html);
assert_string_equal(html,
"<p>lol</p>\n"
@@ -934,7 +877,7 @@ test_content_parse_unordered_list(void **state)
html = blogc_content_parse(
"* asd\n"
"* qwe\n"
- "* zxc", NULL, NULL, NULL, NULL, NULL);
+ "* zxc", NULL, NULL);
assert_non_null(html);
assert_string_equal(html,
"<ul>\n"
@@ -954,7 +897,7 @@ test_content_parse_unordered_list_crlf(void **state)
"\r\n"
"* asd\r\n"
"* qwe\r\n"
- "* zxc", NULL, NULL, NULL, NULL, NULL);
+ "* zxc", NULL, NULL);
assert_non_null(html);
assert_string_equal(html,
"<p>lol</p>\r\n"
@@ -969,7 +912,7 @@ test_content_parse_unordered_list_crlf(void **state)
"\r\n"
"* asd\r\n"
"* qwe\r\n"
- "* zxc\r\n", NULL, NULL, NULL, NULL, NULL);
+ "* zxc\r\n", NULL, NULL);
assert_non_null(html);
assert_string_equal(html,
"<p>lol</p>\r\n"
@@ -986,7 +929,7 @@ test_content_parse_unordered_list_crlf(void **state)
"* qwe\r\n"
"* zxc\r\n"
"\r\n"
- "fuuuu\r\n", NULL, NULL, NULL, NULL, NULL);
+ "fuuuu\r\n", NULL, NULL);
assert_non_null(html);
assert_string_equal(html,
"<p>lol</p>\r\n"
@@ -1006,7 +949,7 @@ test_content_parse_unordered_list_crlf(void **state)
"* zxc\r\n"
" 1234\r\n"
"\r\n"
- "fuuuu\r\n", NULL, NULL, NULL, NULL, NULL);
+ "fuuuu\r\n", NULL, NULL);
assert_non_null(html);
assert_string_equal(html,
"<p>lol</p>\r\n"
@@ -1022,7 +965,7 @@ test_content_parse_unordered_list_crlf(void **state)
html = blogc_content_parse(
"* asd\r\n"
"* qwe\r\n"
- "* zxc", NULL, NULL, NULL, NULL, NULL);
+ "* zxc", NULL, NULL);
assert_non_null(html);
assert_string_equal(html,
"<ul>\r\n"
@@ -1042,7 +985,7 @@ test_content_parse_ordered_list(void **state)
"\n"
"1. asd\n"
"2. qwe\n"
- "3. zxc", NULL, NULL, NULL, NULL, NULL);
+ "3. zxc", NULL, NULL);
assert_non_null(html);
assert_string_equal(html,
"<p>lol</p>\n"
@@ -1057,7 +1000,7 @@ test_content_parse_ordered_list(void **state)
"\n"
"1. asd\n"
"2. qwe\n"
- "3. zxc\n", NULL, NULL, NULL, NULL, NULL);
+ "3. zxc\n", NULL, NULL);
assert_non_null(html);
assert_string_equal(html,
"<p>lol</p>\n"
@@ -1074,7 +1017,7 @@ test_content_parse_ordered_list(void **state)
"2. qwe\n"
"3. zxc\n"
"\n"
- "fuuuu\n", NULL, NULL, NULL, NULL, NULL);
+ "fuuuu\n", NULL, NULL);
assert_non_null(html);
assert_string_equal(html,
"<p>lol</p>\n"
@@ -1094,7 +1037,7 @@ test_content_parse_ordered_list(void **state)
"3. zxc\n"
" 1234\n"
"\n"
- "fuuuu\n", NULL, NULL, NULL, NULL, NULL);
+ "fuuuu\n", NULL, NULL);
assert_non_null(html);
assert_string_equal(html,
"<p>lol</p>\n"
@@ -1110,7 +1053,7 @@ test_content_parse_ordered_list(void **state)
html = blogc_content_parse(
"1. asd\n"
"2. qwe\n"
- "3. zxc", NULL, NULL, NULL, NULL, NULL);
+ "3. zxc", NULL, NULL);
assert_non_null(html);
assert_string_equal(html,
"<ol>\n"
@@ -1130,7 +1073,7 @@ test_content_parse_ordered_list_crlf(void **state)
"\r\n"
"1. asd\r\n"
"2. qwe\r\n"
- "3. zxc", NULL, NULL, NULL, NULL, NULL);
+ "3. zxc", NULL, NULL);
assert_non_null(html);
assert_string_equal(html,
"<p>lol</p>\r\n"
@@ -1145,7 +1088,7 @@ test_content_parse_ordered_list_crlf(void **state)
"\r\n"
"1. asd\r\n"
"2. qwe\r\n"
- "3. zxc\r\n", NULL, NULL, NULL, NULL, NULL);
+ "3. zxc\r\n", NULL, NULL);
assert_non_null(html);
assert_string_equal(html,
"<p>lol</p>\r\n"
@@ -1162,7 +1105,7 @@ test_content_parse_ordered_list_crlf(void **state)
"2. qwe\r\n"
"3. zxc\r\n"
"\r\n"
- "fuuuu\r\n", NULL, NULL, NULL, NULL, NULL);
+ "fuuuu\r\n", NULL, NULL);
assert_non_null(html);
assert_string_equal(html,
"<p>lol</p>\r\n"
@@ -1182,7 +1125,7 @@ test_content_parse_ordered_list_crlf(void **state)
"3. zxc\r\n"
" 1234\r\n"
"\r\n"
- "fuuuu\r\n", NULL, NULL, NULL, NULL, NULL);
+ "fuuuu\r\n", NULL, NULL);
assert_non_null(html);
assert_string_equal(html,
"<p>lol</p>\r\n"
@@ -1198,7 +1141,7 @@ test_content_parse_ordered_list_crlf(void **state)
html = blogc_content_parse(
"1. asd\r\n"
"2. qwe\r\n"
- "3. zxc", NULL, NULL, NULL, NULL, NULL);
+ "3. zxc", NULL, NULL);
assert_non_null(html);
assert_string_equal(html,
"<ol>\r\n"
@@ -1211,406 +1154,13 @@ test_content_parse_ordered_list_crlf(void **state)
static void
-test_content_parse_first_header(void **state)
-{
- char *t = NULL;
- char *html = blogc_content_parse("# foo", NULL, &t, NULL, NULL, NULL);
- assert_non_null(html);
- assert_string_equal(html, "<h1 id=\"foo\">foo</h1>\n");
- assert_non_null(t);
- assert_string_equal(t, "foo");
- free(html);
- free(t);
- t = NULL;
- html = blogc_content_parse("# foo\n", NULL, &t, NULL, NULL, NULL);
- assert_non_null(html);
- assert_string_equal(html, "<h1 id=\"foo\">foo</h1>\n");
- assert_non_null(t);
- assert_string_equal(t, "foo");
- free(html);
- free(t);
- t = NULL;
- html = blogc_content_parse(
- "# foo\n"
- "## bar\n"
- "### baz", NULL, &t, NULL, NULL, NULL);
- assert_non_null(html);
- assert_string_equal(html,
- "<h1 id=\"foo\">foo</h1>\n"
- "<h2 id=\"bar\">bar</h2>\n"
- "<h3 id=\"baz\">baz</h3>\n");
- assert_non_null(t);
- assert_string_equal(t, "foo");
- free(html);
- free(t);
- t = NULL;
- html = blogc_content_parse(
- "# foo\n"
- "## bar\n"
- "### baz\n", NULL, &t, NULL, NULL, NULL);
- assert_non_null(html);
- assert_string_equal(html,
- "<h1 id=\"foo\">foo</h1>\n"
- "<h2 id=\"bar\">bar</h2>\n"
- "<h3 id=\"baz\">baz</h3>\n");
- assert_non_null(t);
- assert_string_equal(t, "foo");
- free(html);
- free(t);
- t = NULL;
- html = blogc_content_parse(
- "## bar\n"
- "# foo\n"
- "### baz", NULL, &t, NULL, NULL, NULL);
- assert_non_null(html);
- assert_string_equal(html,
- "<h2 id=\"bar\">bar</h2>\n"
- "<h1 id=\"foo\">foo</h1>\n"
- "<h3 id=\"baz\">baz</h3>\n");
- assert_non_null(t);
- assert_string_equal(t, "bar");
- free(html);
- free(t);
- t = NULL;
- html = blogc_content_parse(
- "## bar\n"
- "# foo\n"
- "### baz\n", NULL, &t, NULL, NULL, NULL);
- assert_non_null(html);
- assert_string_equal(html,
- "<h2 id=\"bar\">bar</h2>\n"
- "<h1 id=\"foo\">foo</h1>\n"
- "<h3 id=\"baz\">baz</h3>\n");
- assert_non_null(t);
- assert_string_equal(t, "bar");
- free(html);
- free(t);
-}
-
-
-static void
-test_content_parse_first_header_crlf(void **state)
-{
- char *t = NULL;
- char *html = blogc_content_parse("# foo\r\n", NULL, &t, NULL, NULL, NULL);
- assert_non_null(html);
- assert_string_equal(html, "<h1 id=\"foo\">foo</h1>\r\n");
- assert_non_null(t);
- assert_string_equal(t, "foo");
- free(html);
- free(t);
- t = NULL;
- html = blogc_content_parse(
- "# foo\r\n"
- "## bar\r\n"
- "### baz", NULL, &t, NULL, NULL, NULL);
- assert_non_null(html);
- assert_string_equal(html,
- "<h1 id=\"foo\">foo</h1>\r\n"
- "<h2 id=\"bar\">bar</h2>\r\n"
- "<h3 id=\"baz\">baz</h3>\r\n");
- assert_non_null(t);
- assert_string_equal(t, "foo");
- free(html);
- free(t);
- t = NULL;
- html = blogc_content_parse(
- "# foo\r\n"
- "## bar\r\n"
- "### baz\r\n", NULL, &t, NULL, NULL, NULL);
- assert_non_null(html);
- assert_string_equal(html,
- "<h1 id=\"foo\">foo</h1>\r\n"
- "<h2 id=\"bar\">bar</h2>\r\n"
- "<h3 id=\"baz\">baz</h3>\r\n");
- assert_non_null(t);
- assert_string_equal(t, "foo");
- free(html);
- free(t);
- t = NULL;
- html = blogc_content_parse(
- "## bar\r\n"
- "# foo\r\n"
- "### baz", NULL, &t, NULL, NULL, NULL);
- assert_non_null(html);
- assert_string_equal(html,
- "<h2 id=\"bar\">bar</h2>\r\n"
- "<h1 id=\"foo\">foo</h1>\r\n"
- "<h3 id=\"baz\">baz</h3>\r\n");
- assert_non_null(t);
- assert_string_equal(t, "bar");
- free(html);
- free(t);
- t = NULL;
- html = blogc_content_parse(
- "## bar\r\n"
- "# foo\r\n"
- "### baz\r\n", NULL, &t, NULL, NULL, NULL);
- assert_non_null(html);
- assert_string_equal(html,
- "<h2 id=\"bar\">bar</h2>\r\n"
- "<h1 id=\"foo\">foo</h1>\r\n"
- "<h3 id=\"baz\">baz</h3>\r\n");
- assert_non_null(t);
- assert_string_equal(t, "bar");
- free(html);
- free(t);
-}
-
-
-static void
-test_content_parse_headers(void **state)
-{
- bc_slist_t *h = NULL;
- char *html = blogc_content_parse("# foo", NULL, NULL, NULL, NULL, &h);
- assert_non_null(html);
- assert_string_equal(html, "<h1 id=\"foo\">foo</h1>\n");
- assert_non_null(h);
- assert_int_equal(((blogc_toctree_header_t*) h->data)->level, 1);
- assert_string_equal(((blogc_toctree_header_t*) h->data)->slug, "foo");
- assert_string_equal(((blogc_toctree_header_t*) h->data)->text, "foo");
- assert_null(h->next);
- blogc_toctree_free(h);
- h = NULL;
- free(html);
- html = blogc_content_parse("# foo\n", NULL, NULL, NULL, NULL, &h);
- assert_non_null(html);
- assert_string_equal(html, "<h1 id=\"foo\">foo</h1>\n");
- assert_non_null(h);
- assert_int_equal(((blogc_toctree_header_t*) h->data)->level, 1);
- assert_string_equal(((blogc_toctree_header_t*) h->data)->slug, "foo");
- assert_string_equal(((blogc_toctree_header_t*) h->data)->text, "foo");
- assert_null(h->next);
- blogc_toctree_free(h);
- h = NULL;
- free(html);
- html = blogc_content_parse(
- "# foo\n"
- "## bar\n"
- "### baz", NULL, NULL, NULL, NULL, &h);
- assert_non_null(html);
- assert_string_equal(html,
- "<h1 id=\"foo\">foo</h1>\n"
- "<h2 id=\"bar\">bar</h2>\n"
- "<h3 id=\"baz\">baz</h3>\n");
- assert_non_null(h);
- assert_int_equal(((blogc_toctree_header_t*) h->data)->level, 1);
- assert_string_equal(((blogc_toctree_header_t*) h->data)->slug, "foo");
- assert_string_equal(((blogc_toctree_header_t*) h->data)->text, "foo");
- assert_non_null(h->next);
- assert_int_equal(((blogc_toctree_header_t*) h->next->data)->level, 2);
- assert_string_equal(((blogc_toctree_header_t*) h->next->data)->slug, "bar");
- assert_string_equal(((blogc_toctree_header_t*) h->next->data)->text, "bar");
- assert_non_null(h);
- assert_int_equal(((blogc_toctree_header_t*) h->next->next->data)->level, 3);
- assert_string_equal(((blogc_toctree_header_t*) h->next->next->data)->slug, "baz");
- assert_string_equal(((blogc_toctree_header_t*) h->next->next->data)->text, "baz");
- assert_null(h->next->next->next);
- blogc_toctree_free(h);
- h = NULL;
- free(html);
- html = blogc_content_parse(
- "# foo\n"
- "## bar\n"
- "### baz\n", NULL, NULL, NULL, NULL, &h);
- assert_non_null(html);
- assert_string_equal(html,
- "<h1 id=\"foo\">foo</h1>\n"
- "<h2 id=\"bar\">bar</h2>\n"
- "<h3 id=\"baz\">baz</h3>\n");
- assert_non_null(h);
- assert_int_equal(((blogc_toctree_header_t*) h->data)->level, 1);
- assert_string_equal(((blogc_toctree_header_t*) h->data)->slug, "foo");
- assert_string_equal(((blogc_toctree_header_t*) h->data)->text, "foo");
- assert_non_null(h->next);
- assert_int_equal(((blogc_toctree_header_t*) h->next->data)->level, 2);
- assert_string_equal(((blogc_toctree_header_t*) h->next->data)->slug, "bar");
- assert_string_equal(((blogc_toctree_header_t*) h->next->data)->text, "bar");
- assert_non_null(h);
- assert_int_equal(((blogc_toctree_header_t*) h->next->next->data)->level, 3);
- assert_string_equal(((blogc_toctree_header_t*) h->next->next->data)->slug, "baz");
- assert_string_equal(((blogc_toctree_header_t*) h->next->next->data)->text, "baz");
- assert_null(h->next->next->next);
- blogc_toctree_free(h);
- h = NULL;
- free(html);
- html = blogc_content_parse(
- "## bar\n"
- "# foo\n"
- "### baz", NULL, NULL, NULL, NULL, &h);
- assert_non_null(html);
- assert_string_equal(html,
- "<h2 id=\"bar\">bar</h2>\n"
- "<h1 id=\"foo\">foo</h1>\n"
- "<h3 id=\"baz\">baz</h3>\n");
- assert_non_null(h);
- assert_int_equal(((blogc_toctree_header_t*) h->data)->level, 2);
- assert_string_equal(((blogc_toctree_header_t*) h->data)->slug, "bar");
- assert_string_equal(((blogc_toctree_header_t*) h->data)->text, "bar");
- assert_non_null(h->next);
- assert_int_equal(((blogc_toctree_header_t*) h->next->data)->level, 1);
- assert_string_equal(((blogc_toctree_header_t*) h->next->data)->slug, "foo");
- assert_string_equal(((blogc_toctree_header_t*) h->next->data)->text, "foo");
- assert_non_null(h);
- assert_int_equal(((blogc_toctree_header_t*) h->next->next->data)->level, 3);
- assert_string_equal(((blogc_toctree_header_t*) h->next->next->data)->slug, "baz");
- assert_string_equal(((blogc_toctree_header_t*) h->next->next->data)->text, "baz");
- assert_null(h->next->next->next);
- blogc_toctree_free(h);
- h = NULL;
- free(html);
- html = blogc_content_parse(
- "## bar\n"
- "# foo\n"
- "### baz\n", NULL, NULL, NULL, NULL, &h);
- assert_non_null(html);
- assert_string_equal(html,
- "<h2 id=\"bar\">bar</h2>\n"
- "<h1 id=\"foo\">foo</h1>\n"
- "<h3 id=\"baz\">baz</h3>\n");
- assert_non_null(h);
- assert_int_equal(((blogc_toctree_header_t*) h->data)->level, 2);
- assert_string_equal(((blogc_toctree_header_t*) h->data)->slug, "bar");
- assert_string_equal(((blogc_toctree_header_t*) h->data)->text, "bar");
- assert_non_null(h->next);
- assert_int_equal(((blogc_toctree_header_t*) h->next->data)->level, 1);
- assert_string_equal(((blogc_toctree_header_t*) h->next->data)->slug, "foo");
- assert_string_equal(((blogc_toctree_header_t*) h->next->data)->text, "foo");
- assert_non_null(h);
- assert_int_equal(((blogc_toctree_header_t*) h->next->next->data)->level, 3);
- assert_string_equal(((blogc_toctree_header_t*) h->next->next->data)->slug, "baz");
- assert_string_equal(((blogc_toctree_header_t*) h->next->next->data)->text, "baz");
- assert_null(h->next->next->next);
- blogc_toctree_free(h);
- free(html);
-}
-
-
-static void
-test_content_parse_headers_crlf(void **state)
-{
- bc_slist_t *h = NULL;
- char *html = blogc_content_parse("# foo\r\n", NULL, NULL, NULL, NULL, &h);
- assert_non_null(html);
- assert_string_equal(html, "<h1 id=\"foo\">foo</h1>\r\n");
- assert_non_null(h);
- assert_int_equal(((blogc_toctree_header_t*) h->data)->level, 1);
- assert_string_equal(((blogc_toctree_header_t*) h->data)->slug, "foo");
- assert_string_equal(((blogc_toctree_header_t*) h->data)->text, "foo");
- assert_null(h->next);
- blogc_toctree_free(h);
- h = NULL;
- free(html);
- html = blogc_content_parse(
- "# foo\r\n"
- "## bar\r\n"
- "### baz", NULL, NULL, NULL, NULL, &h);
- assert_non_null(html);
- assert_string_equal(html,
- "<h1 id=\"foo\">foo</h1>\r\n"
- "<h2 id=\"bar\">bar</h2>\r\n"
- "<h3 id=\"baz\">baz</h3>\r\n");
- assert_non_null(h);
- assert_int_equal(((blogc_toctree_header_t*) h->data)->level, 1);
- assert_string_equal(((blogc_toctree_header_t*) h->data)->slug, "foo");
- assert_string_equal(((blogc_toctree_header_t*) h->data)->text, "foo");
- assert_non_null(h->next);
- assert_int_equal(((blogc_toctree_header_t*) h->next->data)->level, 2);
- assert_string_equal(((blogc_toctree_header_t*) h->next->data)->slug, "bar");
- assert_string_equal(((blogc_toctree_header_t*) h->next->data)->text, "bar");
- assert_non_null(h);
- assert_int_equal(((blogc_toctree_header_t*) h->next->next->data)->level, 3);
- assert_string_equal(((blogc_toctree_header_t*) h->next->next->data)->slug, "baz");
- assert_string_equal(((blogc_toctree_header_t*) h->next->next->data)->text, "baz");
- assert_null(h->next->next->next);
- blogc_toctree_free(h);
- h = NULL;
- free(html);
- html = blogc_content_parse(
- "# foo\r\n"
- "## bar\r\n"
- "### baz\r\n", NULL, NULL, NULL, NULL, &h);
- assert_non_null(html);
- assert_string_equal(html,
- "<h1 id=\"foo\">foo</h1>\r\n"
- "<h2 id=\"bar\">bar</h2>\r\n"
- "<h3 id=\"baz\">baz</h3>\r\n");
- assert_non_null(h);
- assert_int_equal(((blogc_toctree_header_t*) h->data)->level, 1);
- assert_string_equal(((blogc_toctree_header_t*) h->data)->slug, "foo");
- assert_string_equal(((blogc_toctree_header_t*) h->data)->text, "foo");
- assert_non_null(h->next);
- assert_int_equal(((blogc_toctree_header_t*) h->next->data)->level, 2);
- assert_string_equal(((blogc_toctree_header_t*) h->next->data)->slug, "bar");
- assert_string_equal(((blogc_toctree_header_t*) h->next->data)->text, "bar");
- assert_non_null(h);
- assert_int_equal(((blogc_toctree_header_t*) h->next->next->data)->level, 3);
- assert_string_equal(((blogc_toctree_header_t*) h->next->next->data)->slug, "baz");
- assert_string_equal(((blogc_toctree_header_t*) h->next->next->data)->text, "baz");
- assert_null(h->next->next->next);
- blogc_toctree_free(h);
- h = NULL;
- free(html);
- html = blogc_content_parse(
- "## bar\r\n"
- "# foo\r\n"
- "### baz", NULL, NULL, NULL, NULL, &h);
- assert_non_null(html);
- assert_string_equal(html,
- "<h2 id=\"bar\">bar</h2>\r\n"
- "<h1 id=\"foo\">foo</h1>\r\n"
- "<h3 id=\"baz\">baz</h3>\r\n");
- assert_non_null(h);
- assert_int_equal(((blogc_toctree_header_t*) h->data)->level, 2);
- assert_string_equal(((blogc_toctree_header_t*) h->data)->slug, "bar");
- assert_string_equal(((blogc_toctree_header_t*) h->data)->text, "bar");
- assert_non_null(h->next);
- assert_int_equal(((blogc_toctree_header_t*) h->next->data)->level, 1);
- assert_string_equal(((blogc_toctree_header_t*) h->next->data)->slug, "foo");
- assert_string_equal(((blogc_toctree_header_t*) h->next->data)->text, "foo");
- assert_non_null(h);
- assert_int_equal(((blogc_toctree_header_t*) h->next->next->data)->level, 3);
- assert_string_equal(((blogc_toctree_header_t*) h->next->next->data)->slug, "baz");
- assert_string_equal(((blogc_toctree_header_t*) h->next->next->data)->text, "baz");
- assert_null(h->next->next->next);
- blogc_toctree_free(h);
- h = NULL;
- free(html);
- html = blogc_content_parse(
- "## bar\r\n"
- "# foo\r\n"
- "### baz\r\n", NULL, NULL, NULL, NULL, &h);
- assert_non_null(html);
- assert_string_equal(html,
- "<h2 id=\"bar\">bar</h2>\r\n"
- "<h1 id=\"foo\">foo</h1>\r\n"
- "<h3 id=\"baz\">baz</h3>\r\n");
- assert_non_null(h);
- assert_int_equal(((blogc_toctree_header_t*) h->data)->level, 2);
- assert_string_equal(((blogc_toctree_header_t*) h->data)->slug, "bar");
- assert_string_equal(((blogc_toctree_header_t*) h->data)->text, "bar");
- assert_non_null(h->next);
- assert_int_equal(((blogc_toctree_header_t*) h->next->data)->level, 1);
- assert_string_equal(((blogc_toctree_header_t*) h->next->data)->slug, "foo");
- assert_string_equal(((blogc_toctree_header_t*) h->next->data)->text, "foo");
- assert_non_null(h);
- assert_int_equal(((blogc_toctree_header_t*) h->next->next->data)->level, 3);
- assert_string_equal(((blogc_toctree_header_t*) h->next->next->data)->slug, "baz");
- assert_string_equal(((blogc_toctree_header_t*) h->next->next->data)->text, "baz");
- assert_null(h->next->next->next);
- blogc_toctree_free(h);
- free(html);
-}
-
-
-static void
test_content_parse_description(void **state)
{
char *d = NULL;
char *html = blogc_content_parse(
"# foo\n"
"\n"
- "bar", NULL, NULL, &d, NULL, NULL);
+ "bar", NULL, &d);
assert_non_null(html);
assert_string_equal(html,
"<h1 id=\"foo\">foo</h1>\n"
@@ -1623,7 +1173,7 @@ test_content_parse_description(void **state)
html = blogc_content_parse(
"# foo\n"
"\n"
- "bar\n", NULL, NULL, &d, NULL, NULL);
+ "bar\n", NULL, &d);
assert_non_null(html);
assert_string_equal(html,
"<h1 id=\"foo\">foo</h1>\n"
@@ -1637,7 +1187,7 @@ test_content_parse_description(void **state)
"# foo\n"
"\n"
"qwe\n"
- "bar\n", NULL, NULL, &d, NULL, NULL);
+ "bar\n", NULL, &d);
assert_non_null(html);
assert_string_equal(html,
"<h1 id=\"foo\">foo</h1>\n"
@@ -1653,7 +1203,7 @@ test_content_parse_description(void **state)
"\n"
"> qwe\n"
"\n"
- "bar\n", NULL, NULL, &d, NULL, NULL);
+ "bar\n", NULL, &d);
assert_non_null(html);
assert_string_equal(html,
"<h1 id=\"foo\">foo</h1>\n"
@@ -1671,7 +1221,7 @@ test_content_parse_description(void **state)
"> qwe\n"
"> zxc\n"
"\n"
- "bar\n", NULL, NULL, &d, NULL, NULL);
+ "bar\n", NULL, &d);
assert_non_null(html);
assert_string_equal(html,
"<h1 id=\"foo\">foo</h1>\n"
@@ -1693,7 +1243,7 @@ test_content_parse_description_crlf(void **state)
char *html = blogc_content_parse(
"# foo\r\n"
"\r\n"
- "bar", NULL, NULL, &d, NULL, NULL);
+ "bar", NULL, &d);
assert_non_null(html);
assert_string_equal(html,
"<h1 id=\"foo\">foo</h1>\r\n"
@@ -1706,7 +1256,7 @@ test_content_parse_description_crlf(void **state)
html = blogc_content_parse(
"# foo\r\n"
"\r\n"
- "bar\r\n", NULL, NULL, &d, NULL, NULL);
+ "bar\r\n", NULL, &d);
assert_non_null(html);
assert_string_equal(html,
"<h1 id=\"foo\">foo</h1>\r\n"
@@ -1720,7 +1270,7 @@ test_content_parse_description_crlf(void **state)
"# foo\r\n"
"\r\n"
"qwe\r\n"
- "bar\r\n", NULL, NULL, &d, NULL, NULL);
+ "bar\r\n", NULL, &d);
assert_non_null(html);
assert_string_equal(html,
"<h1 id=\"foo\">foo</h1>\r\n"
@@ -1736,7 +1286,7 @@ test_content_parse_description_crlf(void **state)
"\r\n"
"> qwe\r\n"
"\r\n"
- "bar\r\n", NULL, NULL, &d, NULL, NULL);
+ "bar\r\n", NULL, &d);
assert_non_null(html);
assert_string_equal(html,
"<h1 id=\"foo\">foo</h1>\r\n"
@@ -1754,7 +1304,7 @@ test_content_parse_description_crlf(void **state)
"> qwe\r\n"
"> zxc\r\n"
"\r\n"
- "bar\r\n", NULL, NULL, &d, NULL, NULL);
+ "bar\r\n", NULL, &d);
assert_non_null(html);
assert_string_equal(html,
"<h1 id=\"foo\">foo</h1>\r\n"
@@ -1770,110 +1320,9 @@ test_content_parse_description_crlf(void **state)
static void
-test_content_parse_endl(void **state)
-{
- char *n = NULL;
- char *html = blogc_content_parse("# test", NULL, NULL, NULL, &n, NULL);
- assert_non_null(html);
- assert_non_null(n);
- assert_string_equal(n, "\n");
- free(html);
- free(n);
- n = "\n";
- html = blogc_content_parse("# test", NULL, NULL, NULL, &n, NULL);
- assert_non_null(html);
- assert_non_null(n);
- assert_string_equal(n, "\n");
- free(html);
- n = NULL;
- html = blogc_content_parse(
- "# test\n", NULL, NULL, NULL, &n, NULL);
- assert_non_null(html);
- assert_non_null(n);
- assert_string_equal(n, "\n");
- free(html);
- free(n);
- n = NULL;
- html = blogc_content_parse(
- "# test\n"
- "foo", NULL, NULL, NULL, &n, NULL);
- assert_non_null(html);
- assert_non_null(n);
- assert_string_equal(n, "\n");
- free(html);
- free(n);
- n = NULL;
- html = blogc_content_parse(
- "# test\n"
- "foo\n", NULL, NULL, NULL, &n, NULL);
- assert_non_null(html);
- assert_non_null(n);
- assert_string_equal(n, "\n");
- free(html);
- free(n);
- n = NULL;
- html = blogc_content_parse(
- "# test\n"
- "foo\r\n", NULL, NULL, NULL, &n, NULL);
- assert_non_null(html);
- assert_non_null(n);
- assert_string_equal(n, "\n");
- free(html);
- free(n);
-}
-
-
-static void
-test_content_parse_endl_crlf(void **state)
-{
- char *n = "\r\n";
- char *html = blogc_content_parse("# test", NULL, NULL, NULL, &n, NULL);
- assert_non_null(html);
- assert_non_null(n);
- assert_string_equal(n, "\r\n");
- free(html);
- n = NULL;
- html = blogc_content_parse(
- "# test\r\n", NULL, NULL, NULL, &n, NULL);
- assert_non_null(html);
- assert_non_null(n);
- assert_string_equal(n, "\r\n");
- free(html);
- free(n);
- n = NULL;
- html = blogc_content_parse(
- "# test\r\n"
- "foo", NULL, NULL, NULL, &n, NULL);
- assert_non_null(html);
- assert_non_null(n);
- assert_string_equal(n, "\r\n");
- free(html);
- free(n);
- n = NULL;
- html = blogc_content_parse(
- "# test\r\n"
- "foo\r\n", NULL, NULL, NULL, &n, NULL);
- assert_non_null(html);
- assert_non_null(n);
- assert_string_equal(n, "\r\n");
- free(html);
- free(n);
- n = NULL;
- html = blogc_content_parse(
- "# test\r\n"
- "foo\n", NULL, NULL, NULL, &n, NULL);
- assert_non_null(html);
- assert_non_null(n);
- assert_string_equal(n, "\r\n");
- free(html);
- free(n);
-}
-
-
-static void
test_content_parse_invalid_excerpt(void **state)
{
- size_t l = 0;
+ char *l = NULL;
char *d = NULL;
char *html = blogc_content_parse(
"# test\n"
@@ -1882,9 +1331,9 @@ test_content_parse_invalid_excerpt(void **state)
"..\n"
"\n"
"guda\n"
- "lol", &l, NULL, &d, NULL, NULL);
+ "lol", &l, &d);
assert_non_null(html);
- assert_int_equal(l, 0);
+ assert_null(l);
assert_non_null(d);
assert_string_equal(d, "chunda ..");
assert_string_equal(html,
@@ -1894,7 +1343,6 @@ test_content_parse_invalid_excerpt(void **state)
"<p>guda\n"
"lol</p>\n");
free(html);
- l = 0;
free(d);
d = NULL;
html = blogc_content_parse(
@@ -1904,9 +1352,9 @@ test_content_parse_invalid_excerpt(void **state)
"\n"
"...\n"
"guda\n"
- "lol", &l, NULL, &d, NULL, NULL);
+ "lol", &l, &d);
assert_non_null(html);
- assert_int_equal(l, 0);
+ assert_null(l);
assert_non_null(d);
assert_string_equal(d, "chunda");
assert_string_equal(html,
@@ -1916,7 +1364,6 @@ test_content_parse_invalid_excerpt(void **state)
"guda\n"
"lol</p>\n");
free(html);
- l = 0;
free(d);
d = NULL;
html = blogc_content_parse(
@@ -1925,9 +1372,9 @@ test_content_parse_invalid_excerpt(void **state)
"chunda..\n"
"\n"
"guda\n"
- "lol", &l, NULL, &d, NULL, NULL);
+ "lol", &l, &d);
assert_non_null(html);
- assert_int_equal(l, 0);
+ assert_null(l);
assert_non_null(d);
assert_string_equal(d, "chunda..");
assert_string_equal(html,
@@ -1936,7 +1383,6 @@ test_content_parse_invalid_excerpt(void **state)
"<p>guda\n"
"lol</p>\n");
free(html);
- l = 0;
free(d);
d = NULL;
html = blogc_content_parse(
@@ -1945,9 +1391,9 @@ test_content_parse_invalid_excerpt(void **state)
"chunda\n"
"\n"
"...guda\n"
- "lol", &l, NULL, &d, NULL, NULL);
+ "lol", &l, &d);
assert_non_null(html);
- assert_int_equal(l, 0);
+ assert_null(l);
assert_non_null(d);
assert_string_equal(d, "chunda");
assert_string_equal(html,
@@ -1966,7 +1412,7 @@ test_content_parse_invalid_header(void **state)
char *html = blogc_content_parse(
"asd\n"
"\n"
- "##bola\n", NULL, NULL, NULL, NULL, NULL);
+ "##bola\n", NULL, NULL);
assert_non_null(html);
assert_string_equal(html,
"<p>asd</p>\n"
@@ -1983,7 +1429,7 @@ test_content_parse_invalid_header_empty(void **state)
"\n"
"##\n"
"\n"
- "qwe\n", NULL, NULL, NULL, NULL, NULL);
+ "qwe\n", NULL, NULL);
assert_non_null(html);
assert_string_equal(html,
"<p>asd</p>\n"
@@ -2000,7 +1446,7 @@ test_content_parse_invalid_blockquote(void **state)
char *html = blogc_content_parse(
"> asd\n"
"> bola\n"
- "> foo\n", NULL, NULL, NULL, NULL, NULL);
+ "> foo\n", NULL, NULL);
assert_non_null(html);
assert_string_equal(html,
"<p>&gt; asd\n"
@@ -2009,7 +1455,7 @@ test_content_parse_invalid_blockquote(void **state)
free(html);
html = blogc_content_parse(
"> asd\n"
- "> bola", NULL, NULL, NULL, NULL, NULL);
+ "> bola", NULL, NULL);
assert_non_null(html);
assert_string_equal(html,
"<p>&gt; asd\n"
@@ -2024,7 +1470,7 @@ test_content_parse_invalid_code(void **state)
char *html = blogc_content_parse(
" asd\n"
" bola\n"
- " foo\n", NULL, NULL, NULL, NULL, NULL);
+ " foo\n", NULL, NULL);
assert_non_null(html);
assert_string_equal(html,
"<p> asd\n"
@@ -2034,7 +1480,7 @@ test_content_parse_invalid_code(void **state)
html = blogc_content_parse(
" asd\n"
" bola\n"
- " foo", NULL, NULL, NULL, NULL, NULL);
+ " foo", NULL, NULL);
assert_non_null(html);
assert_string_equal(html,
"<p> asd\n"
@@ -2047,11 +1493,11 @@ test_content_parse_invalid_code(void **state)
static void
test_content_parse_invalid_horizontal_rule(void **state)
{
- char *html = blogc_content_parse("** asd", NULL, NULL, NULL, NULL, NULL);
+ char *html = blogc_content_parse("** asd", NULL, NULL);
assert_non_null(html);
assert_string_equal(html, "<p>** asd</p>\n");
free(html);
- html = blogc_content_parse("** asd\n", NULL, NULL, NULL, NULL, NULL);
+ html = blogc_content_parse("** asd\n", NULL, NULL);
assert_non_null(html);
assert_string_equal(html, "<p>** asd</p>\n");
free(html);
@@ -2063,7 +1509,7 @@ test_content_parse_invalid_unordered_list(void **state)
{
char *html = blogc_content_parse(
"* asd\n"
- "1. qwe", NULL, NULL, NULL, NULL, NULL);
+ "1. qwe", NULL, NULL);
assert_non_null(html);
assert_string_equal(html,
"<p>* asd\n"
@@ -2072,7 +1518,7 @@ test_content_parse_invalid_unordered_list(void **state)
html = blogc_content_parse(
"* asd\n"
"1. qwe\n"
- "\n", NULL, NULL, NULL, NULL, NULL);
+ "\n", NULL, NULL);
assert_non_null(html);
assert_string_equal(html,
"<p>* asd\n"
@@ -2080,7 +1526,7 @@ test_content_parse_invalid_unordered_list(void **state)
free(html);
html = blogc_content_parse(
"* asd\n"
- "1. qwe\n", NULL, NULL, NULL, NULL, NULL);
+ "1. qwe\n", NULL, NULL);
assert_non_null(html);
assert_string_equal(html,
"<p>* asd\n"
@@ -2089,7 +1535,7 @@ test_content_parse_invalid_unordered_list(void **state)
free(html);
html = blogc_content_parse(
"* asd\n"
- "1. qwe\n", NULL, NULL, NULL, NULL, NULL);
+ "1. qwe\n", NULL, NULL);
assert_non_null(html);
assert_string_equal(html,
"<p>* asd\n"
@@ -2102,7 +1548,7 @@ test_content_parse_invalid_unordered_list(void **state)
"* asd\n"
"1. qwe\n"
"\n"
- "poi\n", NULL, NULL, NULL, NULL, NULL);
+ "poi\n", NULL, NULL);
assert_non_null(html);
assert_string_equal(html,
"<p>chunda</p>\n"
@@ -2118,7 +1564,7 @@ test_content_parse_invalid_ordered_list(void **state)
{
char *html = blogc_content_parse(
"1. asd\n"
- "* qwe", NULL, NULL, NULL, NULL, NULL);
+ "* qwe", NULL, NULL);
assert_non_null(html);
assert_string_equal(html,
"<p>1. asd\n"
@@ -2127,7 +1573,7 @@ test_content_parse_invalid_ordered_list(void **state)
html = blogc_content_parse(
"1. asd\n"
"* qwe\n"
- "\n", NULL, NULL, NULL, NULL, NULL);
+ "\n", NULL, NULL);
assert_non_null(html);
assert_string_equal(html,
"<p>1. asd\n"
@@ -2135,7 +1581,7 @@ test_content_parse_invalid_ordered_list(void **state)
free(html);
html = blogc_content_parse(
"1. asd\n"
- "* qwe\n", NULL, NULL, NULL, NULL, NULL);
+ "* qwe\n", NULL, NULL);
assert_non_null(html);
assert_string_equal(html,
"<p>1. asd\n"
@@ -2144,7 +1590,7 @@ test_content_parse_invalid_ordered_list(void **state)
free(html);
html = blogc_content_parse(
"1. asd\n"
- "* qwe\n", NULL, NULL, NULL, NULL, NULL);
+ "* qwe\n", NULL, NULL);
assert_non_null(html);
assert_string_equal(html,
"<p>1. asd\n"
@@ -2157,7 +1603,7 @@ test_content_parse_invalid_ordered_list(void **state)
"1. asd\n"
"* qwe\n"
"\n"
- "poi\n", NULL, NULL, NULL, NULL, NULL);
+ "poi\n", NULL, NULL);
assert_non_null(html);
assert_string_equal(html,
"<p>chunda</p>\n"
@@ -2167,7 +1613,7 @@ test_content_parse_invalid_ordered_list(void **state)
free(html);
html = blogc_content_parse(
"1 asd\n"
- "* qwe\n", NULL, NULL, NULL, NULL, NULL);
+ "* qwe\n", NULL, NULL);
assert_non_null(html);
assert_string_equal(html,
"<p>1 asd\n"
@@ -2175,7 +1621,7 @@ test_content_parse_invalid_ordered_list(void **state)
free(html);
html = blogc_content_parse(
"a. asd\n"
- "2. qwe\n", NULL, NULL, NULL, NULL, NULL);
+ "2. qwe\n", NULL, NULL);
assert_non_null(html);
assert_string_equal(html,
"<p>a. asd\n"
@@ -2183,18 +1629,18 @@ test_content_parse_invalid_ordered_list(void **state)
free(html);
html = blogc_content_parse(
"1.\nasd\n"
- "2. qwe\n", NULL, NULL, NULL, NULL, NULL);
+ "2. qwe\n", NULL, NULL);
assert_non_null(html);
assert_string_equal(html,
"<p>1.\n"
"asd\n"
"2. qwe</p>\n");
free(html);
- html = blogc_content_parse("1.\n", NULL, NULL, NULL, NULL, NULL);
+ html = blogc_content_parse("1.\n", NULL, NULL);
assert_non_null(html);
assert_string_equal(html, "<p>1.</p>\n");
free(html);
- html = blogc_content_parse("1 ", NULL, NULL, NULL, NULL, NULL);
+ html = blogc_content_parse("1 ", NULL, NULL);
assert_non_null(html);
assert_string_equal(html, "<p>1 </p>\n");
free(html);
@@ -2346,15 +1792,11 @@ test_content_parse_inline_code(void **state)
free(html);
html = blogc_content_parse_inline("`bo\\`\\`la`\n");
assert_non_null(html);
- assert_string_equal(html, "<code>bo\\`\\`la</code>\n");
+ assert_string_equal(html, "<code>bo``la</code>\n");
free(html);
html = blogc_content_parse_inline("``bo\\`\\`la``\n");
assert_non_null(html);
- assert_string_equal(html, "<code>bo\\`\\`la</code>\n");
- free(html);
- html = blogc_content_parse_inline("``bo`la``\n");
- assert_non_null(html);
- assert_string_equal(html, "<code>bo`la</code>\n");
+ assert_string_equal(html, "<code>bo``la</code>\n");
free(html);
html = blogc_content_parse_inline("``bola\n");
assert_non_null(html);
@@ -2408,11 +1850,7 @@ test_content_parse_inline_link(void **state)
free(html);
html = blogc_content_parse_inline("[``bola(2)[3]**!\\```](http://example.org/)\n");
assert_non_null(html);
- assert_string_equal(html, "<a href=\"http://example.org/\"><code>bola(2)[3]**!\\`</code></a>\n");
- free(html);
- html = blogc_content_parse_inline("[``bola(2)[3]**!```](http://example.org/)\n");
- assert_non_null(html);
- assert_string_equal(html, "<a href=\"http://example.org/\"><code>bola(2)[3]**!</code>`</a>\n");
+ assert_string_equal(html, "<a href=\"http://example.org/\"><code>bola(2)[3]**!`</code></a>\n");
free(html);
html = blogc_content_parse_inline("test suite!)\n"
"depends on [cmocka](http://cmocka.org/), though.\n");
@@ -2735,55 +2173,49 @@ test_content_parse_inline_endash_emdash(void **state)
int
main(void)
{
- const struct CMUnitTest tests[] = {
- cmocka_unit_test(test_slugify),
- cmocka_unit_test(test_htmlentities),
- cmocka_unit_test(test_fix_description),
- cmocka_unit_test(test_is_ordered_list_item),
- cmocka_unit_test(test_content_parse),
- cmocka_unit_test(test_content_parse_crlf),
- cmocka_unit_test(test_content_parse_with_excerpt),
- cmocka_unit_test(test_content_parse_with_excerpt_crlf),
- cmocka_unit_test(test_content_parse_header),
- cmocka_unit_test(test_content_parse_header_crlf),
- cmocka_unit_test(test_content_parse_html),
- cmocka_unit_test(test_content_parse_html_crlf),
- cmocka_unit_test(test_content_parse_blockquote),
- cmocka_unit_test(test_content_parse_blockquote_crlf),
- cmocka_unit_test(test_content_parse_code),
- cmocka_unit_test(test_content_parse_code_crlf),
- cmocka_unit_test(test_content_parse_horizontal_rule),
- cmocka_unit_test(test_content_parse_horizontal_rule_crlf),
- cmocka_unit_test(test_content_parse_unordered_list),
- cmocka_unit_test(test_content_parse_unordered_list_crlf),
- cmocka_unit_test(test_content_parse_ordered_list),
- cmocka_unit_test(test_content_parse_ordered_list_crlf),
- cmocka_unit_test(test_content_parse_first_header),
- cmocka_unit_test(test_content_parse_first_header_crlf),
- cmocka_unit_test(test_content_parse_headers),
- cmocka_unit_test(test_content_parse_headers_crlf),
- cmocka_unit_test(test_content_parse_description),
- cmocka_unit_test(test_content_parse_description_crlf),
- cmocka_unit_test(test_content_parse_endl),
- cmocka_unit_test(test_content_parse_endl_crlf),
- cmocka_unit_test(test_content_parse_invalid_excerpt),
- cmocka_unit_test(test_content_parse_invalid_header),
- cmocka_unit_test(test_content_parse_invalid_header_empty),
- cmocka_unit_test(test_content_parse_invalid_blockquote),
- cmocka_unit_test(test_content_parse_invalid_code),
- cmocka_unit_test(test_content_parse_invalid_horizontal_rule),
- cmocka_unit_test(test_content_parse_invalid_unordered_list),
- cmocka_unit_test(test_content_parse_invalid_ordered_list),
- cmocka_unit_test(test_content_parse_inline),
- cmocka_unit_test(test_content_parse_inline_em),
- cmocka_unit_test(test_content_parse_inline_strong),
- cmocka_unit_test(test_content_parse_inline_code),
- cmocka_unit_test(test_content_parse_inline_link),
- cmocka_unit_test(test_content_parse_inline_link_auto),
- cmocka_unit_test(test_content_parse_inline_image),
- cmocka_unit_test(test_content_parse_inline_line_break),
- cmocka_unit_test(test_content_parse_inline_line_break_crlf),
- cmocka_unit_test(test_content_parse_inline_endash_emdash),
+ const UnitTest tests[] = {
+ unit_test(test_slugify),
+ unit_test(test_htmlentities),
+ unit_test(test_fix_description),
+ unit_test(test_is_ordered_list_item),
+ unit_test(test_content_parse),
+ unit_test(test_content_parse_crlf),
+ unit_test(test_content_parse_with_excerpt),
+ unit_test(test_content_parse_with_excerpt_crlf),
+ unit_test(test_content_parse_header),
+ unit_test(test_content_parse_header_crlf),
+ unit_test(test_content_parse_html),
+ unit_test(test_content_parse_html_crlf),
+ unit_test(test_content_parse_blockquote),
+ unit_test(test_content_parse_blockquote_crlf),
+ unit_test(test_content_parse_code),
+ unit_test(test_content_parse_code_crlf),
+ unit_test(test_content_parse_horizontal_rule),
+ unit_test(test_content_parse_horizontal_rule_crlf),
+ unit_test(test_content_parse_unordered_list),
+ unit_test(test_content_parse_unordered_list_crlf),
+ unit_test(test_content_parse_ordered_list),
+ unit_test(test_content_parse_ordered_list_crlf),
+ unit_test(test_content_parse_description),
+ unit_test(test_content_parse_description_crlf),
+ unit_test(test_content_parse_invalid_excerpt),
+ unit_test(test_content_parse_invalid_header),
+ unit_test(test_content_parse_invalid_header_empty),
+ unit_test(test_content_parse_invalid_blockquote),
+ unit_test(test_content_parse_invalid_code),
+ unit_test(test_content_parse_invalid_horizontal_rule),
+ unit_test(test_content_parse_invalid_unordered_list),
+ unit_test(test_content_parse_invalid_ordered_list),
+ unit_test(test_content_parse_inline),
+ unit_test(test_content_parse_inline_em),
+ unit_test(test_content_parse_inline_strong),
+ unit_test(test_content_parse_inline_code),
+ unit_test(test_content_parse_inline_link),
+ unit_test(test_content_parse_inline_link_auto),
+ unit_test(test_content_parse_inline_image),
+ unit_test(test_content_parse_inline_line_break),
+ unit_test(test_content_parse_inline_line_break_crlf),
+ unit_test(test_content_parse_inline_endash_emdash),
};
- return cmocka_run_group_tests(tests, NULL, NULL);
+ return run_tests(tests);
}
diff --git a/tests/blogc/check_datetime_parser.c b/tests/check_datetime_parser.c
index fe0ddd8..03f5a9a 100644
--- a/tests/blogc/check_datetime_parser.c
+++ b/tests/check_datetime_parser.c
@@ -1,6 +1,6 @@
/*
* blogc: A blog compiler.
- * Copyright (C) 2014-2019 Rafael G. Martins <rafael@rafaelmartins.eng.br>
+ * Copyright (C) 2015-2016 Rafael G. Martins <rafael@rafaelmartins.eng.br>
*
* This program can be distributed under the terms of the BSD License.
* See the file LICENSE.
@@ -12,14 +12,14 @@
#include <cmocka.h>
#include <stdlib.h>
#include <locale.h>
-#include "../../src/common/error.h"
-#include "../../src/blogc/datetime-parser.h"
+#include "../src/error.h"
+#include "../src/datetime-parser.h"
static void
test_convert_datetime(void **state)
{
- bc_error_t *err = NULL;
+ blogc_error_t *err = NULL;
char *dt = blogc_convert_datetime("2010-11-30 12:13:14",
"%b %d, %Y, %I:%M:%S %p GMT", &err);
assert_null(err);
@@ -31,7 +31,7 @@ test_convert_datetime(void **state)
static void
test_convert_datetime_implicit_seconds(void **state)
{
- bc_error_t *err = NULL;
+ blogc_error_t *err = NULL;
char *dt = blogc_convert_datetime("2010-11-30 12:13",
"%b %d, %Y, %I:%M:%S %p GMT", &err);
assert_null(err);
@@ -43,7 +43,7 @@ test_convert_datetime_implicit_seconds(void **state)
static void
test_convert_datetime_implicit_minutes(void **state)
{
- bc_error_t *err = NULL;
+ blogc_error_t *err = NULL;
char *dt = blogc_convert_datetime("2010-11-30 12",
"%b %d, %Y, %I:%M:%S %p GMT", &err);
assert_null(err);
@@ -55,7 +55,7 @@ test_convert_datetime_implicit_minutes(void **state)
static void
test_convert_datetime_implicit_hours(void **state)
{
- bc_error_t *err = NULL;
+ blogc_error_t *err = NULL;
char *dt = blogc_convert_datetime("2010-11-30",
"%b %d, %Y, %I:%M:%S %p GMT", &err);
assert_null(err);
@@ -67,7 +67,7 @@ test_convert_datetime_implicit_hours(void **state)
static void
test_convert_datetime_invalid_formats(void **state)
{
- bc_error_t *err = NULL;
+ blogc_error_t *err = NULL;
char *dt = blogc_convert_datetime("", "%b %d, %Y, %I:%M:%S %p GMT", &err);
assert_null(dt);
assert_non_null(err);
@@ -76,7 +76,7 @@ test_convert_datetime_invalid_formats(void **state)
"Invalid datetime string. Found '', formats allowed are: "
"'yyyy-mm-dd hh:mm:ss', 'yyyy-mm-dd hh:ss', 'yyyy-mm-dd hh' and "
"'yyyy-mm-dd'.");
- bc_error_free(err);
+ blogc_error_free(err);
err = NULL;
dt = blogc_convert_datetime("2", "%b %d, %Y, %I:%M:%S %p GMT", &err);
@@ -87,7 +87,7 @@ test_convert_datetime_invalid_formats(void **state)
"Invalid datetime string. Found '2', formats allowed are: "
"'yyyy-mm-dd hh:mm:ss', 'yyyy-mm-dd hh:ss', 'yyyy-mm-dd hh' and "
"'yyyy-mm-dd'.");
- bc_error_free(err);
+ blogc_error_free(err);
err = NULL;
dt = blogc_convert_datetime("20", "%b %d, %Y, %I:%M:%S %p GMT", &err);
@@ -98,7 +98,7 @@ test_convert_datetime_invalid_formats(void **state)
"Invalid datetime string. Found '20', formats allowed are: "
"'yyyy-mm-dd hh:mm:ss', 'yyyy-mm-dd hh:ss', 'yyyy-mm-dd hh' and "
"'yyyy-mm-dd'.");
- bc_error_free(err);
+ blogc_error_free(err);
err = NULL;
dt = blogc_convert_datetime("201", "%b %d, %Y, %I:%M:%S %p GMT", &err);
@@ -109,7 +109,7 @@ test_convert_datetime_invalid_formats(void **state)
"Invalid datetime string. Found '201', formats allowed are: "
"'yyyy-mm-dd hh:mm:ss', 'yyyy-mm-dd hh:ss', 'yyyy-mm-dd hh' and "
"'yyyy-mm-dd'.");
- bc_error_free(err);
+ blogc_error_free(err);
err = NULL;
dt = blogc_convert_datetime("2010", "%b %d, %Y, %I:%M:%S %p GMT", &err);
@@ -120,7 +120,7 @@ test_convert_datetime_invalid_formats(void **state)
"Invalid datetime string. Found '2010', formats allowed are: "
"'yyyy-mm-dd hh:mm:ss', 'yyyy-mm-dd hh:ss', 'yyyy-mm-dd hh' and "
"'yyyy-mm-dd'.");
- bc_error_free(err);
+ blogc_error_free(err);
err = NULL;
dt = blogc_convert_datetime("2010-", "%b %d, %Y, %I:%M:%S %p GMT", &err);
@@ -131,7 +131,7 @@ test_convert_datetime_invalid_formats(void **state)
"Invalid datetime string. Found '2010-', formats allowed are: "
"'yyyy-mm-dd hh:mm:ss', 'yyyy-mm-dd hh:ss', 'yyyy-mm-dd hh' and "
"'yyyy-mm-dd'.");
- bc_error_free(err);
+ blogc_error_free(err);
err = NULL;
dt = blogc_convert_datetime("2010-1", "%b %d, %Y, %I:%M:%S %p GMT", &err);
@@ -142,7 +142,7 @@ test_convert_datetime_invalid_formats(void **state)
"Invalid datetime string. Found '2010-1', formats allowed are: "
"'yyyy-mm-dd hh:mm:ss', 'yyyy-mm-dd hh:ss', 'yyyy-mm-dd hh' and "
"'yyyy-mm-dd'.");
- bc_error_free(err);
+ blogc_error_free(err);
err = NULL;
dt = blogc_convert_datetime("2010-11", "%b %d, %Y, %I:%M:%S %p GMT", &err);
@@ -153,7 +153,7 @@ test_convert_datetime_invalid_formats(void **state)
"Invalid datetime string. Found '2010-11', formats allowed are: "
"'yyyy-mm-dd hh:mm:ss', 'yyyy-mm-dd hh:ss', 'yyyy-mm-dd hh' and "
"'yyyy-mm-dd'.");
- bc_error_free(err);
+ blogc_error_free(err);
err = NULL;
dt = blogc_convert_datetime("2010-11-", "%b %d, %Y, %I:%M:%S %p GMT", &err);
@@ -164,7 +164,7 @@ test_convert_datetime_invalid_formats(void **state)
"Invalid datetime string. Found '2010-11-', formats allowed are: "
"'yyyy-mm-dd hh:mm:ss', 'yyyy-mm-dd hh:ss', 'yyyy-mm-dd hh' and "
"'yyyy-mm-dd'.");
- bc_error_free(err);
+ blogc_error_free(err);
err = NULL;
dt = blogc_convert_datetime("2010-11-3", "%b %d, %Y, %I:%M:%S %p GMT", &err);
@@ -175,7 +175,7 @@ test_convert_datetime_invalid_formats(void **state)
"Invalid datetime string. Found '2010-11-3', formats allowed are: "
"'yyyy-mm-dd hh:mm:ss', 'yyyy-mm-dd hh:ss', 'yyyy-mm-dd hh' and "
"'yyyy-mm-dd'.");
- bc_error_free(err);
+ blogc_error_free(err);
err = NULL;
dt = blogc_convert_datetime("2010-11-30 ", "%b %d, %Y, %I:%M:%S %p GMT", &err);
@@ -186,7 +186,7 @@ test_convert_datetime_invalid_formats(void **state)
"Invalid datetime string. Found '2010-11-30 ', formats allowed are: "
"'yyyy-mm-dd hh:mm:ss', 'yyyy-mm-dd hh:ss', 'yyyy-mm-dd hh' and "
"'yyyy-mm-dd'.");
- bc_error_free(err);
+ blogc_error_free(err);
err = NULL;
dt = blogc_convert_datetime("2010-11-30 1", "%b %d, %Y, %I:%M:%S %p GMT", &err);
@@ -197,7 +197,7 @@ test_convert_datetime_invalid_formats(void **state)
"Invalid datetime string. Found '2010-11-30 1', formats allowed are: "
"'yyyy-mm-dd hh:mm:ss', 'yyyy-mm-dd hh:ss', 'yyyy-mm-dd hh' and "
"'yyyy-mm-dd'.");
- bc_error_free(err);
+ blogc_error_free(err);
err = NULL;
dt = blogc_convert_datetime("2010-11-30 12:1", "%b %d, %Y, %I:%M:%S %p GMT",
@@ -209,7 +209,7 @@ test_convert_datetime_invalid_formats(void **state)
"Invalid datetime string. Found '2010-11-30 12:1', formats allowed are: "
"'yyyy-mm-dd hh:mm:ss', 'yyyy-mm-dd hh:ss', 'yyyy-mm-dd hh' and "
"'yyyy-mm-dd'.");
- bc_error_free(err);
+ blogc_error_free(err);
err = NULL;
dt = blogc_convert_datetime("2010-11-30 12:13:1", "%b %d, %Y, %I:%M:%S %p GMT",
@@ -221,14 +221,14 @@ test_convert_datetime_invalid_formats(void **state)
"Invalid datetime string. Found '2010-11-30 12:13:1', formats allowed are: "
"'yyyy-mm-dd hh:mm:ss', 'yyyy-mm-dd hh:ss', 'yyyy-mm-dd hh' and "
"'yyyy-mm-dd'.");
- bc_error_free(err);
+ blogc_error_free(err);
}
static void
test_convert_datetime_invalid_1st_year(void **state)
{
- bc_error_t *err = NULL;
+ blogc_error_t *err = NULL;
char *dt = blogc_convert_datetime("a010-11-30 12:13:14",
"%b %d, %Y, %I:%M:%S %p GMT", &err);
assert_null(dt);
@@ -236,14 +236,14 @@ test_convert_datetime_invalid_1st_year(void **state)
assert_int_equal(err->type, BLOGC_WARNING_DATETIME_PARSER);
assert_string_equal(err->msg,
"Invalid first digit of year. Found 'a', must be integer >= 0 and <= 9.");
- bc_error_free(err);
+ blogc_error_free(err);
}
static void
test_convert_datetime_invalid_2nd_year(void **state)
{
- bc_error_t *err = NULL;
+ blogc_error_t *err = NULL;
char *dt = blogc_convert_datetime("2a10-11-30 12:13:14",
"%b %d, %Y, %I:%M:%S %p GMT", &err);
assert_null(dt);
@@ -251,14 +251,14 @@ test_convert_datetime_invalid_2nd_year(void **state)
assert_int_equal(err->type, BLOGC_WARNING_DATETIME_PARSER);
assert_string_equal(err->msg,
"Invalid second digit of year. Found 'a', must be integer >= 0 and <= 9.");
- bc_error_free(err);
+ blogc_error_free(err);
}
static void
test_convert_datetime_invalid_3rd_year(void **state)
{
- bc_error_t *err = NULL;
+ blogc_error_t *err = NULL;
char *dt = blogc_convert_datetime("20a0-11-30 12:13:14",
"%b %d, %Y, %I:%M:%S %p GMT", &err);
assert_null(dt);
@@ -266,14 +266,14 @@ test_convert_datetime_invalid_3rd_year(void **state)
assert_int_equal(err->type, BLOGC_WARNING_DATETIME_PARSER);
assert_string_equal(err->msg,
"Invalid third digit of year. Found 'a', must be integer >= 0 and <= 9.");
- bc_error_free(err);
+ blogc_error_free(err);
}
static void
test_convert_datetime_invalid_4th_year(void **state)
{
- bc_error_t *err = NULL;
+ blogc_error_t *err = NULL;
char *dt = blogc_convert_datetime("201a-11-30 12:13:14",
"%b %d, %Y, %I:%M:%S %p GMT", &err);
assert_null(dt);
@@ -281,14 +281,14 @@ test_convert_datetime_invalid_4th_year(void **state)
assert_int_equal(err->type, BLOGC_WARNING_DATETIME_PARSER);
assert_string_equal(err->msg,
"Invalid fourth digit of year. Found 'a', must be integer >= 0 and <= 9.");
- bc_error_free(err);
+ blogc_error_free(err);
}
static void
test_convert_datetime_invalid_year(void **state)
{
- bc_error_t *err = NULL;
+ blogc_error_t *err = NULL;
char *dt = blogc_convert_datetime("1899-11-30 12:13:14",
"%b %d, %Y, %I:%M:%S %p GMT", &err);
assert_null(dt);
@@ -296,14 +296,14 @@ test_convert_datetime_invalid_year(void **state)
assert_int_equal(err->type, BLOGC_WARNING_DATETIME_PARSER);
assert_string_equal(err->msg,
"Invalid year. Found 1899, must be >= 1900.");
- bc_error_free(err);
+ blogc_error_free(err);
}
static void
test_convert_datetime_invalid_1st_hyphen(void **state)
{
- bc_error_t *err = NULL;
+ blogc_error_t *err = NULL;
char *dt = blogc_convert_datetime("2010 11-30 12:13:14",
"%b %d, %Y, %I:%M:%S %p GMT", &err);
assert_null(dt);
@@ -311,14 +311,14 @@ test_convert_datetime_invalid_1st_hyphen(void **state)
assert_int_equal(err->type, BLOGC_WARNING_DATETIME_PARSER);
assert_string_equal(err->msg,
"Invalid separator between year and month. Found ' ', must be '-'.");
- bc_error_free(err);
+ blogc_error_free(err);
}
static void
test_convert_datetime_invalid_1st_month(void **state)
{
- bc_error_t *err = NULL;
+ blogc_error_t *err = NULL;
char *dt = blogc_convert_datetime("2010-a1-30 12:13:14",
"%b %d, %Y, %I:%M:%S %p GMT", &err);
assert_null(dt);
@@ -326,14 +326,14 @@ test_convert_datetime_invalid_1st_month(void **state)
assert_int_equal(err->type, BLOGC_WARNING_DATETIME_PARSER);
assert_string_equal(err->msg,
"Invalid first digit of month. Found 'a', must be integer >= 0 and <= 1.");
- bc_error_free(err);
+ blogc_error_free(err);
}
static void
test_convert_datetime_invalid_2nd_month(void **state)
{
- bc_error_t *err = NULL;
+ blogc_error_t *err = NULL;
char *dt = blogc_convert_datetime("2010-1a-30 12:13:14",
"%b %d, %Y, %I:%M:%S %p GMT", &err);
assert_null(dt);
@@ -341,14 +341,14 @@ test_convert_datetime_invalid_2nd_month(void **state)
assert_int_equal(err->type, BLOGC_WARNING_DATETIME_PARSER);
assert_string_equal(err->msg,
"Invalid second digit of month. Found 'a', must be integer >= 0 and <= 9.");
- bc_error_free(err);
+ blogc_error_free(err);
}
static void
test_convert_datetime_invalid_month(void **state)
{
- bc_error_t *err = NULL;
+ blogc_error_t *err = NULL;
char *dt = blogc_convert_datetime("2010-13-30 12:13:14",
"%b %d, %Y, %I:%M:%S %p GMT", &err);
assert_null(dt);
@@ -356,14 +356,14 @@ test_convert_datetime_invalid_month(void **state)
assert_int_equal(err->type, BLOGC_WARNING_DATETIME_PARSER);
assert_string_equal(err->msg,
"Invalid month. Found 13, must be >= 1 and <= 12.");
- bc_error_free(err);
+ blogc_error_free(err);
}
static void
test_convert_datetime_invalid_2nd_hyphen(void **state)
{
- bc_error_t *err = NULL;
+ blogc_error_t *err = NULL;
char *dt = blogc_convert_datetime("2010-11 30 12:13:14",
"%b %d, %Y, %I:%M:%S %p GMT", &err);
assert_null(dt);
@@ -371,14 +371,14 @@ test_convert_datetime_invalid_2nd_hyphen(void **state)
assert_int_equal(err->type, BLOGC_WARNING_DATETIME_PARSER);
assert_string_equal(err->msg,
"Invalid separator between month and day. Found ' ', must be '-'.");
- bc_error_free(err);
+ blogc_error_free(err);
}
static void
test_convert_datetime_invalid_1st_day(void **state)
{
- bc_error_t *err = NULL;
+ blogc_error_t *err = NULL;
char *dt = blogc_convert_datetime("2010-11-a0 12:13:14",
"%b %d, %Y, %I:%M:%S %p GMT", &err);
assert_null(dt);
@@ -386,14 +386,14 @@ test_convert_datetime_invalid_1st_day(void **state)
assert_int_equal(err->type, BLOGC_WARNING_DATETIME_PARSER);
assert_string_equal(err->msg,
"Invalid first digit of day. Found 'a', must be integer >= 0 and <= 3.");
- bc_error_free(err);
+ blogc_error_free(err);
}
static void
test_convert_datetime_invalid_2nd_day(void **state)
{
- bc_error_t *err = NULL;
+ blogc_error_t *err = NULL;
char *dt = blogc_convert_datetime("2010-11-3a 12:13:14",
"%b %d, %Y, %I:%M:%S %p GMT", &err);
assert_null(dt);
@@ -401,14 +401,14 @@ test_convert_datetime_invalid_2nd_day(void **state)
assert_int_equal(err->type, BLOGC_WARNING_DATETIME_PARSER);
assert_string_equal(err->msg,
"Invalid second digit of day. Found 'a', must be integer >= 0 and <= 9.");
- bc_error_free(err);
+ blogc_error_free(err);
}
static void
test_convert_datetime_invalid_day(void **state)
{
- bc_error_t *err = NULL;
+ blogc_error_t *err = NULL;
char *dt = blogc_convert_datetime("2010-12-32 12:13:14",
"%b %d, %Y, %I:%M:%S %p GMT", &err);
assert_null(dt);
@@ -416,14 +416,14 @@ test_convert_datetime_invalid_day(void **state)
assert_int_equal(err->type, BLOGC_WARNING_DATETIME_PARSER);
assert_string_equal(err->msg,
"Invalid day. Found 32, must be >= 1 and <= 31.");
- bc_error_free(err);
+ blogc_error_free(err);
}
static void
test_convert_datetime_invalid_space(void **state)
{
- bc_error_t *err = NULL;
+ blogc_error_t *err = NULL;
char *dt = blogc_convert_datetime("2010-11-30-12:13:14",
"%b %d, %Y, %I:%M:%S %p GMT", &err);
assert_null(dt);
@@ -432,14 +432,14 @@ test_convert_datetime_invalid_space(void **state)
assert_string_equal(err->msg,
"Invalid separator between date and time. Found '-', must be ' ' "
"(empty space).");
- bc_error_free(err);
+ blogc_error_free(err);
}
static void
test_convert_datetime_invalid_1st_hours(void **state)
{
- bc_error_t *err = NULL;
+ blogc_error_t *err = NULL;
char *dt = blogc_convert_datetime("2010-11-30 a2:13:14",
"%b %d, %Y, %I:%M:%S %p GMT", &err);
assert_null(dt);
@@ -447,14 +447,14 @@ test_convert_datetime_invalid_1st_hours(void **state)
assert_int_equal(err->type, BLOGC_WARNING_DATETIME_PARSER);
assert_string_equal(err->msg,
"Invalid first digit of hours. Found 'a', must be integer >= 0 and <= 2.");
- bc_error_free(err);
+ blogc_error_free(err);
}
static void
test_convert_datetime_invalid_2nd_hours(void **state)
{
- bc_error_t *err = NULL;
+ blogc_error_t *err = NULL;
char *dt = blogc_convert_datetime("2010-11-30 1a:13:14",
"%b %d, %Y, %I:%M:%S %p GMT", &err);
assert_null(dt);
@@ -462,14 +462,14 @@ test_convert_datetime_invalid_2nd_hours(void **state)
assert_int_equal(err->type, BLOGC_WARNING_DATETIME_PARSER);
assert_string_equal(err->msg,
"Invalid second digit of hours. Found 'a', must be integer >= 0 and <= 9.");
- bc_error_free(err);
+ blogc_error_free(err);
}
static void
test_convert_datetime_invalid_hours(void **state)
{
- bc_error_t *err = NULL;
+ blogc_error_t *err = NULL;
char *dt = blogc_convert_datetime("2010-12-30 24:13:14",
"%b %d, %Y, %I:%M:%S %p GMT", &err);
assert_null(dt);
@@ -477,14 +477,14 @@ test_convert_datetime_invalid_hours(void **state)
assert_int_equal(err->type, BLOGC_WARNING_DATETIME_PARSER);
assert_string_equal(err->msg,
"Invalid hours. Found 24, must be >= 0 and <= 23.");
- bc_error_free(err);
+ blogc_error_free(err);
}
static void
test_convert_datetime_invalid_1st_colon(void **state)
{
- bc_error_t *err = NULL;
+ blogc_error_t *err = NULL;
char *dt = blogc_convert_datetime("2010-11-30 12 13:14",
"%b %d, %Y, %I:%M:%S %p GMT", &err);
assert_null(dt);
@@ -492,14 +492,14 @@ test_convert_datetime_invalid_1st_colon(void **state)
assert_int_equal(err->type, BLOGC_WARNING_DATETIME_PARSER);
assert_string_equal(err->msg,
"Invalid separator between hours and minutes. Found ' ', must be ':'.");
- bc_error_free(err);
+ blogc_error_free(err);
}
static void
test_convert_datetime_invalid_1st_minutes(void **state)
{
- bc_error_t *err = NULL;
+ blogc_error_t *err = NULL;
char *dt = blogc_convert_datetime("2010-11-30 12:a3:14",
"%b %d, %Y, %I:%M:%S %p GMT", &err);
assert_null(dt);
@@ -507,14 +507,14 @@ test_convert_datetime_invalid_1st_minutes(void **state)
assert_int_equal(err->type, BLOGC_WARNING_DATETIME_PARSER);
assert_string_equal(err->msg,
"Invalid first digit of minutes. Found 'a', must be integer >= 0 and <= 5.");
- bc_error_free(err);
+ blogc_error_free(err);
}
static void
test_convert_datetime_invalid_2nd_minutes(void **state)
{
- bc_error_t *err = NULL;
+ blogc_error_t *err = NULL;
char *dt = blogc_convert_datetime("2010-11-30 12:1a:14",
"%b %d, %Y, %I:%M:%S %p GMT", &err);
assert_null(dt);
@@ -522,14 +522,14 @@ test_convert_datetime_invalid_2nd_minutes(void **state)
assert_int_equal(err->type, BLOGC_WARNING_DATETIME_PARSER);
assert_string_equal(err->msg,
"Invalid second digit of minutes. Found 'a', must be integer >= 0 and <= 9.");
- bc_error_free(err);
+ blogc_error_free(err);
}
static void
test_convert_datetime_invalid_2nd_colon(void **state)
{
- bc_error_t *err = NULL;
+ blogc_error_t *err = NULL;
char *dt = blogc_convert_datetime("2010-11-30 12:13 14",
"%b %d, %Y, %I:%M:%S %p GMT", &err);
assert_null(dt);
@@ -537,14 +537,14 @@ test_convert_datetime_invalid_2nd_colon(void **state)
assert_int_equal(err->type, BLOGC_WARNING_DATETIME_PARSER);
assert_string_equal(err->msg,
"Invalid separator between minutes and seconds. Found ' ', must be ':'.");
- bc_error_free(err);
+ blogc_error_free(err);
}
static void
test_convert_datetime_invalid_1st_seconds(void **state)
{
- bc_error_t *err = NULL;
+ blogc_error_t *err = NULL;
char *dt = blogc_convert_datetime("2010-11-30 12:13:a4",
"%b %d, %Y, %I:%M:%S %p GMT", &err);
assert_null(dt);
@@ -552,14 +552,14 @@ test_convert_datetime_invalid_1st_seconds(void **state)
assert_int_equal(err->type, BLOGC_WARNING_DATETIME_PARSER);
assert_string_equal(err->msg,
"Invalid first digit of seconds. Found 'a', must be integer >= 0 and <= 6.");
- bc_error_free(err);
+ blogc_error_free(err);
}
static void
test_convert_datetime_invalid_2nd_seconds(void **state)
{
- bc_error_t *err = NULL;
+ blogc_error_t *err = NULL;
char *dt = blogc_convert_datetime("2010-11-30 12:13:1a",
"%b %d, %Y, %I:%M:%S %p GMT", &err);
assert_null(dt);
@@ -567,14 +567,14 @@ test_convert_datetime_invalid_2nd_seconds(void **state)
assert_int_equal(err->type, BLOGC_WARNING_DATETIME_PARSER);
assert_string_equal(err->msg,
"Invalid second digit of seconds. Found 'a', must be integer >= 0 and <= 9.");
- bc_error_free(err);
+ blogc_error_free(err);
}
static void
test_convert_datetime_invalid_seconds(void **state)
{
- bc_error_t *err = NULL;
+ blogc_error_t *err = NULL;
char *dt = blogc_convert_datetime("2010-12-30 12:13:69",
"%b %d, %Y, %I:%M:%S %p GMT", &err);
assert_null(dt);
@@ -582,14 +582,14 @@ test_convert_datetime_invalid_seconds(void **state)
assert_int_equal(err->type, BLOGC_WARNING_DATETIME_PARSER);
assert_string_equal(err->msg,
"Invalid seconds. Found 69, must be >= 0 and <= 60.");
- bc_error_free(err);
+ blogc_error_free(err);
}
static void
test_convert_datetime_invalid_format_long(void **state)
{
- bc_error_t *err = NULL;
+ blogc_error_t *err = NULL;
char *dt = blogc_convert_datetime("2010-12-30 12:13:14",
"bovhsuhxwybfrxoluiejaoqpmoylgvkrjtnuntmcgtupwabexkapnklvkwmddmplfqopvb"
"yjsiimtfdeveeeayqvvnthimbqotumngxxenurxhsvyaftwsfdtxqnjluvtcwfkomfffrk"
@@ -626,7 +626,7 @@ test_convert_datetime_invalid_format_long(void **state)
"uaeruwnphdjonqagjatjladqhvlxppyaqgvwpjqggnsccmkjvbxqykaejvgeajqpitkwsq"
"gmjiaopomnnlewidhgbgqlblotrnuyokspuvbckqhwnhmgcwyyitmlelnehdvclojvyswj"
"jgipsincitulscikxviaruryfraeqssykeftcphtndlfhdxokg");
- bc_error_free(err);
+ blogc_error_free(err);
}
@@ -634,38 +634,38 @@ int
main(void)
{
setlocale(LC_ALL, "C");
- const struct CMUnitTest tests[] = {
- cmocka_unit_test(test_convert_datetime),
- cmocka_unit_test(test_convert_datetime_implicit_seconds),
- cmocka_unit_test(test_convert_datetime_implicit_minutes),
- cmocka_unit_test(test_convert_datetime_implicit_hours),
- cmocka_unit_test(test_convert_datetime_invalid_formats),
- cmocka_unit_test(test_convert_datetime_invalid_1st_year),
- cmocka_unit_test(test_convert_datetime_invalid_2nd_year),
- cmocka_unit_test(test_convert_datetime_invalid_3rd_year),
- cmocka_unit_test(test_convert_datetime_invalid_4th_year),
- cmocka_unit_test(test_convert_datetime_invalid_year),
- cmocka_unit_test(test_convert_datetime_invalid_1st_hyphen),
- cmocka_unit_test(test_convert_datetime_invalid_1st_month),
- cmocka_unit_test(test_convert_datetime_invalid_2nd_month),
- cmocka_unit_test(test_convert_datetime_invalid_month),
- cmocka_unit_test(test_convert_datetime_invalid_2nd_hyphen),
- cmocka_unit_test(test_convert_datetime_invalid_1st_day),
- cmocka_unit_test(test_convert_datetime_invalid_2nd_day),
- cmocka_unit_test(test_convert_datetime_invalid_day),
- cmocka_unit_test(test_convert_datetime_invalid_space),
- cmocka_unit_test(test_convert_datetime_invalid_1st_hours),
- cmocka_unit_test(test_convert_datetime_invalid_2nd_hours),
- cmocka_unit_test(test_convert_datetime_invalid_hours),
- cmocka_unit_test(test_convert_datetime_invalid_1st_colon),
- cmocka_unit_test(test_convert_datetime_invalid_1st_minutes),
- cmocka_unit_test(test_convert_datetime_invalid_2nd_minutes),
- //cmocka_unit_test(test_convert_datetime_invalid_minutes), // not possible
- cmocka_unit_test(test_convert_datetime_invalid_2nd_colon),
- cmocka_unit_test(test_convert_datetime_invalid_1st_seconds),
- cmocka_unit_test(test_convert_datetime_invalid_2nd_seconds),
- cmocka_unit_test(test_convert_datetime_invalid_seconds),
- cmocka_unit_test(test_convert_datetime_invalid_format_long),
+ const UnitTest tests[] = {
+ unit_test(test_convert_datetime),
+ unit_test(test_convert_datetime_implicit_seconds),
+ unit_test(test_convert_datetime_implicit_minutes),
+ unit_test(test_convert_datetime_implicit_hours),
+ unit_test(test_convert_datetime_invalid_formats),
+ unit_test(test_convert_datetime_invalid_1st_year),
+ unit_test(test_convert_datetime_invalid_2nd_year),
+ unit_test(test_convert_datetime_invalid_3rd_year),
+ unit_test(test_convert_datetime_invalid_4th_year),
+ unit_test(test_convert_datetime_invalid_year),
+ unit_test(test_convert_datetime_invalid_1st_hyphen),
+ unit_test(test_convert_datetime_invalid_1st_month),
+ unit_test(test_convert_datetime_invalid_2nd_month),
+ unit_test(test_convert_datetime_invalid_month),
+ unit_test(test_convert_datetime_invalid_2nd_hyphen),
+ unit_test(test_convert_datetime_invalid_1st_day),
+ unit_test(test_convert_datetime_invalid_2nd_day),
+ unit_test(test_convert_datetime_invalid_day),
+ unit_test(test_convert_datetime_invalid_space),
+ unit_test(test_convert_datetime_invalid_1st_hours),
+ unit_test(test_convert_datetime_invalid_2nd_hours),
+ unit_test(test_convert_datetime_invalid_hours),
+ unit_test(test_convert_datetime_invalid_1st_colon),
+ unit_test(test_convert_datetime_invalid_1st_minutes),
+ unit_test(test_convert_datetime_invalid_2nd_minutes),
+ //unit_test(test_convert_datetime_invalid_minutes), // not possible
+ unit_test(test_convert_datetime_invalid_2nd_colon),
+ unit_test(test_convert_datetime_invalid_1st_seconds),
+ unit_test(test_convert_datetime_invalid_2nd_seconds),
+ unit_test(test_convert_datetime_invalid_seconds),
+ unit_test(test_convert_datetime_invalid_format_long),
};
- return cmocka_run_group_tests(tests, NULL, NULL);
+ return run_tests(tests);
}
diff --git a/tests/common/check_error.c b/tests/check_error.c
index 658ad22..e844998 100644
--- a/tests/common/check_error.c
+++ b/tests/check_error.c
@@ -1,6 +1,6 @@
/*
* blogc: A blog compiler.
- * Copyright (C) 2014-2019 Rafael G. Martins <rafael@rafaelmartins.eng.br>
+ * Copyright (C) 2015-2016 Rafael G. Martins <rafael@rafaelmartins.eng.br>
*
* This program can be distributed under the terms of the BSD License.
* See the file LICENSE.
@@ -11,33 +11,28 @@
#include <setjmp.h>
#include <cmocka.h>
#include <string.h>
-#include "../../src/common/error.h"
+#include "../src/error.h"
static void
test_error_new(void **state)
{
- bc_error_t *error = bc_error_new(1, "bola %s");
+ blogc_error_t *error = blogc_error_new(1, "bola %s");
assert_non_null(error);
assert_int_equal(error->type, 1);
assert_string_equal(error->msg, "bola %s");
- bc_error_free(error);
+ blogc_error_free(error);
}
static void
test_error_new_printf(void **state)
{
- bc_error_t *error = bc_error_new_printf(2, NULL);
- assert_non_null(error);
- assert_int_equal(error->type, 2);
- assert_string_equal(error->msg, "");
- bc_error_free(error);
- error = bc_error_new_printf(2, "bola %s", "guda");
+ blogc_error_t *error = blogc_error_new_printf(2, "bola %s", "guda");
assert_non_null(error);
assert_int_equal(error->type, 2);
assert_string_equal(error->msg, "bola guda");
- bc_error_free(error);
+ blogc_error_free(error);
}
@@ -45,32 +40,32 @@ static void
test_error_parser(void **state)
{
const char *a = "bola\nguda\nchunda\n";
- bc_error_t *error = bc_error_parser(1, a, strlen(a), 11, "asd %d", 10);
+ blogc_error_t *error = blogc_error_parser(1, a, strlen(a), 11, "asd %d", 10);
assert_non_null(error);
assert_int_equal(error->type, 1);
assert_string_equal(error->msg,
"asd 10\nError occurred near line 3, position 2: chunda");
- bc_error_free(error);
+ blogc_error_free(error);
a = "bola\nguda\nchunda";
- error = bc_error_parser(1, a, strlen(a), 11, "asd %d", 10);
+ error = blogc_error_parser(1, a, strlen(a), 11, "asd %d", 10);
assert_non_null(error);
assert_int_equal(error->type, 1);
assert_string_equal(error->msg,
"asd 10\nError occurred near line 3, position 2: chunda");
- bc_error_free(error);
+ blogc_error_free(error);
a = "bola\nguda\nchunda";
- error = bc_error_parser(1, a, strlen(a), 0, "asd %d", 10);
+ error = blogc_error_parser(1, a, strlen(a), 0, "asd %d", 10);
assert_non_null(error);
assert_int_equal(error->type, 1);
assert_string_equal(error->msg,
"asd 10\nError occurred near line 1, position 1: bola");
- bc_error_free(error);
+ blogc_error_free(error);
a = "";
- error = bc_error_parser(1, a, strlen(a), 0, "asd %d", 10);
+ error = blogc_error_parser(1, a, strlen(a), 0, "asd %d", 10);
assert_non_null(error);
assert_int_equal(error->type, 1);
assert_string_equal(error->msg, "asd 10");
- bc_error_free(error);
+ blogc_error_free(error);
}
@@ -78,37 +73,37 @@ static void
test_error_parser_crlf(void **state)
{
const char *a = "bola\r\nguda\r\nchunda\r\n";
- bc_error_t *error = bc_error_parser(1, a, strlen(a), 13, "asd %d", 10);
+ blogc_error_t *error = blogc_error_parser(1, a, strlen(a), 13, "asd %d", 10);
assert_non_null(error);
assert_int_equal(error->type, 1);
assert_string_equal(error->msg,
"asd 10\nError occurred near line 3, position 2: chunda");
- bc_error_free(error);
+ blogc_error_free(error);
a = "bola\r\nguda\r\nchunda";
- error = bc_error_parser(1, a, strlen(a), 13, "asd %d", 10);
+ error = blogc_error_parser(1, a, strlen(a), 13, "asd %d", 10);
assert_non_null(error);
assert_int_equal(error->type, 1);
assert_string_equal(error->msg,
"asd 10\nError occurred near line 3, position 2: chunda");
- bc_error_free(error);
+ blogc_error_free(error);
a = "bola\r\nguda\r\nchunda";
- error = bc_error_parser(1, a, strlen(a), 0, "asd %d", 10);
+ error = blogc_error_parser(1, a, strlen(a), 0, "asd %d", 10);
assert_non_null(error);
assert_int_equal(error->type, 1);
assert_string_equal(error->msg,
"asd 10\nError occurred near line 1, position 1: bola");
- bc_error_free(error);
+ blogc_error_free(error);
}
int
main(void)
{
- const struct CMUnitTest tests[] = {
- cmocka_unit_test(test_error_new),
- cmocka_unit_test(test_error_new_printf),
- cmocka_unit_test(test_error_parser),
- cmocka_unit_test(test_error_parser_crlf),
+ const UnitTest tests[] = {
+ unit_test(test_error_new),
+ unit_test(test_error_new_printf),
+ unit_test(test_error_parser),
+ unit_test(test_error_parser_crlf),
};
- return cmocka_run_group_tests(tests, NULL, NULL);
+ return run_tests(tests);
}
diff --git a/tests/check_loader.c b/tests/check_loader.c
new file mode 100644
index 0000000..44468c8
--- /dev/null
+++ b/tests/check_loader.c
@@ -0,0 +1,771 @@
+/*
+ * blogc: A blog compiler.
+ * Copyright (C) 2015-2016 Rafael G. Martins <rafael@rafaelmartins.eng.br>
+ *
+ * This program can be distributed under the terms of the BSD License.
+ * See the file LICENSE.
+ */
+
+#include <stdarg.h>
+#include <stddef.h>
+#include <setjmp.h>
+#include <cmocka.h>
+#include <stdlib.h>
+#include <string.h>
+#include <stdio.h>
+#include "../src/error.h"
+#include "../src/template-parser.h"
+#include "../src/loader.h"
+#include "../src/utils.h"
+
+
+static void
+test_get_filename(void **state)
+{
+ char *f = blogc_get_filename("/home/foo/asd/bola.txt");
+ assert_string_equal(f, "bola");
+ free(f);
+ f = blogc_get_filename("/home/foo/asd/bola.guda.txt");
+ assert_string_equal(f, "bola.guda");
+ free(f);
+ f = blogc_get_filename("bola.txt");
+ assert_string_equal(f, "bola");
+ free(f);
+ f = blogc_get_filename("bola.guda.txt");
+ assert_string_equal(f, "bola.guda");
+ free(f);
+ f = blogc_get_filename("/home/foo/asd/bola");
+ assert_string_equal(f, "bola");
+ free(f);
+ f = blogc_get_filename("bola");
+ assert_string_equal(f, "bola");
+ free(f);
+ f = blogc_get_filename("");
+ assert_null(f);
+ free(f);
+ f = blogc_get_filename(NULL);
+ assert_null(f);
+ free(f);
+}
+
+
+char*
+__wrap_blogc_file_get_contents(const char *path, size_t *len, blogc_error_t **err)
+{
+ assert_null(*err);
+ const char *_path = mock_type(const char*);
+ if (_path != NULL)
+ assert_string_equal(path, _path);
+ char *rv = mock_type(char*);
+ *len = 0;
+ if (rv != NULL)
+ *len = strlen(rv);
+ return rv;
+}
+
+
+int
+__wrap_blogc_fprintf(FILE *stream, const char *format, ...)
+{
+ assert_true(stream == mock_type(FILE*));
+ assert_string_equal(format, mock_type(const char*));
+ return strlen(format);
+}
+
+
+static void
+test_template_parse_from_file(void **state)
+{
+ blogc_error_t *err = NULL;
+ will_return(__wrap_blogc_file_get_contents, "bola");
+ will_return(__wrap_blogc_file_get_contents, sb_strdup("{{ BOLA }}\n"));
+ sb_slist_t *l = blogc_template_parse_from_file("bola", &err);
+ assert_null(err);
+ assert_non_null(l);
+ assert_int_equal(sb_slist_length(l), 2);
+ blogc_template_free_stmts(l);
+}
+
+
+static void
+test_template_parse_from_file_null(void **state)
+{
+ blogc_error_t *err = NULL;
+ will_return(__wrap_blogc_file_get_contents, "bola");
+ will_return(__wrap_blogc_file_get_contents, NULL);
+ sb_slist_t *l = blogc_template_parse_from_file("bola", &err);
+ assert_null(err);
+ assert_null(l);
+}
+
+
+static void
+test_source_parse_from_file(void **state)
+{
+ blogc_error_t *err = NULL;
+ will_return(__wrap_blogc_file_get_contents, "bola.txt");
+ will_return(__wrap_blogc_file_get_contents, sb_strdup(
+ "ASD: 123\n"
+ "--------\n"
+ "bola"));
+ sb_trie_t *t = blogc_source_parse_from_file("bola.txt", &err);
+ assert_null(err);
+ assert_non_null(t);
+ assert_int_equal(sb_trie_size(t), 6);
+ assert_string_equal(sb_trie_lookup(t, "ASD"), "123");
+ assert_string_equal(sb_trie_lookup(t, "FILENAME"), "bola");
+ assert_string_equal(sb_trie_lookup(t, "EXCERPT"), "<p>bola</p>\n");
+ assert_string_equal(sb_trie_lookup(t, "CONTENT"), "<p>bola</p>\n");
+ assert_string_equal(sb_trie_lookup(t, "RAW_CONTENT"), "bola");
+ assert_string_equal(sb_trie_lookup(t, "DESCRIPTION"), "bola");
+ sb_trie_free(t);
+}
+
+
+static void
+test_source_parse_from_file_null(void **state)
+{
+ blogc_error_t *err = NULL;
+ will_return(__wrap_blogc_file_get_contents, "bola.txt");
+ will_return(__wrap_blogc_file_get_contents, NULL);
+ sb_trie_t *t = blogc_source_parse_from_file("bola.txt", &err);
+ assert_null(err);
+ assert_null(t);
+}
+
+
+static void
+test_source_parse_from_files(void **state)
+{
+ will_return(__wrap_blogc_file_get_contents, "bola1.txt");
+ will_return(__wrap_blogc_file_get_contents, sb_strdup(
+ "ASD: 123\n"
+ "DATE: 2001-02-03 04:05:06\n"
+ "--------\n"
+ "bola"));
+ will_return(__wrap_blogc_file_get_contents, "bola2.txt");
+ will_return(__wrap_blogc_file_get_contents, sb_strdup(
+ "ASD: 456\n"
+ "DATE: 2002-02-03 04:05:06\n"
+ "--------\n"
+ "bola"));
+ will_return(__wrap_blogc_file_get_contents, "bola3.txt");
+ will_return(__wrap_blogc_file_get_contents, sb_strdup(
+ "ASD: 789\n"
+ "DATE: 2003-02-03 04:05:06\n"
+ "--------\n"
+ "bola"));
+ blogc_error_t *err = NULL;
+ sb_slist_t *s = NULL;
+ s = sb_slist_append(s, sb_strdup("bola1.txt"));
+ s = sb_slist_append(s, sb_strdup("bola2.txt"));
+ s = sb_slist_append(s, sb_strdup("bola3.txt"));
+ sb_trie_t *c = sb_trie_new(free);
+ sb_slist_t *t = blogc_source_parse_from_files(c, s, &err);
+ assert_null(err);
+ assert_non_null(t);
+ assert_int_equal(sb_slist_length(t), 3); // it is enough, no need to look at the items
+ assert_int_equal(sb_trie_size(c), 4);
+ assert_string_equal(sb_trie_lookup(c, "FILENAME_FIRST"), "bola1");
+ assert_string_equal(sb_trie_lookup(c, "FILENAME_LAST"), "bola3");
+ assert_string_equal(sb_trie_lookup(c, "DATE_FIRST"), "2001-02-03 04:05:06");
+ assert_string_equal(sb_trie_lookup(c, "DATE_LAST"), "2003-02-03 04:05:06");
+ sb_trie_free(c);
+ sb_slist_free_full(s, free);
+ sb_slist_free_full(t, (sb_free_func_t) sb_trie_free);
+}
+
+
+static void
+test_source_parse_from_files_filter_by_tag(void **state)
+{
+ will_return(__wrap_blogc_file_get_contents, "bola1.txt");
+ will_return(__wrap_blogc_file_get_contents, sb_strdup(
+ "ASD: 123\n"
+ "DATE: 2001-02-03 04:05:06\n"
+ "TAGS: chunda\n"
+ "--------\n"
+ "bola"));
+ will_return(__wrap_blogc_file_get_contents, "bola2.txt");
+ will_return(__wrap_blogc_file_get_contents, sb_strdup(
+ "ASD: 456\n"
+ "DATE: 2002-02-03 04:05:06\n"
+ "TAGS: bola, chunda\n"
+ "--------\n"
+ "bola"));
+ will_return(__wrap_blogc_file_get_contents, "bola3.txt");
+ will_return(__wrap_blogc_file_get_contents, sb_strdup(
+ "ASD: 789\n"
+ "DATE: 2003-02-03 04:05:06\n"
+ "--------\n"
+ "bola"));
+ blogc_error_t *err = NULL;
+ sb_slist_t *s = NULL;
+ s = sb_slist_append(s, sb_strdup("bola1.txt"));
+ s = sb_slist_append(s, sb_strdup("bola2.txt"));
+ s = sb_slist_append(s, sb_strdup("bola3.txt"));
+ sb_trie_t *c = sb_trie_new(free);
+ sb_trie_insert(c, "FILTER_TAG", sb_strdup("chunda"));
+ sb_slist_t *t = blogc_source_parse_from_files(c, s, &err);
+ assert_null(err);
+ assert_non_null(t);
+ assert_int_equal(sb_slist_length(t), 2); // it is enough, no need to look at the items
+ assert_int_equal(sb_trie_size(c), 5);
+ assert_string_equal(sb_trie_lookup(c, "FILENAME_FIRST"), "bola1");
+ assert_string_equal(sb_trie_lookup(c, "FILENAME_LAST"), "bola2");
+ assert_string_equal(sb_trie_lookup(c, "DATE_FIRST"), "2001-02-03 04:05:06");
+ assert_string_equal(sb_trie_lookup(c, "DATE_LAST"), "2002-02-03 04:05:06");
+ assert_string_equal(sb_trie_lookup(c, "FILTER_TAG"), "chunda");
+ sb_trie_free(c);
+ sb_slist_free_full(s, free);
+ sb_slist_free_full(t, (sb_free_func_t) sb_trie_free);
+}
+
+
+static void
+test_source_parse_from_files_filter_by_page(void **state)
+{
+ will_return(__wrap_blogc_file_get_contents, "bola1.txt");
+ will_return(__wrap_blogc_file_get_contents, sb_strdup(
+ "ASD: 123\n"
+ "DATE: 2001-02-03 04:05:06\n"
+ "--------\n"
+ "bola"));
+ will_return(__wrap_blogc_file_get_contents, "bola2.txt");
+ will_return(__wrap_blogc_file_get_contents, sb_strdup(
+ "ASD: 456\n"
+ "DATE: 2002-02-03 04:05:06\n"
+ "--------\n"
+ "bola"));
+ will_return(__wrap_blogc_file_get_contents, "bola3.txt");
+ will_return(__wrap_blogc_file_get_contents, sb_strdup(
+ "ASD: 789\n"
+ "DATE: 2003-02-03 04:05:06\n"
+ "--------\n"
+ "bola"));
+ will_return(__wrap_blogc_file_get_contents, "bola4.txt");
+ will_return(__wrap_blogc_file_get_contents, sb_strdup(
+ "ASD: 7891\n"
+ "DATE: 2004-02-03 04:05:06\n"
+ "--------\n"
+ "bola"));
+ will_return(__wrap_blogc_file_get_contents, "bola5.txt");
+ will_return(__wrap_blogc_file_get_contents, sb_strdup(
+ "ASD: 7892\n"
+ "DATE: 2005-02-03 04:05:06\n"
+ "--------\n"
+ "bola"));
+ will_return(__wrap_blogc_file_get_contents, "bola6.txt");
+ will_return(__wrap_blogc_file_get_contents, sb_strdup(
+ "ASD: 7893\n"
+ "DATE: 2006-02-03 04:05:06\n"
+ "--------\n"
+ "bola"));
+ will_return(__wrap_blogc_file_get_contents, "bola7.txt");
+ will_return(__wrap_blogc_file_get_contents, sb_strdup(
+ "ASD: 7894\n"
+ "DATE: 2007-02-03 04:05:06\n"
+ "--------\n"
+ "bola"));
+ blogc_error_t *err = NULL;
+ sb_slist_t *s = NULL;
+ s = sb_slist_append(s, sb_strdup("bola1.txt"));
+ s = sb_slist_append(s, sb_strdup("bola2.txt"));
+ s = sb_slist_append(s, sb_strdup("bola3.txt"));
+ s = sb_slist_append(s, sb_strdup("bola4.txt"));
+ s = sb_slist_append(s, sb_strdup("bola5.txt"));
+ s = sb_slist_append(s, sb_strdup("bola6.txt"));
+ s = sb_slist_append(s, sb_strdup("bola7.txt"));
+ sb_trie_t *c = sb_trie_new(free);
+ sb_trie_insert(c, "FILTER_PAGE", sb_strdup("1"));
+ sb_trie_insert(c, "FILTER_PER_PAGE", sb_strdup("2"));
+ sb_slist_t *t = blogc_source_parse_from_files(c, s, &err);
+ assert_null(err);
+ assert_non_null(t);
+ assert_int_equal(sb_slist_length(t), 2); // it is enough, no need to look at the items
+ assert_int_equal(sb_trie_size(c), 10);
+ assert_string_equal(sb_trie_lookup(c, "FILENAME_FIRST"), "bola1");
+ assert_string_equal(sb_trie_lookup(c, "FILENAME_LAST"), "bola2");
+ assert_string_equal(sb_trie_lookup(c, "DATE_FIRST"), "2001-02-03 04:05:06");
+ assert_string_equal(sb_trie_lookup(c, "DATE_LAST"), "2002-02-03 04:05:06");
+ assert_string_equal(sb_trie_lookup(c, "FILTER_PAGE"), "1");
+ assert_string_equal(sb_trie_lookup(c, "FILTER_PER_PAGE"), "2");
+ assert_string_equal(sb_trie_lookup(c, "CURRENT_PAGE"), "1");
+ assert_string_equal(sb_trie_lookup(c, "NEXT_PAGE"), "2");
+ assert_string_equal(sb_trie_lookup(c, "FIRST_PAGE"), "1");
+ assert_string_equal(sb_trie_lookup(c, "LAST_PAGE"), "4");
+ sb_trie_free(c);
+ sb_slist_free_full(s, free);
+ sb_slist_free_full(t, (sb_free_func_t) sb_trie_free);
+}
+
+
+static void
+test_source_parse_from_files_filter_by_page2(void **state)
+{
+ will_return(__wrap_blogc_file_get_contents, "bola1.txt");
+ will_return(__wrap_blogc_file_get_contents, sb_strdup(
+ "ASD: 123\n"
+ "DATE: 2001-02-03 04:05:06\n"
+ "--------\n"
+ "bola"));
+ will_return(__wrap_blogc_file_get_contents, "bola2.txt");
+ will_return(__wrap_blogc_file_get_contents, sb_strdup(
+ "ASD: 456\n"
+ "DATE: 2002-02-03 04:05:06\n"
+ "--------\n"
+ "bola"));
+ will_return(__wrap_blogc_file_get_contents, "bola3.txt");
+ will_return(__wrap_blogc_file_get_contents, sb_strdup(
+ "ASD: 789\n"
+ "DATE: 2003-02-03 04:05:06\n"
+ "--------\n"
+ "bola"));
+ will_return(__wrap_blogc_file_get_contents, "bola4.txt");
+ will_return(__wrap_blogc_file_get_contents, sb_strdup(
+ "ASD: 7891\n"
+ "DATE: 2004-02-03 04:05:06\n"
+ "--------\n"
+ "bola"));
+ will_return(__wrap_blogc_file_get_contents, "bola5.txt");
+ will_return(__wrap_blogc_file_get_contents, sb_strdup(
+ "ASD: 7892\n"
+ "DATE: 2005-02-03 04:05:06\n"
+ "--------\n"
+ "bola"));
+ will_return(__wrap_blogc_file_get_contents, "bola6.txt");
+ will_return(__wrap_blogc_file_get_contents, sb_strdup(
+ "ASD: 7893\n"
+ "DATE: 2006-02-03 04:05:06\n"
+ "--------\n"
+ "bola"));
+ will_return(__wrap_blogc_file_get_contents, "bola7.txt");
+ will_return(__wrap_blogc_file_get_contents, sb_strdup(
+ "ASD: 7894\n"
+ "DATE: 2007-02-03 04:05:06\n"
+ "--------\n"
+ "bola"));
+ blogc_error_t *err = NULL;
+ sb_slist_t *s = NULL;
+ s = sb_slist_append(s, sb_strdup("bola1.txt"));
+ s = sb_slist_append(s, sb_strdup("bola2.txt"));
+ s = sb_slist_append(s, sb_strdup("bola3.txt"));
+ s = sb_slist_append(s, sb_strdup("bola4.txt"));
+ s = sb_slist_append(s, sb_strdup("bola5.txt"));
+ s = sb_slist_append(s, sb_strdup("bola6.txt"));
+ s = sb_slist_append(s, sb_strdup("bola7.txt"));
+ sb_trie_t *c = sb_trie_new(free);
+ sb_trie_insert(c, "FILTER_PAGE", sb_strdup("3"));
+ sb_trie_insert(c, "FILTER_PER_PAGE", sb_strdup("2"));
+ sb_slist_t *t = blogc_source_parse_from_files(c, s, &err);
+ assert_null(err);
+ assert_non_null(t);
+ assert_int_equal(sb_slist_length(t), 2); // it is enough, no need to look at the items
+ assert_int_equal(sb_trie_size(c), 11);
+ assert_string_equal(sb_trie_lookup(c, "FILENAME_FIRST"), "bola5");
+ assert_string_equal(sb_trie_lookup(c, "FILENAME_LAST"), "bola6");
+ assert_string_equal(sb_trie_lookup(c, "DATE_FIRST"), "2005-02-03 04:05:06");
+ assert_string_equal(sb_trie_lookup(c, "DATE_LAST"), "2006-02-03 04:05:06");
+ assert_string_equal(sb_trie_lookup(c, "FILTER_PAGE"), "3");
+ assert_string_equal(sb_trie_lookup(c, "FILTER_PER_PAGE"), "2");
+ assert_string_equal(sb_trie_lookup(c, "CURRENT_PAGE"), "3");
+ assert_string_equal(sb_trie_lookup(c, "PREVIOUS_PAGE"), "2");
+ assert_string_equal(sb_trie_lookup(c, "NEXT_PAGE"), "4");
+ assert_string_equal(sb_trie_lookup(c, "FIRST_PAGE"), "1");
+ assert_string_equal(sb_trie_lookup(c, "LAST_PAGE"), "4");
+ sb_trie_free(c);
+ sb_slist_free_full(s, free);
+ sb_slist_free_full(t, (sb_free_func_t) sb_trie_free);
+}
+
+
+static void
+test_source_parse_from_files_filter_by_page3(void **state)
+{
+ will_return(__wrap_blogc_file_get_contents, "bola1.txt");
+ will_return(__wrap_blogc_file_get_contents, sb_strdup(
+ "ASD: 123\n"
+ "DATE: 2001-02-03 04:05:06\n"
+ "--------\n"
+ "bola"));
+ will_return(__wrap_blogc_file_get_contents, "bola2.txt");
+ will_return(__wrap_blogc_file_get_contents, sb_strdup(
+ "ASD: 456\n"
+ "DATE: 2002-02-03 04:05:06\n"
+ "--------\n"
+ "bola"));
+ will_return(__wrap_blogc_file_get_contents, "bola3.txt");
+ will_return(__wrap_blogc_file_get_contents, sb_strdup(
+ "ASD: 789\n"
+ "DATE: 2003-02-03 04:05:06\n"
+ "--------\n"
+ "bola"));
+ will_return(__wrap_blogc_file_get_contents, "bola4.txt");
+ will_return(__wrap_blogc_file_get_contents, sb_strdup(
+ "ASD: 7891\n"
+ "DATE: 2004-02-03 04:05:06\n"
+ "--------\n"
+ "bola"));
+ will_return(__wrap_blogc_file_get_contents, "bola5.txt");
+ will_return(__wrap_blogc_file_get_contents, sb_strdup(
+ "ASD: 7892\n"
+ "DATE: 2005-02-03 04:05:06\n"
+ "--------\n"
+ "bola"));
+ will_return(__wrap_blogc_file_get_contents, "bola6.txt");
+ will_return(__wrap_blogc_file_get_contents, sb_strdup(
+ "ASD: 7893\n"
+ "DATE: 2006-02-03 04:05:06\n"
+ "--------\n"
+ "bola"));
+ will_return(__wrap_blogc_file_get_contents, "bola7.txt");
+ will_return(__wrap_blogc_file_get_contents, sb_strdup(
+ "ASD: 7894\n"
+ "DATE: 2007-02-03 04:05:06\n"
+ "--------\n"
+ "bola"));
+ blogc_error_t *err = NULL;
+ sb_slist_t *s = NULL;
+ s = sb_slist_append(s, sb_strdup("bola1.txt"));
+ s = sb_slist_append(s, sb_strdup("bola2.txt"));
+ s = sb_slist_append(s, sb_strdup("bola3.txt"));
+ s = sb_slist_append(s, sb_strdup("bola4.txt"));
+ s = sb_slist_append(s, sb_strdup("bola5.txt"));
+ s = sb_slist_append(s, sb_strdup("bola6.txt"));
+ s = sb_slist_append(s, sb_strdup("bola7.txt"));
+ sb_trie_t *c = sb_trie_new(free);
+ sb_trie_insert(c, "FILTER_PAGE", sb_strdup("1"));
+ sb_trie_insert(c, "FILTER_PER_PAGE", sb_strdup("2"));
+ sb_slist_t *t = blogc_source_parse_from_files(c, s, &err);
+ assert_null(err);
+ assert_non_null(t);
+ assert_int_equal(sb_slist_length(t), 2); // it is enough, no need to look at the items
+ assert_int_equal(sb_trie_size(c), 10);
+ assert_string_equal(sb_trie_lookup(c, "FILENAME_FIRST"), "bola1");
+ assert_string_equal(sb_trie_lookup(c, "FILENAME_LAST"), "bola2");
+ assert_string_equal(sb_trie_lookup(c, "DATE_FIRST"), "2001-02-03 04:05:06");
+ assert_string_equal(sb_trie_lookup(c, "DATE_LAST"), "2002-02-03 04:05:06");
+ assert_string_equal(sb_trie_lookup(c, "FILTER_PAGE"), "1");
+ assert_string_equal(sb_trie_lookup(c, "FILTER_PER_PAGE"), "2");
+ assert_string_equal(sb_trie_lookup(c, "CURRENT_PAGE"), "1");
+ assert_string_equal(sb_trie_lookup(c, "NEXT_PAGE"), "2");
+ assert_string_equal(sb_trie_lookup(c, "FIRST_PAGE"), "1");
+ assert_string_equal(sb_trie_lookup(c, "LAST_PAGE"), "4");
+ sb_trie_free(c);
+ sb_slist_free_full(s, free);
+ sb_slist_free_full(t, (sb_free_func_t) sb_trie_free);
+}
+
+
+static void
+test_source_parse_from_files_filter_by_page_and_tag(void **state)
+{
+ will_return(__wrap_blogc_file_get_contents, "bola1.txt");
+ will_return(__wrap_blogc_file_get_contents, sb_strdup(
+ "ASD: 123\n"
+ "DATE: 2001-02-03 04:05:06\n"
+ "--------\n"
+ "bola"));
+ will_return(__wrap_blogc_file_get_contents, "bola2.txt");
+ will_return(__wrap_blogc_file_get_contents, sb_strdup(
+ "ASD: 456\n"
+ "DATE: 2002-02-03 04:05:06\n"
+ "TAGS: chunda\n"
+ "--------\n"
+ "bola"));
+ will_return(__wrap_blogc_file_get_contents, "bola3.txt");
+ will_return(__wrap_blogc_file_get_contents, sb_strdup(
+ "ASD: 789\n"
+ "DATE: 2003-02-03 04:05:06\n"
+ "TAGS: chunda bola\n"
+ "--------\n"
+ "bola"));
+ will_return(__wrap_blogc_file_get_contents, "bola4.txt");
+ will_return(__wrap_blogc_file_get_contents, sb_strdup(
+ "ASD: 7891\n"
+ "DATE: 2004-02-03 04:05:06\n"
+ "TAGS: bola\n"
+ "--------\n"
+ "bola"));
+ will_return(__wrap_blogc_file_get_contents, "bola5.txt");
+ will_return(__wrap_blogc_file_get_contents, sb_strdup(
+ "ASD: 7892\n"
+ "DATE: 2005-02-03 04:05:06\n"
+ "TAGS: chunda\n"
+ "--------\n"
+ "bola"));
+ will_return(__wrap_blogc_file_get_contents, "bola6.txt");
+ will_return(__wrap_blogc_file_get_contents, sb_strdup(
+ "ASD: 7893\n"
+ "DATE: 2006-02-03 04:05:06\n"
+ "--------\n"
+ "bola"));
+ will_return(__wrap_blogc_file_get_contents, "bola7.txt");
+ will_return(__wrap_blogc_file_get_contents, sb_strdup(
+ "ASD: 7894\n"
+ "DATE: 2007-02-03 04:05:06\n"
+ "TAGS: yay chunda\n"
+ "--------\n"
+ "bola"));
+ blogc_error_t *err = NULL;
+ sb_slist_t *s = NULL;
+ s = sb_slist_append(s, sb_strdup("bola1.txt"));
+ s = sb_slist_append(s, sb_strdup("bola2.txt"));
+ s = sb_slist_append(s, sb_strdup("bola3.txt"));
+ s = sb_slist_append(s, sb_strdup("bola4.txt"));
+ s = sb_slist_append(s, sb_strdup("bola5.txt"));
+ s = sb_slist_append(s, sb_strdup("bola6.txt"));
+ s = sb_slist_append(s, sb_strdup("bola7.txt"));
+ sb_trie_t *c = sb_trie_new(free);
+ sb_trie_insert(c, "FILTER_TAG", sb_strdup("chunda"));
+ sb_trie_insert(c, "FILTER_PAGE", sb_strdup("2"));
+ sb_trie_insert(c, "FILTER_PER_PAGE", sb_strdup("2"));
+ sb_slist_t *t = blogc_source_parse_from_files(c, s, &err);
+ assert_null(err);
+ assert_non_null(t);
+ assert_int_equal(sb_slist_length(t), 2); // it is enough, no need to look at the items
+ assert_int_equal(sb_trie_size(c), 11);
+ assert_string_equal(sb_trie_lookup(c, "FILENAME_FIRST"), "bola5");
+ assert_string_equal(sb_trie_lookup(c, "FILENAME_LAST"), "bola7");
+ assert_string_equal(sb_trie_lookup(c, "DATE_FIRST"), "2005-02-03 04:05:06");
+ assert_string_equal(sb_trie_lookup(c, "DATE_LAST"), "2007-02-03 04:05:06");
+ assert_string_equal(sb_trie_lookup(c, "FILTER_TAG"), "chunda");
+ assert_string_equal(sb_trie_lookup(c, "FILTER_PAGE"), "2");
+ assert_string_equal(sb_trie_lookup(c, "FILTER_PER_PAGE"), "2");
+ assert_string_equal(sb_trie_lookup(c, "CURRENT_PAGE"), "2");
+ assert_string_equal(sb_trie_lookup(c, "PREVIOUS_PAGE"), "1");
+ assert_string_equal(sb_trie_lookup(c, "FIRST_PAGE"), "1");
+ assert_string_equal(sb_trie_lookup(c, "LAST_PAGE"), "2");
+ sb_trie_free(c);
+ sb_slist_free_full(s, free);
+ sb_slist_free_full(t, (sb_free_func_t) sb_trie_free);
+}
+
+
+static void
+test_source_parse_from_files_filter_by_page_invalid(void **state)
+{
+ will_return(__wrap_blogc_file_get_contents, "bola1.txt");
+ will_return(__wrap_blogc_file_get_contents, sb_strdup(
+ "ASD: 123\n"
+ "DATE: 2001-02-03 04:05:06\n"
+ "--------\n"
+ "bola"));
+ will_return(__wrap_blogc_file_get_contents, "bola2.txt");
+ will_return(__wrap_blogc_file_get_contents, sb_strdup(
+ "ASD: 456\n"
+ "DATE: 2002-02-03 04:05:06\n"
+ "--------\n"
+ "bola"));
+ will_return(__wrap_blogc_file_get_contents, "bola3.txt");
+ will_return(__wrap_blogc_file_get_contents, sb_strdup(
+ "ASD: 789\n"
+ "DATE: 2003-02-03 04:05:06\n"
+ "--------\n"
+ "bola"));
+ will_return(__wrap_blogc_file_get_contents, "bola4.txt");
+ will_return(__wrap_blogc_file_get_contents, sb_strdup(
+ "ASD: 7891\n"
+ "DATE: 2004-02-03 04:05:06\n"
+ "--------\n"
+ "bola"));
+ will_return(__wrap_blogc_file_get_contents, "bola5.txt");
+ will_return(__wrap_blogc_file_get_contents, sb_strdup(
+ "ASD: 7892\n"
+ "DATE: 2005-02-03 04:05:06\n"
+ "--------\n"
+ "bola"));
+ will_return(__wrap_blogc_file_get_contents, "bola6.txt");
+ will_return(__wrap_blogc_file_get_contents, sb_strdup(
+ "ASD: 7893\n"
+ "DATE: 2006-02-03 04:05:06\n"
+ "--------\n"
+ "bola"));
+ will_return(__wrap_blogc_file_get_contents, "bola7.txt");
+ will_return(__wrap_blogc_file_get_contents, sb_strdup(
+ "ASD: 7894\n"
+ "DATE: 2007-02-03 04:05:06\n"
+ "--------\n"
+ "bola"));
+ blogc_error_t *err = NULL;
+ sb_slist_t *s = NULL;
+ s = sb_slist_append(s, sb_strdup("bola1.txt"));
+ s = sb_slist_append(s, sb_strdup("bola2.txt"));
+ s = sb_slist_append(s, sb_strdup("bola3.txt"));
+ s = sb_slist_append(s, sb_strdup("bola4.txt"));
+ s = sb_slist_append(s, sb_strdup("bola5.txt"));
+ s = sb_slist_append(s, sb_strdup("bola6.txt"));
+ s = sb_slist_append(s, sb_strdup("bola7.txt"));
+ sb_trie_t *c = sb_trie_new(free);
+ sb_trie_insert(c, "FILTER_PAGE", sb_strdup("-1"));
+ sb_trie_insert(c, "FILTER_PER_PAGE", sb_strdup("2"));
+ sb_slist_t *t = blogc_source_parse_from_files(c, s, &err);
+ assert_null(err);
+ assert_non_null(t);
+ assert_int_equal(sb_slist_length(t), 2); // it is enough, no need to look at the items
+ assert_int_equal(sb_trie_size(c), 10);
+ assert_string_equal(sb_trie_lookup(c, "FILENAME_FIRST"), "bola1");
+ assert_string_equal(sb_trie_lookup(c, "FILENAME_LAST"), "bola2");
+ assert_string_equal(sb_trie_lookup(c, "DATE_FIRST"), "2001-02-03 04:05:06");
+ assert_string_equal(sb_trie_lookup(c, "DATE_LAST"), "2002-02-03 04:05:06");
+ assert_string_equal(sb_trie_lookup(c, "FILTER_PAGE"), "-1");
+ assert_string_equal(sb_trie_lookup(c, "FILTER_PER_PAGE"), "2");
+ assert_string_equal(sb_trie_lookup(c, "CURRENT_PAGE"), "1");
+ assert_string_equal(sb_trie_lookup(c, "NEXT_PAGE"), "2");
+ assert_string_equal(sb_trie_lookup(c, "FIRST_PAGE"), "1");
+ assert_string_equal(sb_trie_lookup(c, "LAST_PAGE"), "4");
+ sb_trie_free(c);
+ sb_slist_free_full(s, free);
+ sb_slist_free_full(t, (sb_free_func_t) sb_trie_free);
+}
+
+
+static void
+test_source_parse_from_files_filter_by_page_invalid2(void **state)
+{
+ will_return(__wrap_blogc_file_get_contents, "bola1.txt");
+ will_return(__wrap_blogc_file_get_contents, sb_strdup(
+ "ASD: 123\n"
+ "DATE: 2001-02-03 04:05:06\n"
+ "--------\n"
+ "bola"));
+ will_return(__wrap_blogc_file_get_contents, "bola2.txt");
+ will_return(__wrap_blogc_file_get_contents, sb_strdup(
+ "ASD: 456\n"
+ "DATE: 2002-02-03 04:05:06\n"
+ "--------\n"
+ "bola"));
+ will_return(__wrap_blogc_file_get_contents, "bola3.txt");
+ will_return(__wrap_blogc_file_get_contents, sb_strdup(
+ "ASD: 789\n"
+ "DATE: 2003-02-03 04:05:06\n"
+ "--------\n"
+ "bola"));
+ will_return(__wrap_blogc_file_get_contents, "bola4.txt");
+ will_return(__wrap_blogc_file_get_contents, sb_strdup(
+ "ASD: 7891\n"
+ "DATE: 2004-02-03 04:05:06\n"
+ "--------\n"
+ "bola"));
+ will_return(__wrap_blogc_file_get_contents, "bola5.txt");
+ will_return(__wrap_blogc_file_get_contents, sb_strdup(
+ "ASD: 7892\n"
+ "DATE: 2005-02-03 04:05:06\n"
+ "--------\n"
+ "bola"));
+ will_return(__wrap_blogc_file_get_contents, "bola6.txt");
+ will_return(__wrap_blogc_file_get_contents, sb_strdup(
+ "ASD: 7893\n"
+ "DATE: 2006-02-03 04:05:06\n"
+ "--------\n"
+ "bola"));
+ will_return(__wrap_blogc_file_get_contents, "bola7.txt");
+ will_return(__wrap_blogc_file_get_contents, sb_strdup(
+ "ASD: 7894\n"
+ "DATE: 2007-02-03 04:05:06\n"
+ "--------\n"
+ "bola"));
+ blogc_error_t *err = NULL;
+ sb_slist_t *s = NULL;
+ s = sb_slist_append(s, sb_strdup("bola1.txt"));
+ s = sb_slist_append(s, sb_strdup("bola2.txt"));
+ s = sb_slist_append(s, sb_strdup("bola3.txt"));
+ s = sb_slist_append(s, sb_strdup("bola4.txt"));
+ s = sb_slist_append(s, sb_strdup("bola5.txt"));
+ s = sb_slist_append(s, sb_strdup("bola6.txt"));
+ s = sb_slist_append(s, sb_strdup("bola7.txt"));
+ sb_trie_t *c = sb_trie_new(free);
+ sb_trie_insert(c, "FILTER_PAGE", sb_strdup("5"));
+ sb_trie_insert(c, "FILTER_PER_PAGE", sb_strdup("2"));
+ sb_slist_t *t = blogc_source_parse_from_files(c, s, &err);
+ assert_null(err);
+ assert_null(t);
+ sb_trie_free(c);
+ sb_slist_free_full(s, free);
+}
+
+
+static void
+test_source_parse_from_files_without_all_dates(void **state)
+{
+ will_return(__wrap_blogc_fprintf, stderr);
+ will_return(__wrap_blogc_fprintf,
+ "blogc: warning: 'DATE' variable provided for at least one source "
+ "file, but not for all source files. This means that you may get wrong "
+ "values for 'DATE_FIRST' and 'DATE_LAST' variables.\n");
+ will_return(__wrap_blogc_file_get_contents, "bola1.txt");
+ will_return(__wrap_blogc_file_get_contents, sb_strdup(
+ "ASD: 123\n"
+ "--------\n"
+ "bola"));
+ will_return(__wrap_blogc_file_get_contents, "bola2.txt");
+ will_return(__wrap_blogc_file_get_contents, sb_strdup(
+ "ASD: 456\n"
+ "DATE: 2002-02-03 04:05:06\n"
+ "--------\n"
+ "bola"));
+ will_return(__wrap_blogc_file_get_contents, "bola3.txt");
+ will_return(__wrap_blogc_file_get_contents, sb_strdup(
+ "ASD: 789\n"
+ "DATE: 2003-02-03 04:05:06\n"
+ "--------\n"
+ "bola"));
+ blogc_error_t *err = NULL;
+ sb_slist_t *s = NULL;
+ s = sb_slist_append(s, sb_strdup("bola1.txt"));
+ s = sb_slist_append(s, sb_strdup("bola2.txt"));
+ s = sb_slist_append(s, sb_strdup("bola3.txt"));
+ sb_trie_t *c = sb_trie_new(free);
+ sb_slist_t *t = blogc_source_parse_from_files(c, s, &err);
+ assert_null(err);
+ assert_non_null(t);
+ assert_int_equal(sb_slist_length(t), 3); // it is enough, no need to look at the items
+ assert_int_equal(sb_trie_size(c), 3);
+ assert_string_equal(sb_trie_lookup(c, "FILENAME_FIRST"), "bola1");
+ assert_string_equal(sb_trie_lookup(c, "FILENAME_LAST"), "bola3");
+ assert_string_equal(sb_trie_lookup(c, "DATE_LAST"), "2003-02-03 04:05:06");
+ sb_trie_free(c);
+ sb_slist_free_full(s, free);
+ sb_slist_free_full(t, (sb_free_func_t) sb_trie_free);
+}
+
+
+static void
+test_source_parse_from_files_null(void **state)
+{
+ blogc_error_t *err = NULL;
+ sb_slist_t *s = NULL;
+ sb_trie_t *c = sb_trie_new(free);
+ sb_slist_t *t = blogc_source_parse_from_files(c, s, &err);
+ assert_null(err);
+ assert_null(t);
+ assert_int_equal(sb_slist_length(t), 0);
+ assert_int_equal(sb_trie_size(c), 0);
+ sb_trie_free(c);
+ sb_slist_free_full(s, free);
+ sb_slist_free_full(t, (sb_free_func_t) sb_trie_free);
+}
+
+
+int
+main(void)
+{
+ const UnitTest tests[] = {
+ unit_test(test_get_filename),
+ unit_test(test_template_parse_from_file),
+ unit_test(test_template_parse_from_file_null),
+ unit_test(test_source_parse_from_file),
+ unit_test(test_source_parse_from_file_null),
+ unit_test(test_source_parse_from_files),
+ unit_test(test_source_parse_from_files_filter_by_tag),
+ unit_test(test_source_parse_from_files_filter_by_page),
+ unit_test(test_source_parse_from_files_filter_by_page2),
+ unit_test(test_source_parse_from_files_filter_by_page3),
+ unit_test(test_source_parse_from_files_filter_by_page_and_tag),
+ unit_test(test_source_parse_from_files_filter_by_page_invalid),
+ unit_test(test_source_parse_from_files_filter_by_page_invalid2),
+ unit_test(test_source_parse_from_files_without_all_dates),
+ unit_test(test_source_parse_from_files_null),
+ };
+ return run_tests(tests);
+}
diff --git a/tests/check_renderer.c b/tests/check_renderer.c
new file mode 100644
index 0000000..c2c5618
--- /dev/null
+++ b/tests/check_renderer.c
@@ -0,0 +1,1158 @@
+/*
+ * blogc: A blog compiler.
+ * Copyright (C) 2015-2016 Rafael G. Martins <rafael@rafaelmartins.eng.br>
+ *
+ * This program can be distributed under the terms of the BSD License.
+ * See the file LICENSE.
+ */
+
+#include <stdarg.h>
+#include <stddef.h>
+#include <setjmp.h>
+#include <cmocka.h>
+#include <stdbool.h>
+#include <stdlib.h>
+#include <string.h>
+#include "../src/error.h"
+#include "../src/renderer.h"
+#include "../src/source-parser.h"
+#include "../src/template-parser.h"
+#include "../src/utils.h"
+
+
+static sb_slist_t*
+create_sources(unsigned int count)
+{
+ const char *s[] = {
+ "BOLA: asd\n"
+ "GUDA: zxc\n"
+ "GUDA2: zxc\n"
+ "DATE: 2015-01-02 03:04:05\n"
+ "DATE_FORMAT: %R\n"
+ "TAGS: foo bar baz\n"
+ "-----\n"
+ "ahahahahahahahaha",
+ "BOLA: asd2\n"
+ "GUDA: zxc2\n"
+ "DATE: 2014-02-03 04:05:06\n"
+ "-----\n"
+ "ahahahahahahahaha2",
+ "BOLA: asd3\n"
+ "GUDA: zxc3\n"
+ "DATE: 2013-01-02 03:04:05\n"
+ "-----\n"
+ "ahahahahahahahaha3",
+ };
+ assert_false(count > 3);
+ blogc_error_t *err = NULL;
+ sb_slist_t *l = NULL;
+ for (unsigned int i = 0; i < count; i++) {
+ l = sb_slist_append(l, blogc_source_parse(s[i], strlen(s[i]), &err));
+ assert_null(err);
+ }
+ assert_int_equal(sb_slist_length(l), count);
+ return l;
+}
+
+
+static void
+test_render_entry(void **state)
+{
+ const char *str =
+ "foo\n"
+ "{% block listing_once %}fuuu{% endblock %}\n"
+ "{% block entry %}\n"
+ "{{ DATE }}\n"
+ "{% ifdef DATE_FORMATTED %}{{ DATE_FORMATTED }}{% endif %}\n"
+ "{% ifdef GUDA %}{{ GUDA }}{% endif %}\n"
+ "{% ifdef CHUNDA %}{{ CHUNDA }}{% endif %}\n"
+ "{% endblock %}\n"
+ "{% block listing %}lol{% endblock %}\n"
+ "{% if GUDA == GUDA2 %}gudabola{% endif %}\n"
+ "{% if GUDA == \"zxc\" %}LOL{% endif %}\n"
+ "{% if GUDA != \"bola\" %}HEHE{% endif %}\n"
+ "{% if GUDA < \"zxd\" %}LOL2{% endif %}\n"
+ "{% if GUDA > \"zxd\" %}LOL3{% else %}ELSE{% endif %}\n"
+ "{% if GUDA <= \"zxc\" %}LOL4{% endif %}\n"
+ "{% foreach TAGS %}lol {{ FOREACH_ITEM }} haha {% endforeach %}\n"
+ "{% foreach TAGS_ASD %}yay{% endforeach %}\n";
+ blogc_error_t *err = NULL;
+ sb_slist_t *l = blogc_template_parse(str, strlen(str), &err);
+ assert_non_null(l);
+ assert_null(err);
+ sb_slist_t *s = create_sources(1);
+ assert_non_null(s);
+ char *out = blogc_render(l, s, NULL, false);
+ assert_string_equal(out,
+ "foo\n"
+ "\n"
+ "\n"
+ "2015-01-02 03:04:05\n"
+ "03:04\n"
+ "zxc\n"
+ "\n"
+ "\n"
+ "\n"
+ "gudabola\n"
+ "LOL\n"
+ "HEHE\n"
+ "LOL2\n"
+ "ELSE\n"
+ "LOL4\n"
+ "lol foo haha lol bar haha lol baz haha \n"
+ "\n");
+ blogc_template_free_stmts(l);
+ sb_slist_free_full(s, (sb_free_func_t) sb_trie_free);
+ free(out);
+}
+
+
+static void
+test_render_listing(void **state)
+{
+ const char *str =
+ "foo\n"
+ "{% block listing_once %}fuuu{% endblock %}\n"
+ "{% block entry %}\n"
+ "{% ifdef GUDA %}{{ GUDA }}{% endif %}\n"
+ "{% ifdef CHUNDA %}{{ CHUNDA }}{% endif %}\n"
+ "{% endblock %}\n"
+ "{% block listing %}\n"
+ "{% ifdef DATE_FORMATTED %}{{ DATE_FORMATTED }}{% endif %}\n"
+ "bola: {% ifdef BOLA %}{{ BOLA }}{% endif %}\n"
+ "{% foreach TAGS %}lol {{ FOREACH_ITEM }} haha {% endforeach %}\n"
+ "{% foreach TAGS_ASD %}yay{% endforeach %}\n"
+ "{% endblock %}\n";
+ blogc_error_t *err = NULL;
+ sb_slist_t *l = blogc_template_parse(str, strlen(str), &err);
+ assert_non_null(l);
+ assert_null(err);
+ sb_slist_t *s = create_sources(3);
+ assert_non_null(s);
+ char *out = blogc_render(l, s, NULL, true);
+ assert_string_equal(out,
+ "foo\n"
+ "fuuu\n"
+ "\n"
+ "\n"
+ "03:04\n"
+ "bola: asd\n"
+ "lol foo haha lol bar haha lol baz haha \n"
+ "\n"
+ "\n"
+ "2014-02-03 04:05:06\n"
+ "bola: asd2\n"
+ "\n"
+ "\n"
+ "\n"
+ "2013-01-02 03:04:05\n"
+ "bola: asd3\n"
+ "\n"
+ "\n"
+ "\n");
+ blogc_template_free_stmts(l);
+ sb_slist_free_full(s, (sb_free_func_t) sb_trie_free);
+ free(out);
+}
+
+
+static void
+test_render_listing_empty(void **state)
+{
+ const char *str =
+ "foo\n"
+ "{% block listing_once %}fuuu{% endblock %}\n"
+ "{% block entry %}\n"
+ "{% ifdef GUDA %}{{ GUDA }}{% endif %}\n"
+ "{% ifdef CHUNDA %}{{ CHUNDA }}{% endif %}\n"
+ "{% endblock %}\n"
+ "{% block listing %}\n"
+ "{% ifdef DATE_FORMATTED %}{{ DATE_FORMATTED }}{% endif %}\n"
+ "bola: {% ifdef BOLA %}{{ BOLA }}{% endif %}\n"
+ "{% foreach TAGS %}lol {{ FOREACH_ITEM }} haha {% endforeach %}\n"
+ "{% endblock %}\n";
+ blogc_error_t *err = NULL;
+ sb_slist_t *l = blogc_template_parse(str, strlen(str), &err);
+ assert_non_null(l);
+ assert_null(err);
+ char *out = blogc_render(l, NULL, NULL, true);
+ assert_string_equal(out,
+ "foo\n"
+ "fuuu\n"
+ "\n"
+ "\n");
+ blogc_template_free_stmts(l);
+ free(out);
+}
+
+
+static void
+test_render_ifdef(void **state)
+{
+ const char *str =
+ "{% block entry %}\n"
+ "{% ifdef CHUNDA %}chunda\n"
+ "{% ifdef GUDA %}guda\n"
+ "{% ifdef BOLA %}bola\n"
+ "{% endif %}\n"
+ "{% endif %}\n"
+ "{% endif %}\n"
+ "{% endblock %}\n";
+ blogc_error_t *err = NULL;
+ sb_slist_t *l = blogc_template_parse(str, strlen(str), &err);
+ assert_non_null(l);
+ assert_null(err);
+ sb_slist_t *s = create_sources(1);
+ assert_non_null(s);
+ char *out = blogc_render(l, s, NULL, false);
+ assert_string_equal(out,
+ "\n"
+ "\n"
+ "\n");
+ blogc_template_free_stmts(l);
+ sb_slist_free_full(s, (sb_free_func_t) sb_trie_free);
+ free(out);
+}
+
+
+static void
+test_render_ifdef2(void **state)
+{
+ const char *str =
+ "{% block entry %}\n"
+ "{% ifdef GUDA %}guda\n"
+ "{% ifdef CHUNDA %}chunda\n"
+ "{% ifdef BOLA %}bola\n"
+ "{% endif %}\n"
+ "{% endif %}\n"
+ "{% endif %}\n"
+ "{% endblock %}\n";
+ blogc_error_t *err = NULL;
+ sb_slist_t *l = blogc_template_parse(str, strlen(str), &err);
+ assert_non_null(l);
+ assert_null(err);
+ sb_slist_t *s = create_sources(1);
+ assert_non_null(s);
+ char *out = blogc_render(l, s, NULL, false);
+ assert_string_equal(out,
+ "\n"
+ "guda\n"
+ "\n"
+ "\n"
+ "\n");
+ blogc_template_free_stmts(l);
+ sb_slist_free_full(s, (sb_free_func_t) sb_trie_free);
+ free(out);
+}
+
+
+static void
+test_render_ifdef3(void **state)
+{
+ const char *str =
+ "{% block entry %}\n"
+ "{% ifdef GUDA %}guda\n"
+ "{% ifdef BOLA %}bola\n"
+ "{% ifdef CHUNDA %}chunda\n"
+ "{% endif %}\n"
+ "{% endif %}\n"
+ "{% endif %}\n"
+ "{% endblock %}\n";
+ blogc_error_t *err = NULL;
+ sb_slist_t *l = blogc_template_parse(str, strlen(str), &err);
+ assert_non_null(l);
+ assert_null(err);
+ sb_slist_t *s = create_sources(1);
+ assert_non_null(s);
+ char *out = blogc_render(l, s, NULL, false);
+ assert_string_equal(out,
+ "\n"
+ "guda\n"
+ "bola\n"
+ "\n"
+ "\n"
+ "\n"
+ "\n");
+ blogc_template_free_stmts(l);
+ sb_slist_free_full(s, (sb_free_func_t) sb_trie_free);
+ free(out);
+}
+
+
+static void
+test_render_ifdef4(void **state)
+{
+ const char *str =
+ "{% block entry %}\n"
+ "{% ifdef GUDA %}guda\n"
+ "{% ifdef BOLA %}bola\n"
+ "{% ifdef CHUNDA %}chunda\n"
+ "{% else %}else\n"
+ "{% endif %}\n"
+ "{% endif %}\n"
+ "{% else %}lol\n"
+ "{% endif %}\n"
+ "{% endblock %}\n";
+ blogc_error_t *err = NULL;
+ sb_slist_t *l = blogc_template_parse(str, strlen(str), &err);
+ assert_non_null(l);
+ assert_null(err);
+ sb_slist_t *s = create_sources(1);
+ assert_non_null(s);
+ char *out = blogc_render(l, s, NULL, false);
+ assert_string_equal(out,
+ "\n"
+ "guda\n"
+ "bola\n"
+ "else\n"
+ "\n"
+ "\n"
+ "\n"
+ "\n");
+ blogc_template_free_stmts(l);
+ sb_slist_free_full(s, (sb_free_func_t) sb_trie_free);
+ free(out);
+}
+
+
+static void
+test_render_ifdef5(void **state)
+{
+ const char *str =
+ "{% block entry %}\n"
+ "{% ifdef GUDA %}guda\n"
+ "{% ifdef CHUNDA %}chunda\n"
+ "{% ifdef BOLA %}bola\n"
+ "{% endif %}\n"
+ "{% else %}else\n"
+ "{% endif %}\n"
+ "{% else %}lol\n"
+ "{% endif %}\n"
+ "{% endblock %}\n";
+ blogc_error_t *err = NULL;
+ sb_slist_t *l = blogc_template_parse(str, strlen(str), &err);
+ assert_non_null(l);
+ assert_null(err);
+ sb_slist_t *s = create_sources(1);
+ assert_non_null(s);
+ char *out = blogc_render(l, s, NULL, false);
+ assert_string_equal(out,
+ "\n"
+ "guda\n"
+ "else\n"
+ "\n"
+ "\n"
+ "\n");
+ blogc_template_free_stmts(l);
+ sb_slist_free_full(s, (sb_free_func_t) sb_trie_free);
+ free(out);
+}
+
+
+static void
+test_render_ifdef6(void **state)
+{
+ const char *str =
+ "{% block entry %}\n"
+ "{% ifdef CHUNDA %}chunda\n"
+ "{% ifdef GUDA %}guda\n"
+ "{% ifdef BOLA %}bola\n"
+ "{% endif %}\n"
+ "{% else %}else\n"
+ "{% endif %}\n"
+ "{% else %}lol\n"
+ "{% endif %}\n"
+ "{% endblock %}\n";
+ blogc_error_t *err = NULL;
+ sb_slist_t *l = blogc_template_parse(str, strlen(str), &err);
+ assert_non_null(l);
+ assert_null(err);
+ sb_slist_t *s = create_sources(1);
+ assert_non_null(s);
+ char *out = blogc_render(l, s, NULL, false);
+ assert_string_equal(out,
+ "\n"
+ "lol\n"
+ "\n"
+ "\n");
+ blogc_template_free_stmts(l);
+ sb_slist_free_full(s, (sb_free_func_t) sb_trie_free);
+ free(out);
+}
+
+
+static void
+test_render_ifdef7(void **state)
+{
+ const char *str =
+ "{% block entry %}\n"
+ "{% ifdef GUDA %}guda\n"
+ "{% ifdef BOLA %}bola\n"
+ "{% ifdef CHUNDA %}chunda\n"
+ "{% endif %}\n"
+ "{% endif %}\n"
+ "{% ifdef CHUNDA %}ch\n"
+ "{% else %}else\n"
+ "{% endif %}\n"
+ "{% endif %}\n"
+ "{% endblock %}\n";
+ blogc_error_t *err = NULL;
+ sb_slist_t *l = blogc_template_parse(str, strlen(str), &err);
+ assert_non_null(l);
+ assert_null(err);
+ sb_slist_t *s = create_sources(1);
+ assert_non_null(s);
+ char *out = blogc_render(l, s, NULL, false);
+ assert_string_equal(out,
+ "\n"
+ "guda\n"
+ "bola\n"
+ "\n"
+ "\n"
+ "else\n"
+ "\n"
+ "\n"
+ "\n");
+ blogc_template_free_stmts(l);
+ sb_slist_free_full(s, (sb_free_func_t) sb_trie_free);
+ free(out);
+}
+
+
+static void
+test_render_ifndef(void **state)
+{
+ const char *str =
+ "{% block entry %}\n"
+ "{% ifndef CHUNDA %}chunda\n"
+ "{% ifdef GUDA %}guda\n"
+ "{% ifndef BOLA %}bola\n"
+ "{% else %}else\n"
+ "{% endif %}\n"
+ "{% endif %}\n"
+ "{% endif %}\n"
+ "{% endblock %}\n";
+ blogc_error_t *err = NULL;
+ sb_slist_t *l = blogc_template_parse(str, strlen(str), &err);
+ assert_non_null(l);
+ assert_null(err);
+ sb_slist_t *s = create_sources(1);
+ assert_non_null(s);
+ char *out = blogc_render(l, s, NULL, false);
+ assert_string_equal(out,
+ "\n"
+ "chunda\n"
+ "guda\n"
+ "else\n"
+ "\n"
+ "\n"
+ "\n"
+ "\n");
+ blogc_template_free_stmts(l);
+ sb_slist_free_full(s, (sb_free_func_t) sb_trie_free);
+ free(out);
+}
+
+
+static void
+test_render_if_eq(void **state)
+{
+ const char *str =
+ "{% block entry %}\n"
+ "{% if GUDA == GUDA2 %}gudabola{% endif %}\n"
+ "{% if GUDA == \"zxc\" %}guda\n"
+ "{% ifdef BOLA %}bola\n"
+ "{% if GUDA > \"zxc\" %}asd\n"
+ "{% else %}else\n"
+ "{% endif %}\n"
+ "{% endif %}\n"
+ "{% endif %}\n"
+ "{% endblock %}\n";
+ blogc_error_t *err = NULL;
+ sb_slist_t *l = blogc_template_parse(str, strlen(str), &err);
+ assert_non_null(l);
+ assert_null(err);
+ sb_slist_t *s = create_sources(1);
+ assert_non_null(s);
+ char *out = blogc_render(l, s, NULL, false);
+ assert_string_equal(out,
+ "\n"
+ "gudabola\n"
+ "guda\n"
+ "bola\n"
+ "else\n"
+ "\n"
+ "\n"
+ "\n"
+ "\n");
+ blogc_template_free_stmts(l);
+ sb_slist_free_full(s, (sb_free_func_t) sb_trie_free);
+ free(out);
+}
+
+
+static void
+test_render_if_neq(void **state)
+{
+ const char *str =
+ "{% block entry %}\n"
+ "{% if GUDA != BOLA %}gudabola{% endif %}\n"
+ "{% if GUDA != \"zxa\" %}guda\n"
+ "{% ifdef BOLA %}bola\n"
+ "{% if GUDA > \"zxc\" %}asd\n"
+ "{% else %}else\n"
+ "{% endif %}\n"
+ "{% endif %}\n"
+ "{% endif %}\n"
+ "{% endblock %}\n";
+ blogc_error_t *err = NULL;
+ sb_slist_t *l = blogc_template_parse(str, strlen(str), &err);
+ assert_non_null(l);
+ assert_null(err);
+ sb_slist_t *s = create_sources(1);
+ assert_non_null(s);
+ char *out = blogc_render(l, s, NULL, false);
+ assert_string_equal(out,
+ "\n"
+ "gudabola\n"
+ "guda\n"
+ "bola\n"
+ "else\n"
+ "\n"
+ "\n"
+ "\n"
+ "\n");
+ blogc_template_free_stmts(l);
+ sb_slist_free_full(s, (sb_free_func_t) sb_trie_free);
+ free(out);
+}
+
+
+static void
+test_render_if_lt(void **state)
+{
+ const char *str =
+ "{% block entry %}\n"
+ "{% if BOLA < GUDA %}gudabola{% endif %}\n"
+ "{% if GUDA < \"zxe\" %}guda\n"
+ "{% ifdef BOLA %}bola\n"
+ "{% if GUDA > \"zxc\" %}asd\n"
+ "{% else %}else\n"
+ "{% endif %}\n"
+ "{% endif %}\n"
+ "{% endif %}\n"
+ "{% endblock %}\n";
+ blogc_error_t *err = NULL;
+ sb_slist_t *l = blogc_template_parse(str, strlen(str), &err);
+ assert_non_null(l);
+ assert_null(err);
+ sb_slist_t *s = create_sources(1);
+ assert_non_null(s);
+ char *out = blogc_render(l, s, NULL, false);
+ assert_string_equal(out,
+ "\n"
+ "gudabola\n"
+ "guda\n"
+ "bola\n"
+ "else\n"
+ "\n"
+ "\n"
+ "\n"
+ "\n");
+ blogc_template_free_stmts(l);
+ sb_slist_free_full(s, (sb_free_func_t) sb_trie_free);
+ free(out);
+}
+
+
+static void
+test_render_if_gt(void **state)
+{
+ const char *str =
+ "{% block entry %}\n"
+ "{% if GUDA > BOLA %}gudabola{% endif %}\n"
+ "{% if GUDA > \"zxa\" %}guda\n"
+ "{% ifdef BOLA %}bola\n"
+ "{% if GUDA > \"zxc\" %}asd\n"
+ "{% else %}else\n"
+ "{% endif %}\n"
+ "{% endif %}\n"
+ "{% endif %}\n"
+ "{% endblock %}\n";
+ blogc_error_t *err = NULL;
+ sb_slist_t *l = blogc_template_parse(str, strlen(str), &err);
+ assert_non_null(l);
+ assert_null(err);
+ sb_slist_t *s = create_sources(1);
+ assert_non_null(s);
+ char *out = blogc_render(l, s, NULL, false);
+ assert_string_equal(out,
+ "\n"
+ "gudabola\n"
+ "guda\n"
+ "bola\n"
+ "else\n"
+ "\n"
+ "\n"
+ "\n"
+ "\n");
+ blogc_template_free_stmts(l);
+ sb_slist_free_full(s, (sb_free_func_t) sb_trie_free);
+ free(out);
+}
+
+
+static void
+test_render_if_lt_eq(void **state)
+{
+ const char *str =
+ "{% block entry %}\n"
+ "{% if BOLA <= GUDA %}gudabola{% endif %}\n"
+ "{% if GUDA <= \"zxc\" %}guda\n"
+ "{% if GUDA <= \"zxe\" %}guda2\n"
+ "{% ifdef BOLA %}bola\n"
+ "{% if GUDA > \"zxc\" %}asd\n"
+ "{% else %}else\n"
+ "{% endif %}\n"
+ "{% endif %}\n"
+ "{% endif %}\n"
+ "{% endif %}\n"
+ "{% endblock %}\n";
+ blogc_error_t *err = NULL;
+ sb_slist_t *l = blogc_template_parse(str, strlen(str), &err);
+ assert_non_null(l);
+ assert_null(err);
+ sb_slist_t *s = create_sources(1);
+ assert_non_null(s);
+ char *out = blogc_render(l, s, NULL, false);
+ assert_string_equal(out,
+ "\n"
+ "gudabola\n"
+ "guda\n"
+ "guda2\n"
+ "bola\n"
+ "else\n"
+ "\n"
+ "\n"
+ "\n"
+ "\n"
+ "\n");
+ blogc_template_free_stmts(l);
+ sb_slist_free_full(s, (sb_free_func_t) sb_trie_free);
+ free(out);
+}
+
+
+static void
+test_render_if_gt_eq(void **state)
+{
+ const char *str =
+ "{% block entry %}\n"
+ "{% if GUDA >= BOLA %}gudabola{% endif %}\n"
+ "{% if GUDA >= \"zxc\" %}guda\n"
+ "{% if GUDA >= \"zxa\" %}guda2\n"
+ "{% ifdef BOLA %}bola\n"
+ "{% if GUDA > \"zxc\" %}asd\n"
+ "{% else %}else\n"
+ "{% endif %}\n"
+ "{% endif %}\n"
+ "{% endif %}\n"
+ "{% endif %}\n"
+ "{% endblock %}\n";
+ blogc_error_t *err = NULL;
+ sb_slist_t *l = blogc_template_parse(str, strlen(str), &err);
+ assert_non_null(l);
+ assert_null(err);
+ sb_slist_t *s = create_sources(1);
+ assert_non_null(s);
+ char *out = blogc_render(l, s, NULL, false);
+ assert_string_equal(out,
+ "\n"
+ "gudabola\n"
+ "guda\n"
+ "guda2\n"
+ "bola\n"
+ "else\n"
+ "\n"
+ "\n"
+ "\n"
+ "\n"
+ "\n");
+ blogc_template_free_stmts(l);
+ sb_slist_free_full(s, (sb_free_func_t) sb_trie_free);
+ free(out);
+}
+
+
+static void
+test_render_foreach(void **state)
+{
+ const char *str =
+ "{% block entry %}\n"
+ "{% foreach TAGS %} {{ FOREACH_ITEM }} {% endforeach %}\n"
+ "{% endblock %}\n";
+ blogc_error_t *err = NULL;
+ sb_slist_t *l = blogc_template_parse(str, strlen(str), &err);
+ assert_non_null(l);
+ assert_null(err);
+ sb_slist_t *s = create_sources(1);
+ assert_non_null(s);
+ char *out = blogc_render(l, s, NULL, false);
+ assert_string_equal(out,
+ "\n"
+ " foo bar baz \n"
+ "\n");
+ blogc_template_free_stmts(l);
+ sb_slist_free_full(s, (sb_free_func_t) sb_trie_free);
+ free(out);
+}
+
+
+static void
+test_render_foreach_if(void **state)
+{
+ const char *str =
+ "{% block entry %}\n"
+ "{% foreach TAGS %} {% if FOREACH_ITEM == \"bar\" %}{{ FOREACH_ITEM }}"
+ "{% endif %} {% endforeach %}\n"
+ "{% endblock %}\n";
+ blogc_error_t *err = NULL;
+ sb_slist_t *l = blogc_template_parse(str, strlen(str), &err);
+ assert_non_null(l);
+ assert_null(err);
+ sb_slist_t *s = create_sources(1);
+ assert_non_null(s);
+ char *out = blogc_render(l, s, NULL, false);
+ assert_string_equal(out,
+ "\n"
+ " bar \n"
+ "\n");
+ blogc_template_free_stmts(l);
+ sb_slist_free_full(s, (sb_free_func_t) sb_trie_free);
+ free(out);
+}
+
+
+static void
+test_render_foreach_if_else(void **state)
+{
+ const char *str =
+ "{% block entry %}\n"
+ "{% foreach TAGS %}{% if FOREACH_ITEM == \"bar\" %}yay"
+ "{% else %}{{ FOREACH_ITEM }}"
+ "{% endif %} {% endforeach %}\n"
+ "{% endblock %}\n";
+ blogc_error_t *err = NULL;
+ sb_slist_t *l = blogc_template_parse(str, strlen(str), &err);
+ assert_non_null(l);
+ assert_null(err);
+ sb_slist_t *s = create_sources(1);
+ assert_non_null(s);
+ char *out = blogc_render(l, s, NULL, false);
+ assert_string_equal(out,
+ "\n"
+ "foo yay baz \n"
+ "\n");
+ blogc_template_free_stmts(l);
+ sb_slist_free_full(s, (sb_free_func_t) sb_trie_free);
+ free(out);
+}
+
+
+static void
+test_render_null(void **state)
+{
+ assert_null(blogc_render(NULL, NULL, NULL, false));
+}
+
+
+static void
+test_render_outside_block(void **state)
+{
+ const char *str =
+ "{% ifdef GUDA %}bola{% endif %}\n"
+ "{{ BOLA }}\n"
+ "{% ifndef CHUNDA %}lol{% endif %}\n";
+ blogc_error_t *err = NULL;
+ sb_slist_t *l = blogc_template_parse(str, strlen(str), &err);
+ assert_non_null(l);
+ assert_null(err);
+ sb_slist_t *s = create_sources(1);
+ assert_non_null(s);
+ sb_trie_t *c = sb_trie_new(free);
+ sb_trie_insert(c, "GUDA", sb_strdup("asd"));
+ char *out = blogc_render(l, s, c, false);
+ assert_string_equal(out,
+ "bola\n"
+ "\n"
+ "lol\n");
+ sb_trie_free(c);
+ blogc_template_free_stmts(l);
+ sb_slist_free_full(s, (sb_free_func_t) sb_trie_free);
+ free(out);
+}
+
+
+static void
+test_render_prefer_local_variable(void **state)
+{
+ const char *str =
+ "{% block entry %}\n"
+ "{% ifdef LOL %}{{ LOL }}{% endif %}\n"
+ "{% ifndef CHUNDA %}chunda\n"
+ "{% ifdef GUDA %}{{ GUDA }}\n"
+ "{% ifndef BOLA %}bola\n"
+ "{% endif %}\n"
+ "{% endif %}\n"
+ "{% endif %}\n"
+ "{% endblock %}\n";
+ blogc_error_t *err = NULL;
+ sb_slist_t *l = blogc_template_parse(str, strlen(str), &err);
+ assert_non_null(l);
+ assert_null(err);
+ sb_slist_t *s = create_sources(1);
+ assert_non_null(s);
+ sb_trie_t *c = sb_trie_new(free);
+ sb_trie_insert(c, "GUDA", sb_strdup("hehe"));
+ sb_trie_insert(c, "LOL", sb_strdup("hmm"));
+ char *out = blogc_render(l, s, c, false);
+ assert_string_equal(out,
+ "\n"
+ "hmm\n"
+ "chunda\n"
+ "zxc\n"
+ "\n"
+ "\n"
+ "\n"
+ "\n");
+ sb_trie_free(c);
+ blogc_template_free_stmts(l);
+ sb_slist_free_full(s, (sb_free_func_t) sb_trie_free);
+ free(out);
+}
+
+
+static void
+test_render_respect_variable_scope(void **state)
+{
+ const char *str =
+ "{{ LOL }}\n"
+ "{{ BOLA }}\n"
+ "{% block entry %}\n"
+ "{% ifdef LOL %}{{ LOL }}{% endif %}\n"
+ "{% ifdef BOLA %}{{ BOLA }}{% endif %}\n"
+ "{% endblock %}\n";
+ blogc_error_t *err = NULL;
+ sb_slist_t *l = blogc_template_parse(str, strlen(str), &err);
+ assert_non_null(l);
+ assert_null(err);
+ sb_slist_t *s = create_sources(1);
+ assert_non_null(s);
+ sb_trie_t *c = sb_trie_new(free);
+ char *out = blogc_render(l, s, c, false);
+ assert_string_equal(out,
+ "\n"
+ "\n"
+ "\n"
+ "\n"
+ "asd\n"
+ "\n");
+ sb_trie_free(c);
+ blogc_template_free_stmts(l);
+ sb_slist_free_full(s, (sb_free_func_t) sb_trie_free);
+ free(out);
+}
+
+
+static void
+test_render_ifcount_bug(void **state)
+{
+ const char *str =
+ "{% block entry %}\n"
+ "{% ifdef TITLE %}<h3>{{ TITLE }}</h3>{% endif %}\n"
+ "{% ifdef IS_POST %}\n"
+ "{% ifdef ASD %}ASD{% endif %}\n"
+ "{% endif %}\n"
+ "{% endblock %}\n";
+ blogc_error_t *err = NULL;
+ sb_slist_t *l = blogc_template_parse(str, strlen(str), &err);
+ assert_non_null(l);
+ assert_null(err);
+ sb_slist_t *s = NULL;
+ s = sb_slist_append(s, sb_trie_new(free));
+ sb_trie_insert(s->data, "TITLE", sb_strdup("bola"));
+ sb_trie_t *c = sb_trie_new(free);
+ char *out = blogc_render(l, s, c, false);
+ assert_string_equal(out,
+ "\n"
+ "<h3>bola</h3>\n"
+ "\n"
+ "\n");
+ sb_trie_free(c);
+ blogc_template_free_stmts(l);
+ sb_slist_free_full(s, (sb_free_func_t) sb_trie_free);
+ free(out);
+}
+
+
+static void
+test_get_variable(void **state)
+{
+ sb_trie_t *g = sb_trie_new(free);
+ sb_trie_insert(g, "NAME", sb_strdup("bola"));
+ sb_trie_insert(g, "TITLE", sb_strdup("bola2"));
+ sb_trie_t *l = sb_trie_new(free);
+ sb_trie_insert(l, "NAME", sb_strdup("chunda"));
+ sb_trie_insert(l, "TITLE", sb_strdup("chunda2"));
+ assert_string_equal(blogc_get_variable("NAME", g, l), "chunda");
+ assert_string_equal(blogc_get_variable("TITLE", g, l), "chunda2");
+ assert_null(blogc_get_variable("BOLA", g, l));
+ sb_trie_free(g);
+ sb_trie_free(l);
+}
+
+
+static void
+test_get_variable_only_local(void **state)
+{
+ sb_trie_t *g = NULL;
+ sb_trie_t *l = sb_trie_new(free);
+ sb_trie_insert(l, "NAME", sb_strdup("chunda"));
+ sb_trie_insert(l, "TITLE", sb_strdup("chunda2"));
+ assert_string_equal(blogc_get_variable("NAME", g, l), "chunda");
+ assert_string_equal(blogc_get_variable("TITLE", g, l), "chunda2");
+ assert_null(blogc_get_variable("BOLA", g, l));
+ sb_trie_free(l);
+}
+
+
+static void
+test_get_variable_only_global(void **state)
+{
+ sb_trie_t *g = sb_trie_new(free);
+ sb_trie_insert(g, "NAME", sb_strdup("bola"));
+ sb_trie_insert(g, "TITLE", sb_strdup("bola2"));
+ sb_trie_t *l = NULL;
+ assert_string_equal(blogc_get_variable("NAME", g, l), "bola");
+ assert_string_equal(blogc_get_variable("TITLE", g, l), "bola2");
+ assert_null(blogc_get_variable("BOLA", g, l));
+ sb_trie_free(g);
+}
+
+
+static void
+test_format_date(void **state)
+{
+ sb_trie_t *g = sb_trie_new(free);
+ sb_trie_insert(g, "DATE_FORMAT", sb_strdup("%H -- %M"));
+ sb_trie_t *l = sb_trie_new(free);
+ sb_trie_insert(l, "DATE_FORMAT", sb_strdup("%R"));
+ char *date = blogc_format_date("2015-01-02 03:04:05", g, l);
+ assert_string_equal(date, "03:04");
+ free(date);
+ sb_trie_free(g);
+ sb_trie_free(l);
+}
+
+
+static void
+test_format_date_with_global_format(void **state)
+{
+ sb_trie_t *g = sb_trie_new(free);
+ sb_trie_insert(g, "DATE_FORMAT", sb_strdup("%H -- %M"));
+ sb_trie_t *l = sb_trie_new(free);
+ char *date = blogc_format_date("2015-01-02 03:04:05", g, l);
+ assert_string_equal(date, "03 -- 04");
+ free(date);
+ sb_trie_free(g);
+ sb_trie_free(l);
+}
+
+
+static void
+test_format_date_without_format(void **state)
+{
+ sb_trie_t *g = sb_trie_new(free);
+ sb_trie_t *l = sb_trie_new(free);
+ char *date = blogc_format_date("2015-01-02 03:04:05", g, l);
+ assert_string_equal(date, "2015-01-02 03:04:05");
+ free(date);
+ sb_trie_free(g);
+ sb_trie_free(l);
+}
+
+
+static void
+test_format_date_without_date(void **state)
+{
+ sb_trie_t *g = sb_trie_new(free);
+ sb_trie_t *l = sb_trie_new(free);
+ char *date = blogc_format_date(NULL, g, l);
+ assert_null(date);
+ free(date);
+ sb_trie_free(g);
+ sb_trie_free(l);
+}
+
+
+static void
+test_format_variable(void **state)
+{
+ // FIXME: test warnings
+ sb_trie_t *g = sb_trie_new(free);
+ sb_trie_insert(g, "NAME", sb_strdup("bola"));
+ sb_trie_insert(g, "TITLE", sb_strdup("bola2"));
+ sb_trie_t *l = sb_trie_new(free);
+ sb_trie_insert(l, "NAME", sb_strdup("chunda"));
+ sb_trie_insert(l, "TITLE", sb_strdup("chunda2"));
+ sb_trie_insert(l, "SIZE", sb_strdup("1234567890987654321"));
+ char *tmp = blogc_format_variable("NAME", g, l, NULL);
+ assert_string_equal(tmp, "chunda");
+ free(tmp);
+ tmp = blogc_format_variable("TITLE", g, l, NULL);
+ assert_string_equal(tmp, "chunda2");
+ free(tmp);
+ tmp = blogc_format_variable("TITLE_2", g, l, NULL);
+ assert_string_equal(tmp, "ch");
+ free(tmp);
+ tmp = blogc_format_variable("SIZE_12", g, l, NULL);
+ assert_string_equal(tmp, "123456789098");
+ free(tmp);
+ tmp = blogc_format_variable("SIZE_200", g, l, NULL);
+ assert_string_equal(tmp, "1234567890987654321");
+ free(tmp);
+ assert_null(blogc_format_variable("SIZE_", g, l, NULL));
+ assert_null(blogc_format_variable("BOLA", g, l, NULL));
+ sb_trie_free(g);
+ sb_trie_free(l);
+}
+
+
+static void
+test_format_variable_with_date(void **state)
+{
+ sb_trie_t *g = sb_trie_new(free);
+ sb_trie_insert(g, "DATE", sb_strdup("2010-11-12 13:14:15"));
+ sb_trie_insert(g, "DATE_FORMAT", sb_strdup("%R"));
+ sb_trie_t *l = sb_trie_new(free);
+ sb_trie_insert(l, "DATE", sb_strdup("2011-12-13 14:15:16"));
+ char *tmp = blogc_format_variable("DATE_FORMATTED", g, l, NULL);
+ assert_string_equal(tmp, "14:15");
+ free(tmp);
+ tmp = blogc_format_variable("DATE_FORMATTED_3", g, l, NULL);
+ assert_string_equal(tmp, "14:");
+ free(tmp);
+ tmp = blogc_format_variable("DATE_FORMATTED_10", g, l, NULL);
+ assert_string_equal(tmp, "14:15");
+ free(tmp);
+ sb_trie_free(g);
+ sb_trie_free(l);
+}
+
+
+static void
+test_format_variable_foreach(void **state)
+{
+ sb_slist_t *l = NULL;
+ l = sb_slist_append(l, sb_strdup("asd"));
+ l = sb_slist_append(l, sb_strdup("qwe"));
+ l = sb_slist_append(l, sb_strdup("zxcvbn"));
+ char *tmp = blogc_format_variable("FOREACH_ITEM", NULL, NULL, l->next);
+ assert_string_equal(tmp, "qwe");
+ free(tmp);
+ tmp = blogc_format_variable("FOREACH_ITEM_4", NULL, NULL,
+ l->next->next);
+ assert_string_equal(tmp, "zxcv");
+ free(tmp);
+ tmp = blogc_format_variable("FOREACH_ITEM_10", NULL, NULL,
+ l->next->next);
+ assert_string_equal(tmp, "zxcvbn");
+ free(tmp);
+ sb_slist_free_full(l, free);
+}
+
+
+static void
+test_format_variable_foreach_empty(void **state)
+{
+ assert_null(blogc_format_variable("FOREACH_ITEM", NULL, NULL, NULL));
+ assert_null(blogc_format_variable("FOREACH_ITEM_4", NULL, NULL, NULL));
+}
+
+
+static void
+test_split_list_variable(void **state)
+{
+ sb_trie_t *g = sb_trie_new(free);
+ sb_trie_insert(g, "TAGS", sb_strdup("asd lol hehe"));
+ sb_trie_t *l = sb_trie_new(free);
+ sb_trie_insert(l, "TAGS", sb_strdup("asd lol XD"));
+ sb_slist_t *tmp = blogc_split_list_variable("TAGS", g, l);
+ assert_string_equal(tmp->data, "asd");
+ assert_string_equal(tmp->next->data, "lol");
+ assert_string_equal(tmp->next->next->data, "XD");
+ sb_slist_free_full(tmp, free);
+ sb_trie_free(g);
+ sb_trie_free(l);
+}
+
+
+static void
+test_split_list_variable_not_found(void **state)
+{
+ sb_trie_t *g = sb_trie_new(free);
+ sb_trie_insert(g, "TAGS", sb_strdup("asd lol hehe"));
+ sb_trie_t *l = sb_trie_new(free);
+ sb_trie_insert(l, "TAGS", sb_strdup("asd lol XD"));
+ sb_slist_t *tmp = blogc_split_list_variable("TAG", g, l);
+ assert_null(tmp);
+ sb_trie_free(g);
+ sb_trie_free(l);
+}
+
+
+int
+main(void)
+{
+ const UnitTest tests[] = {
+ unit_test(test_render_entry),
+ unit_test(test_render_listing),
+ unit_test(test_render_listing_empty),
+ unit_test(test_render_ifdef),
+ unit_test(test_render_ifdef2),
+ unit_test(test_render_ifdef3),
+ unit_test(test_render_ifdef4),
+ unit_test(test_render_ifdef5),
+ unit_test(test_render_ifdef6),
+ unit_test(test_render_ifdef7),
+ unit_test(test_render_ifndef),
+ unit_test(test_render_if_eq),
+ unit_test(test_render_if_neq),
+ unit_test(test_render_if_lt),
+ unit_test(test_render_if_gt),
+ unit_test(test_render_if_lt_eq),
+ unit_test(test_render_if_gt_eq),
+ unit_test(test_render_foreach),
+ unit_test(test_render_foreach_if),
+ unit_test(test_render_foreach_if_else),
+ unit_test(test_render_null),
+ unit_test(test_render_outside_block),
+ unit_test(test_render_prefer_local_variable),
+ unit_test(test_render_respect_variable_scope),
+ unit_test(test_render_ifcount_bug),
+ unit_test(test_get_variable),
+ unit_test(test_get_variable_only_local),
+ unit_test(test_get_variable_only_global),
+ unit_test(test_format_date),
+ unit_test(test_format_date_with_global_format),
+ unit_test(test_format_date_without_format),
+ unit_test(test_format_date_without_date),
+ unit_test(test_format_variable),
+ unit_test(test_format_variable_with_date),
+ unit_test(test_format_variable_foreach),
+ unit_test(test_format_variable_foreach_empty),
+ unit_test(test_split_list_variable),
+ unit_test(test_split_list_variable_not_found),
+ };
+ return run_tests(tests);
+}
diff --git a/tests/check_source_parser.c b/tests/check_source_parser.c
new file mode 100644
index 0000000..bbd9ec6
--- /dev/null
+++ b/tests/check_source_parser.c
@@ -0,0 +1,542 @@
+/*
+ * blogc: A blog compiler.
+ * Copyright (C) 2015-2016 Rafael G. Martins <rafael@rafaelmartins.eng.br>
+ *
+ * This program can be distributed under the terms of the BSD License.
+ * See the file LICENSE.
+ */
+
+#include <stdarg.h>
+#include <stddef.h>
+#include <setjmp.h>
+#include <cmocka.h>
+#include <string.h>
+#include "../src/source-parser.h"
+#include "../src/error.h"
+#include "../src/utils.h"
+
+
+static void
+test_source_parse(void **state)
+{
+ const char *a =
+ "VAR1: asd asd\n"
+ "VAR2: 123chunda\n"
+ "----------\n"
+ "# This is a test\n"
+ "\n"
+ "bola\n";
+ blogc_error_t *err = NULL;
+ sb_trie_t *source = blogc_source_parse(a, strlen(a), &err);
+ assert_null(err);
+ assert_non_null(source);
+ assert_int_equal(sb_trie_size(source), 6);
+ assert_string_equal(sb_trie_lookup(source, "VAR1"), "asd asd");
+ assert_string_equal(sb_trie_lookup(source, "VAR2"), "123chunda");
+ assert_string_equal(sb_trie_lookup(source, "EXCERPT"),
+ "<h1 id=\"this-is-a-test\">This is a test</h1>\n"
+ "<p>bola</p>\n");
+ assert_string_equal(sb_trie_lookup(source, "CONTENT"),
+ "<h1 id=\"this-is-a-test\">This is a test</h1>\n"
+ "<p>bola</p>\n");
+ assert_string_equal(sb_trie_lookup(source, "RAW_CONTENT"),
+ "# This is a test\n"
+ "\n"
+ "bola\n");
+ assert_string_equal(sb_trie_lookup(source, "DESCRIPTION"), "bola");
+ sb_trie_free(source);
+}
+
+
+static void
+test_source_parse_crlf(void **state)
+{
+ const char *a =
+ "VAR1: asd asd\r\n"
+ "VAR2: 123chunda\r\n"
+ "----------\r\n"
+ "# This is a test\r\n"
+ "\r\n"
+ "bola\r\n";
+ blogc_error_t *err = NULL;
+ sb_trie_t *source = blogc_source_parse(a, strlen(a), &err);
+ assert_null(err);
+ assert_non_null(source);
+ assert_int_equal(sb_trie_size(source), 6);
+ assert_string_equal(sb_trie_lookup(source, "VAR1"), "asd asd");
+ assert_string_equal(sb_trie_lookup(source, "VAR2"), "123chunda");
+ assert_string_equal(sb_trie_lookup(source, "EXCERPT"),
+ "<h1 id=\"this-is-a-test\">This is a test</h1>\r\n"
+ "<p>bola</p>\r\n");
+ assert_string_equal(sb_trie_lookup(source, "CONTENT"),
+ "<h1 id=\"this-is-a-test\">This is a test</h1>\r\n"
+ "<p>bola</p>\r\n");
+ assert_string_equal(sb_trie_lookup(source, "RAW_CONTENT"),
+ "# This is a test\r\n"
+ "\r\n"
+ "bola\r\n");
+ assert_string_equal(sb_trie_lookup(source, "DESCRIPTION"), "bola");
+ sb_trie_free(source);
+}
+
+
+static void
+test_source_parse_with_spaces(void **state)
+{
+ const char *a =
+ "\n \n"
+ "VAR1: chunda \t \n"
+ "\n\n"
+ "BOLA: guda\n"
+ "----------\n"
+ "# This is a test\n"
+ "\n"
+ "bola\n";
+ blogc_error_t *err = NULL;
+ sb_trie_t *source = blogc_source_parse(a, strlen(a), &err);
+ assert_null(err);
+ assert_non_null(source);
+ assert_int_equal(sb_trie_size(source), 6);
+ assert_string_equal(sb_trie_lookup(source, "VAR1"), "chunda");
+ assert_string_equal(sb_trie_lookup(source, "BOLA"), "guda");
+ assert_string_equal(sb_trie_lookup(source, "EXCERPT"),
+ "<h1 id=\"this-is-a-test\">This is a test</h1>\n"
+ "<p>bola</p>\n");
+ assert_string_equal(sb_trie_lookup(source, "CONTENT"),
+ "<h1 id=\"this-is-a-test\">This is a test</h1>\n"
+ "<p>bola</p>\n");
+ assert_string_equal(sb_trie_lookup(source, "RAW_CONTENT"),
+ "# This is a test\n"
+ "\n"
+ "bola\n");
+ assert_string_equal(sb_trie_lookup(source, "DESCRIPTION"), "bola");
+ sb_trie_free(source);
+}
+
+
+static void
+test_source_parse_with_excerpt(void **state)
+{
+ const char *a =
+ "VAR1: asd asd\n"
+ "VAR2: 123chunda\n"
+ "----------\n"
+ "# This is a test\n"
+ "\n"
+ "bola\n"
+ "\n"
+ "...\n"
+ "\n"
+ "guda\n"
+ "yay";
+ blogc_error_t *err = NULL;
+ sb_trie_t *source = blogc_source_parse(a, strlen(a), &err);
+ assert_null(err);
+ assert_non_null(source);
+ assert_int_equal(sb_trie_size(source), 6);
+ assert_string_equal(sb_trie_lookup(source, "VAR1"), "asd asd");
+ assert_string_equal(sb_trie_lookup(source, "VAR2"), "123chunda");
+ assert_string_equal(sb_trie_lookup(source, "EXCERPT"),
+ "<h1 id=\"this-is-a-test\">This is a test</h1>\n"
+ "<p>bola</p>\n");
+ assert_string_equal(sb_trie_lookup(source, "CONTENT"),
+ "<h1 id=\"this-is-a-test\">This is a test</h1>\n"
+ "<p>bola</p>\n"
+ "<p>guda\n"
+ "yay</p>\n");
+ assert_string_equal(sb_trie_lookup(source, "RAW_CONTENT"),
+ "# This is a test\n"
+ "\n"
+ "bola\n"
+ "\n"
+ "...\n"
+ "\n"
+ "guda\n"
+ "yay");
+ assert_string_equal(sb_trie_lookup(source, "DESCRIPTION"), "bola");
+ sb_trie_free(source);
+}
+
+
+static void
+test_source_parse_with_description(void **state)
+{
+ const char *a =
+ "VAR1: asd asd\n"
+ "VAR2: 123chunda\n"
+ "DESCRIPTION: huehuehuebrbr\n"
+ "----------\n"
+ "# This is a test\n"
+ "\n"
+ "bola\n";
+ blogc_error_t *err = NULL;
+ sb_trie_t *source = blogc_source_parse(a, strlen(a), &err);
+ assert_null(err);
+ assert_non_null(source);
+ assert_int_equal(sb_trie_size(source), 6);
+ assert_string_equal(sb_trie_lookup(source, "VAR1"), "asd asd");
+ assert_string_equal(sb_trie_lookup(source, "VAR2"), "123chunda");
+ assert_string_equal(sb_trie_lookup(source, "EXCERPT"),
+ "<h1 id=\"this-is-a-test\">This is a test</h1>\n"
+ "<p>bola</p>\n");
+ assert_string_equal(sb_trie_lookup(source, "CONTENT"),
+ "<h1 id=\"this-is-a-test\">This is a test</h1>\n"
+ "<p>bola</p>\n");
+ assert_string_equal(sb_trie_lookup(source, "RAW_CONTENT"),
+ "# This is a test\n"
+ "\n"
+ "bola\n");
+ assert_string_equal(sb_trie_lookup(source, "DESCRIPTION"), "huehuehuebrbr");
+ sb_trie_free(source);
+}
+
+
+static void
+test_source_parse_config_empty(void **state)
+{
+ const char *a = "";
+ blogc_error_t *err = NULL;
+ sb_trie_t *source = blogc_source_parse(a, strlen(a), &err);
+ assert_null(source);
+ assert_non_null(err);
+ assert_int_equal(err->type, BLOGC_ERROR_SOURCE_PARSER);
+ assert_string_equal(err->msg, "Your source file is empty.");
+ blogc_error_free(err);
+ sb_trie_free(source);
+}
+
+
+static void
+test_source_parse_config_invalid_key(void **state)
+{
+ const char *a = "bola: guda";
+ blogc_error_t *err = NULL;
+ sb_trie_t *source = blogc_source_parse(a, strlen(a), &err);
+ assert_non_null(err);
+ assert_int_equal(err->type, BLOGC_ERROR_SOURCE_PARSER);
+ assert_string_equal(err->msg,
+ "Can't find a configuration key or the content separator.\n"
+ "Error occurred near line 1, position 1: bola: guda");
+ blogc_error_free(err);
+ sb_trie_free(source);
+}
+
+
+static void
+test_source_parse_config_no_key(void **state)
+{
+ const char *a = "BOLa";
+ blogc_error_t *err = NULL;
+ sb_trie_t *source = blogc_source_parse(a, strlen(a), &err);
+ assert_non_null(err);
+ assert_int_equal(err->type, BLOGC_ERROR_SOURCE_PARSER);
+ assert_string_equal(err->msg,
+ "Invalid configuration key.\n"
+ "Error occurred near line 1, position 4: BOLa");
+ blogc_error_free(err);
+ sb_trie_free(source);
+}
+
+
+static void
+test_source_parse_config_no_key2(void **state)
+{
+ const char *a = "BOLA";
+ blogc_error_t *err = NULL;
+ sb_trie_t *source = blogc_source_parse(a, strlen(a), &err);
+ assert_non_null(err);
+ assert_int_equal(err->type, BLOGC_ERROR_SOURCE_PARSER);
+ assert_string_equal(err->msg,
+ "Your last configuration key is missing ':' and the value\n"
+ "Error occurred near line 1, position 5: BOLA");
+ blogc_error_free(err);
+ sb_trie_free(source);
+}
+
+
+static void
+test_source_parse_config_no_value(void **state)
+{
+ const char *a = "BOLA:\r\n";
+ blogc_error_t *err = NULL;
+ sb_trie_t *source = blogc_source_parse(a, strlen(a), &err);
+ assert_null(source);
+ assert_non_null(err);
+ assert_int_equal(err->type, BLOGC_ERROR_SOURCE_PARSER);
+ assert_string_equal(err->msg,
+ "Configuration value not provided for 'BOLA'.\n"
+ "Error occurred near line 1, position 6: BOLA:");
+ blogc_error_free(err);
+ sb_trie_free(source);
+}
+
+
+static void
+test_source_parse_config_no_value2(void **state)
+{
+ const char *a = "BOLA:";
+ blogc_error_t *err = NULL;
+ sb_trie_t *source = blogc_source_parse(a, strlen(a), &err);
+ assert_null(source);
+ assert_non_null(err);
+ assert_int_equal(err->type, BLOGC_ERROR_SOURCE_PARSER);
+ assert_string_equal(err->msg,
+ "Configuration value not provided for 'BOLA'.\n"
+ "Error occurred near line 1, position 6: BOLA:");
+ blogc_error_free(err);
+ sb_trie_free(source);
+}
+
+
+static void
+test_source_parse_config_reserved_name(void **state)
+{
+ const char *a = "FILENAME: asd\r\n";
+ blogc_error_t *err = NULL;
+ sb_trie_t *source = blogc_source_parse(a, strlen(a), &err);
+ assert_null(source);
+ assert_non_null(err);
+ assert_int_equal(err->type, BLOGC_ERROR_SOURCE_PARSER);
+ assert_string_equal(err->msg,
+ "'FILENAME' variable is forbidden in source files. It will be set "
+ "for you by the compiler.");
+ blogc_error_free(err);
+ sb_trie_free(source);
+}
+
+
+static void
+test_source_parse_config_reserved_name2(void **state)
+{
+ const char *a = "CONTENT: asd\r\n";
+ blogc_error_t *err = NULL;
+ sb_trie_t *source = blogc_source_parse(a, strlen(a), &err);
+ assert_null(source);
+ assert_non_null(err);
+ assert_int_equal(err->type, BLOGC_ERROR_SOURCE_PARSER);
+ assert_string_equal(err->msg,
+ "'CONTENT' variable is forbidden in source files. It will be set "
+ "for you by the compiler.");
+ blogc_error_free(err);
+ sb_trie_free(source);
+}
+
+
+static void
+test_source_parse_config_reserved_name3(void **state)
+{
+ const char *a = "DATE_FORMATTED: asd\r\n";
+ blogc_error_t *err = NULL;
+ sb_trie_t *source = blogc_source_parse(a, strlen(a), &err);
+ assert_null(source);
+ assert_non_null(err);
+ assert_int_equal(err->type, BLOGC_ERROR_SOURCE_PARSER);
+ assert_string_equal(err->msg,
+ "'DATE_FORMATTED' variable is forbidden in source files. It will be set "
+ "for you by the compiler.");
+ blogc_error_free(err);
+ sb_trie_free(source);
+}
+
+
+static void
+test_source_parse_config_reserved_name4(void **state)
+{
+ const char *a = "DATE_FIRST_FORMATTED: asd\r\n";
+ blogc_error_t *err = NULL;
+ sb_trie_t *source = blogc_source_parse(a, strlen(a), &err);
+ assert_null(source);
+ assert_non_null(err);
+ assert_int_equal(err->type, BLOGC_ERROR_SOURCE_PARSER);
+ assert_string_equal(err->msg,
+ "'DATE_FIRST_FORMATTED' variable is forbidden in source files. It will be set "
+ "for you by the compiler.");
+ blogc_error_free(err);
+ sb_trie_free(source);
+}
+
+
+static void
+test_source_parse_config_reserved_name5(void **state)
+{
+ const char *a = "DATE_LAST_FORMATTED: asd\r\n";
+ blogc_error_t *err = NULL;
+ sb_trie_t *source = blogc_source_parse(a, strlen(a), &err);
+ assert_null(source);
+ assert_non_null(err);
+ assert_int_equal(err->type, BLOGC_ERROR_SOURCE_PARSER);
+ assert_string_equal(err->msg,
+ "'DATE_LAST_FORMATTED' variable is forbidden in source files. It will be set "
+ "for you by the compiler.");
+ blogc_error_free(err);
+ sb_trie_free(source);
+}
+
+
+static void
+test_source_parse_config_reserved_name6(void **state)
+{
+ const char *a = "PAGE_FIRST: asd\r\n";
+ blogc_error_t *err = NULL;
+ sb_trie_t *source = blogc_source_parse(a, strlen(a), &err);
+ assert_null(source);
+ assert_non_null(err);
+ assert_int_equal(err->type, BLOGC_ERROR_SOURCE_PARSER);
+ assert_string_equal(err->msg,
+ "'PAGE_FIRST' variable is forbidden in source files. It will be set "
+ "for you by the compiler.");
+ blogc_error_free(err);
+ sb_trie_free(source);
+}
+
+
+static void
+test_source_parse_config_reserved_name7(void **state)
+{
+ const char *a = "PAGE_PREVIOUS: asd\r\n";
+ blogc_error_t *err = NULL;
+ sb_trie_t *source = blogc_source_parse(a, strlen(a), &err);
+ assert_null(source);
+ assert_non_null(err);
+ assert_int_equal(err->type, BLOGC_ERROR_SOURCE_PARSER);
+ assert_string_equal(err->msg,
+ "'PAGE_PREVIOUS' variable is forbidden in source files. It will be set "
+ "for you by the compiler.");
+ blogc_error_free(err);
+ sb_trie_free(source);
+}
+
+
+static void
+test_source_parse_config_reserved_name8(void **state)
+{
+ const char *a = "PAGE_CURRENT: asd\r\n";
+ blogc_error_t *err = NULL;
+ sb_trie_t *source = blogc_source_parse(a, strlen(a), &err);
+ assert_null(source);
+ assert_non_null(err);
+ assert_int_equal(err->type, BLOGC_ERROR_SOURCE_PARSER);
+ assert_string_equal(err->msg,
+ "'PAGE_CURRENT' variable is forbidden in source files. It will be set "
+ "for you by the compiler.");
+ blogc_error_free(err);
+ sb_trie_free(source);
+}
+
+
+static void
+test_source_parse_config_reserved_name9(void **state)
+{
+ const char *a = "PAGE_NEXT: asd\r\n";
+ blogc_error_t *err = NULL;
+ sb_trie_t *source = blogc_source_parse(a, strlen(a), &err);
+ assert_null(source);
+ assert_non_null(err);
+ assert_int_equal(err->type, BLOGC_ERROR_SOURCE_PARSER);
+ assert_string_equal(err->msg,
+ "'PAGE_NEXT' variable is forbidden in source files. It will be set "
+ "for you by the compiler.");
+ blogc_error_free(err);
+ sb_trie_free(source);
+}
+
+
+static void
+test_source_parse_config_reserved_name10(void **state)
+{
+ const char *a = "PAGE_LAST: asd\r\n";
+ blogc_error_t *err = NULL;
+ sb_trie_t *source = blogc_source_parse(a, strlen(a), &err);
+ assert_null(source);
+ assert_non_null(err);
+ assert_int_equal(err->type, BLOGC_ERROR_SOURCE_PARSER);
+ assert_string_equal(err->msg,
+ "'PAGE_LAST' variable is forbidden in source files. It will be set "
+ "for you by the compiler.");
+ blogc_error_free(err);
+ sb_trie_free(source);
+}
+
+
+static void
+test_source_parse_config_reserved_name11(void **state)
+{
+ const char *a = "BLOGC_VERSION: 1.0\r\n";
+ blogc_error_t *err = NULL;
+ sb_trie_t *source = blogc_source_parse(a, strlen(a), &err);
+ assert_null(source);
+ assert_non_null(err);
+ assert_int_equal(err->type, BLOGC_ERROR_SOURCE_PARSER);
+ assert_string_equal(err->msg,
+ "'BLOGC_VERSION' variable is forbidden in source files. It will be set "
+ "for you by the compiler.");
+ blogc_error_free(err);
+ sb_trie_free(source);
+}
+
+
+static void
+test_source_parse_config_value_no_line_ending(void **state)
+{
+ const char *a = "BOLA: asd";
+ blogc_error_t *err = NULL;
+ sb_trie_t *source = blogc_source_parse(a, strlen(a), &err);
+ assert_null(source);
+ assert_non_null(err);
+ assert_int_equal(err->type, BLOGC_ERROR_SOURCE_PARSER);
+ assert_string_equal(err->msg,
+ "No line ending after the configuration value for 'BOLA'.\n"
+ "Error occurred near line 1, position 10: BOLA: asd");
+ blogc_error_free(err);
+ sb_trie_free(source);
+}
+
+
+static void
+test_source_parse_invalid_separator(void **state)
+{
+ const char *a = "BOLA: asd\n---#";
+ blogc_error_t *err = NULL;
+ sb_trie_t *source = blogc_source_parse(a, strlen(a), &err);
+ assert_null(source);
+ assert_non_null(err);
+ assert_int_equal(err->type, BLOGC_ERROR_SOURCE_PARSER);
+ assert_string_equal(err->msg,
+ "Invalid content separator. Must be more than one '-' characters.\n"
+ "Error occurred near line 2, position 4: ---#");
+ blogc_error_free(err);
+ sb_trie_free(source);
+}
+
+
+int
+main(void)
+{
+ const UnitTest tests[] = {
+ unit_test(test_source_parse),
+ unit_test(test_source_parse_crlf),
+ unit_test(test_source_parse_with_spaces),
+ unit_test(test_source_parse_with_excerpt),
+ unit_test(test_source_parse_with_description),
+ unit_test(test_source_parse_config_empty),
+ unit_test(test_source_parse_config_invalid_key),
+ unit_test(test_source_parse_config_no_key),
+ unit_test(test_source_parse_config_no_key2),
+ unit_test(test_source_parse_config_no_value),
+ unit_test(test_source_parse_config_no_value2),
+ unit_test(test_source_parse_config_reserved_name),
+ unit_test(test_source_parse_config_reserved_name2),
+ unit_test(test_source_parse_config_reserved_name3),
+ unit_test(test_source_parse_config_reserved_name4),
+ unit_test(test_source_parse_config_reserved_name5),
+ unit_test(test_source_parse_config_reserved_name6),
+ unit_test(test_source_parse_config_reserved_name7),
+ unit_test(test_source_parse_config_reserved_name8),
+ unit_test(test_source_parse_config_reserved_name9),
+ unit_test(test_source_parse_config_reserved_name10),
+ unit_test(test_source_parse_config_reserved_name11),
+ unit_test(test_source_parse_config_value_no_line_ending),
+ unit_test(test_source_parse_invalid_separator),
+ };
+ return run_tests(tests);
+}
diff --git a/tests/check_template_parser.c b/tests/check_template_parser.c
new file mode 100644
index 0000000..da6a184
--- /dev/null
+++ b/tests/check_template_parser.c
@@ -0,0 +1,1184 @@
+/*
+ * blogc: A blog compiler.
+ * Copyright (C) 2015-2016 Rafael G. Martins <rafael@rafaelmartins.eng.br>
+ *
+ * This program can be distributed under the terms of the BSD License.
+ * See the file LICENSE.
+ */
+
+#include <stdarg.h>
+#include <stddef.h>
+#include <setjmp.h>
+#include <cmocka.h>
+#include <string.h>
+#include "../src/template-parser.h"
+#include "../src/error.h"
+#include "../src/utils.h"
+
+
+static void
+blogc_assert_template_stmt(sb_slist_t *l, const char *value,
+ const blogc_template_stmt_type_t type)
+{
+ blogc_template_stmt_t *stmt = l->data;
+ if (value == NULL)
+ assert_null(stmt->value);
+ else
+ assert_string_equal(stmt->value, value);
+ assert_int_equal(stmt->type, type);
+}
+
+
+static void
+blogc_assert_template_if_stmt(sb_slist_t *l, const char *variable,
+ blogc_template_stmt_operator_t operator, const char *operand)
+{
+ blogc_template_stmt_t *stmt = l->data;
+ assert_string_equal(stmt->value, variable);
+ assert_int_equal(stmt->op, operator);
+ assert_string_equal(stmt->value2, operand);
+ assert_int_equal(stmt->type, BLOGC_TEMPLATE_IF_STMT);
+}
+
+
+static void
+test_template_parse(void **state)
+{
+ const char *a =
+ "Test\n"
+ "\n"
+ " {%- block entry -%}\n"
+ "{% ifdef CHUNDA %}\n"
+ "bola\n"
+ "{% endif %}\n"
+ "{% ifndef BOLA %}\n"
+ "bolao\n"
+ "{%- endif %}\n"
+ "{% endblock %}\n"
+ "{% block listing %}{{ BOLA }}{% endblock %}\n"
+ "{% block listing_once %}asd{% endblock %}\n"
+ "{%- foreach BOLA %}hahaha{% endforeach %}\n"
+ "{% if BOLA == \"1\\\"0\" %}aee{% else %}fffuuuuuuu{% endif %}";
+ blogc_error_t *err = NULL;
+ sb_slist_t *stmts = blogc_template_parse(a, strlen(a), &err);
+ assert_null(err);
+ assert_non_null(stmts);
+ blogc_assert_template_stmt(stmts, "Test",
+ BLOGC_TEMPLATE_CONTENT_STMT);
+ blogc_assert_template_stmt(stmts->next, "entry",
+ BLOGC_TEMPLATE_BLOCK_STMT);
+ blogc_assert_template_stmt(stmts->next->next, "",
+ BLOGC_TEMPLATE_CONTENT_STMT);
+ blogc_assert_template_stmt(stmts->next->next->next, "CHUNDA",
+ BLOGC_TEMPLATE_IFDEF_STMT);
+ blogc_assert_template_stmt(stmts->next->next->next->next, "\nbola\n",
+ BLOGC_TEMPLATE_CONTENT_STMT);
+ blogc_assert_template_stmt(stmts->next->next->next->next->next, NULL,
+ BLOGC_TEMPLATE_ENDIF_STMT);
+ blogc_assert_template_stmt(stmts->next->next->next->next->next->next, "\n",
+ BLOGC_TEMPLATE_CONTENT_STMT);
+ sb_slist_t *tmp = stmts->next->next->next->next->next->next->next;
+ blogc_assert_template_stmt(tmp, "BOLA", BLOGC_TEMPLATE_IFNDEF_STMT);
+ blogc_assert_template_stmt(tmp->next, "\nbolao", BLOGC_TEMPLATE_CONTENT_STMT);
+ blogc_assert_template_stmt(tmp->next->next, NULL, BLOGC_TEMPLATE_ENDIF_STMT);
+ blogc_assert_template_stmt(tmp->next->next->next, "\n",
+ BLOGC_TEMPLATE_CONTENT_STMT);
+ tmp = tmp->next->next->next->next;
+ blogc_assert_template_stmt(tmp, NULL, BLOGC_TEMPLATE_ENDBLOCK_STMT);
+ blogc_assert_template_stmt(tmp->next, "\n", BLOGC_TEMPLATE_CONTENT_STMT);
+ blogc_assert_template_stmt(tmp->next->next, "listing",
+ BLOGC_TEMPLATE_BLOCK_STMT);
+ blogc_assert_template_stmt(tmp->next->next->next, "BOLA",
+ BLOGC_TEMPLATE_VARIABLE_STMT);
+ blogc_assert_template_stmt(tmp->next->next->next->next,
+ NULL, BLOGC_TEMPLATE_ENDBLOCK_STMT);
+ blogc_assert_template_stmt(tmp->next->next->next->next->next, "\n",
+ BLOGC_TEMPLATE_CONTENT_STMT);
+ blogc_assert_template_stmt(tmp->next->next->next->next->next->next,
+ "listing_once", BLOGC_TEMPLATE_BLOCK_STMT);
+ blogc_assert_template_stmt(tmp->next->next->next->next->next->next->next,
+ "asd", BLOGC_TEMPLATE_CONTENT_STMT);
+ blogc_assert_template_stmt(tmp->next->next->next->next->next->next->next->next,
+ NULL, BLOGC_TEMPLATE_ENDBLOCK_STMT);
+ blogc_assert_template_stmt(tmp->next->next->next->next->next->next->next->next->next,
+ "", BLOGC_TEMPLATE_CONTENT_STMT);
+ tmp = tmp->next->next->next->next->next->next->next->next->next->next;
+ blogc_assert_template_stmt(tmp, "BOLA", BLOGC_TEMPLATE_FOREACH_STMT);
+ blogc_assert_template_stmt(tmp->next, "hahaha",
+ BLOGC_TEMPLATE_CONTENT_STMT);
+ blogc_assert_template_stmt(tmp->next->next, NULL,
+ BLOGC_TEMPLATE_ENDFOREACH_STMT);
+ blogc_assert_template_stmt(tmp->next->next->next, "\n",
+ BLOGC_TEMPLATE_CONTENT_STMT);
+ blogc_assert_template_if_stmt(tmp->next->next->next->next, "BOLA",
+ BLOGC_TEMPLATE_OP_EQ, "\"1\\\"0\"");
+ blogc_assert_template_stmt(tmp->next->next->next->next->next, "aee",
+ BLOGC_TEMPLATE_CONTENT_STMT);
+ blogc_assert_template_stmt(tmp->next->next->next->next->next->next, NULL,
+ BLOGC_TEMPLATE_ELSE_STMT);
+ blogc_assert_template_stmt(tmp->next->next->next->next->next->next->next,
+ "fffuuuuuuu", BLOGC_TEMPLATE_CONTENT_STMT);
+ blogc_assert_template_stmt(tmp->next->next->next->next->next->next->next->next,
+ NULL, BLOGC_TEMPLATE_ENDIF_STMT);
+ assert_null(tmp->next->next->next->next->next->next->next->next->next);
+ blogc_template_free_stmts(stmts);
+}
+
+
+static void
+test_template_parse_crlf(void **state)
+{
+ const char *a =
+ "Test\r\n"
+ "\r\n"
+ " {%- block entry -%}\r\n"
+ "{% ifdef CHUNDA %}\r\n"
+ "bola\r\n"
+ "{% endif %}\r\n"
+ "{% ifndef BOLA %}\r\n"
+ "bolao\r\n"
+ "{%- endif %}\r\n"
+ "{% endblock %}\r\n"
+ "{% block listing %}{{ BOLA }}{% endblock %}\r\n"
+ "{% block listing_once %}asd{% endblock %}\r\n"
+ "{%- foreach BOLA %}hahaha{% endforeach %}\r\n"
+ "{% if BOLA == \"1\\\"0\" %}aee{% else %}fffuuuuuuu{% endif %}";
+ blogc_error_t *err = NULL;
+ sb_slist_t *stmts = blogc_template_parse(a, strlen(a), &err);
+ assert_null(err);
+ assert_non_null(stmts);
+ blogc_assert_template_stmt(stmts, "Test",
+ BLOGC_TEMPLATE_CONTENT_STMT);
+ blogc_assert_template_stmt(stmts->next, "entry",
+ BLOGC_TEMPLATE_BLOCK_STMT);
+ blogc_assert_template_stmt(stmts->next->next, "",
+ BLOGC_TEMPLATE_CONTENT_STMT);
+ blogc_assert_template_stmt(stmts->next->next->next, "CHUNDA",
+ BLOGC_TEMPLATE_IFDEF_STMT);
+ blogc_assert_template_stmt(stmts->next->next->next->next, "\r\nbola\r\n",
+ BLOGC_TEMPLATE_CONTENT_STMT);
+ blogc_assert_template_stmt(stmts->next->next->next->next->next, NULL,
+ BLOGC_TEMPLATE_ENDIF_STMT);
+ blogc_assert_template_stmt(stmts->next->next->next->next->next->next, "\r\n",
+ BLOGC_TEMPLATE_CONTENT_STMT);
+ sb_slist_t *tmp = stmts->next->next->next->next->next->next->next;
+ blogc_assert_template_stmt(tmp, "BOLA", BLOGC_TEMPLATE_IFNDEF_STMT);
+ blogc_assert_template_stmt(tmp->next, "\r\nbolao", BLOGC_TEMPLATE_CONTENT_STMT);
+ blogc_assert_template_stmt(tmp->next->next, NULL, BLOGC_TEMPLATE_ENDIF_STMT);
+ blogc_assert_template_stmt(tmp->next->next->next, "\r\n",
+ BLOGC_TEMPLATE_CONTENT_STMT);
+ tmp = tmp->next->next->next->next;
+ blogc_assert_template_stmt(tmp, NULL, BLOGC_TEMPLATE_ENDBLOCK_STMT);
+ blogc_assert_template_stmt(tmp->next, "\r\n", BLOGC_TEMPLATE_CONTENT_STMT);
+ blogc_assert_template_stmt(tmp->next->next, "listing",
+ BLOGC_TEMPLATE_BLOCK_STMT);
+ blogc_assert_template_stmt(tmp->next->next->next, "BOLA",
+ BLOGC_TEMPLATE_VARIABLE_STMT);
+ blogc_assert_template_stmt(tmp->next->next->next->next,
+ NULL, BLOGC_TEMPLATE_ENDBLOCK_STMT);
+ blogc_assert_template_stmt(tmp->next->next->next->next->next, "\r\n",
+ BLOGC_TEMPLATE_CONTENT_STMT);
+ blogc_assert_template_stmt(tmp->next->next->next->next->next->next,
+ "listing_once", BLOGC_TEMPLATE_BLOCK_STMT);
+ blogc_assert_template_stmt(tmp->next->next->next->next->next->next->next,
+ "asd", BLOGC_TEMPLATE_CONTENT_STMT);
+ blogc_assert_template_stmt(tmp->next->next->next->next->next->next->next->next,
+ NULL, BLOGC_TEMPLATE_ENDBLOCK_STMT);
+ blogc_assert_template_stmt(tmp->next->next->next->next->next->next->next->next->next,
+ "", BLOGC_TEMPLATE_CONTENT_STMT);
+ tmp = tmp->next->next->next->next->next->next->next->next->next->next;
+ blogc_assert_template_stmt(tmp, "BOLA", BLOGC_TEMPLATE_FOREACH_STMT);
+ blogc_assert_template_stmt(tmp->next, "hahaha",
+ BLOGC_TEMPLATE_CONTENT_STMT);
+ blogc_assert_template_stmt(tmp->next->next, NULL,
+ BLOGC_TEMPLATE_ENDFOREACH_STMT);
+ blogc_assert_template_stmt(tmp->next->next->next, "\r\n",
+ BLOGC_TEMPLATE_CONTENT_STMT);
+ blogc_assert_template_if_stmt(tmp->next->next->next->next, "BOLA",
+ BLOGC_TEMPLATE_OP_EQ, "\"1\\\"0\"");
+ blogc_assert_template_stmt(tmp->next->next->next->next->next, "aee",
+ BLOGC_TEMPLATE_CONTENT_STMT);
+ blogc_assert_template_stmt(tmp->next->next->next->next->next->next, NULL,
+ BLOGC_TEMPLATE_ELSE_STMT);
+ blogc_assert_template_stmt(tmp->next->next->next->next->next->next->next,
+ "fffuuuuuuu", BLOGC_TEMPLATE_CONTENT_STMT);
+ blogc_assert_template_stmt(tmp->next->next->next->next->next->next->next->next,
+ NULL, BLOGC_TEMPLATE_ENDIF_STMT);
+ assert_null(tmp->next->next->next->next->next->next->next->next->next);
+ blogc_template_free_stmts(stmts);
+}
+
+
+static void
+test_template_parse_html(void **state)
+{
+ const char *a =
+ "<html>\n"
+ " <head>\n"
+ " {% block entry %}\n"
+ " <title>My cool blog >> {{ TITLE }}</title>\n"
+ " {% endblock %}\n"
+ " {% block listing_once %}\n"
+ " <title>My cool blog - Main page</title>\n"
+ " {% endblock %}\n"
+ " </head>\n"
+ " <body>\n"
+ " <h1>My cool blog</h1>\n"
+ " {% block entry %}\n"
+ " <h2>{{ TITLE }}</h2>\n"
+ " {% ifdef DATE %}<h4>Published in: {{ DATE }}</h4>{% endif %}\n"
+ " <pre>{{ CONTENT }}</pre>\n"
+ " {% endblock %}\n"
+ " {% block listing_once %}<ul>{% endblock %}\n"
+ " {% block listing %}<p><a href=\"{{ FILENAME }}.html\">"
+ "{{ TITLE }}</a>{% ifdef DATE %} - {{ DATE }}{% endif %}</p>{% endblock %}\n"
+ " {% block listing_once %}</ul>{% endblock %}\n"
+ " </body>\n"
+ "</html>\n";
+ blogc_error_t *err = NULL;
+ sb_slist_t *stmts = blogc_template_parse(a, strlen(a), &err);
+ assert_null(err);
+ assert_non_null(stmts);
+ blogc_assert_template_stmt(stmts, "<html>\n <head>\n ",
+ BLOGC_TEMPLATE_CONTENT_STMT);
+ blogc_assert_template_stmt(stmts->next, "entry",
+ BLOGC_TEMPLATE_BLOCK_STMT);
+ blogc_assert_template_stmt(stmts->next->next,
+ "\n <title>My cool blog >> ", BLOGC_TEMPLATE_CONTENT_STMT);
+ blogc_assert_template_stmt(stmts->next->next->next, "TITLE",
+ BLOGC_TEMPLATE_VARIABLE_STMT);
+ blogc_assert_template_stmt(stmts->next->next->next->next,
+ "</title>\n ", BLOGC_TEMPLATE_CONTENT_STMT);
+ blogc_assert_template_stmt(stmts->next->next->next->next->next, NULL,
+ BLOGC_TEMPLATE_ENDBLOCK_STMT);
+ blogc_assert_template_stmt(stmts->next->next->next->next->next->next,
+ "\n ", BLOGC_TEMPLATE_CONTENT_STMT);
+ blogc_assert_template_stmt(stmts->next->next->next->next->next->next->next,
+ "listing_once", BLOGC_TEMPLATE_BLOCK_STMT);
+ sb_slist_t *tmp = stmts->next->next->next->next->next->next->next->next;
+ blogc_assert_template_stmt(tmp,
+ "\n <title>My cool blog - Main page</title>\n ",
+ BLOGC_TEMPLATE_CONTENT_STMT);
+ blogc_assert_template_stmt(tmp->next, NULL, BLOGC_TEMPLATE_ENDBLOCK_STMT);
+ blogc_assert_template_stmt(tmp->next->next,
+ "\n </head>\n <body>\n <h1>My cool blog</h1>\n ",
+ BLOGC_TEMPLATE_CONTENT_STMT);
+ blogc_assert_template_stmt(tmp->next->next->next, "entry",
+ BLOGC_TEMPLATE_BLOCK_STMT);
+ blogc_assert_template_stmt(tmp->next->next->next->next,
+ "\n <h2>", BLOGC_TEMPLATE_CONTENT_STMT);
+ blogc_assert_template_stmt(tmp->next->next->next->next->next,
+ "TITLE", BLOGC_TEMPLATE_VARIABLE_STMT);
+ blogc_assert_template_stmt(tmp->next->next->next->next->next->next,
+ "</h2>\n ", BLOGC_TEMPLATE_CONTENT_STMT);
+ blogc_assert_template_stmt(tmp->next->next->next->next->next->next->next,
+ "DATE", BLOGC_TEMPLATE_IFDEF_STMT);
+ tmp = tmp->next->next->next->next->next->next->next->next;
+ blogc_assert_template_stmt(tmp, "<h4>Published in: ",
+ BLOGC_TEMPLATE_CONTENT_STMT);
+ blogc_assert_template_stmt(tmp->next, "DATE", BLOGC_TEMPLATE_VARIABLE_STMT);
+ blogc_assert_template_stmt(tmp->next->next, "</h4>",
+ BLOGC_TEMPLATE_CONTENT_STMT);
+ blogc_assert_template_stmt(tmp->next->next->next, NULL,
+ BLOGC_TEMPLATE_ENDIF_STMT);
+ blogc_assert_template_stmt(tmp->next->next->next->next, "\n <pre>",
+ BLOGC_TEMPLATE_CONTENT_STMT);
+ blogc_assert_template_stmt(tmp->next->next->next->next->next,
+ "CONTENT", BLOGC_TEMPLATE_VARIABLE_STMT);
+ blogc_assert_template_stmt(tmp->next->next->next->next->next->next,
+ "</pre>\n ", BLOGC_TEMPLATE_CONTENT_STMT);
+ blogc_assert_template_stmt(tmp->next->next->next->next->next->next->next,
+ NULL, BLOGC_TEMPLATE_ENDBLOCK_STMT);
+ tmp = tmp->next->next->next->next->next->next->next->next;
+ blogc_assert_template_stmt(tmp, "\n ", BLOGC_TEMPLATE_CONTENT_STMT);
+ blogc_assert_template_stmt(tmp->next, "listing_once",
+ BLOGC_TEMPLATE_BLOCK_STMT);
+ blogc_assert_template_stmt(tmp->next->next, "<ul>",
+ BLOGC_TEMPLATE_CONTENT_STMT);
+ blogc_assert_template_stmt(tmp->next->next->next, NULL,
+ BLOGC_TEMPLATE_ENDBLOCK_STMT);
+ blogc_assert_template_stmt(tmp->next->next->next->next, "\n ",
+ BLOGC_TEMPLATE_CONTENT_STMT);
+ blogc_assert_template_stmt(tmp->next->next->next->next->next,
+ "listing", BLOGC_TEMPLATE_BLOCK_STMT);
+ blogc_assert_template_stmt(tmp->next->next->next->next->next->next,
+ "<p><a href=\"", BLOGC_TEMPLATE_CONTENT_STMT);
+ blogc_assert_template_stmt(tmp->next->next->next->next->next->next->next,
+ "FILENAME", BLOGC_TEMPLATE_VARIABLE_STMT);
+ tmp = tmp->next->next->next->next->next->next->next->next;
+ blogc_assert_template_stmt(tmp, ".html\">", BLOGC_TEMPLATE_CONTENT_STMT);
+ blogc_assert_template_stmt(tmp->next, "TITLE",
+ BLOGC_TEMPLATE_VARIABLE_STMT);
+ blogc_assert_template_stmt(tmp->next->next, "</a>",
+ BLOGC_TEMPLATE_CONTENT_STMT);
+ blogc_assert_template_stmt(tmp->next->next->next, "DATE",
+ BLOGC_TEMPLATE_IFDEF_STMT);
+ blogc_assert_template_stmt(tmp->next->next->next->next, " - ",
+ BLOGC_TEMPLATE_CONTENT_STMT);
+ blogc_assert_template_stmt(tmp->next->next->next->next->next, "DATE",
+ BLOGC_TEMPLATE_VARIABLE_STMT);
+ blogc_assert_template_stmt(tmp->next->next->next->next->next->next,
+ NULL, BLOGC_TEMPLATE_ENDIF_STMT);
+ blogc_assert_template_stmt(tmp->next->next->next->next->next->next->next,
+ "</p>", BLOGC_TEMPLATE_CONTENT_STMT);
+ tmp = tmp->next->next->next->next->next->next->next->next;
+ blogc_assert_template_stmt(tmp, NULL, BLOGC_TEMPLATE_ENDBLOCK_STMT);
+ blogc_assert_template_stmt(tmp->next, "\n ",
+ BLOGC_TEMPLATE_CONTENT_STMT);
+ blogc_assert_template_stmt(tmp->next->next, "listing_once",
+ BLOGC_TEMPLATE_BLOCK_STMT);
+ blogc_assert_template_stmt(tmp->next->next->next, "</ul>",
+ BLOGC_TEMPLATE_CONTENT_STMT);
+ blogc_assert_template_stmt(tmp->next->next->next->next, NULL,
+ BLOGC_TEMPLATE_ENDBLOCK_STMT);
+ blogc_assert_template_stmt(tmp->next->next->next->next->next,
+ "\n </body>\n</html>\n", BLOGC_TEMPLATE_CONTENT_STMT);
+ assert_null(tmp->next->next->next->next->next->next);
+ blogc_template_free_stmts(stmts);
+}
+
+
+static void
+test_template_parse_ifdef_and_var_outside_block(void **state)
+{
+ const char *a =
+ "{% ifdef GUDA %}bola{% endif %}\n"
+ "{{ BOLA }}\n"
+ "{% ifndef CHUNDA %}{{ CHUNDA }}{% endif %}\n";
+ blogc_error_t *err = NULL;
+ sb_slist_t *stmts = blogc_template_parse(a, strlen(a), &err);
+ assert_null(err);
+ assert_non_null(stmts);
+ blogc_assert_template_stmt(stmts, "GUDA", BLOGC_TEMPLATE_IFDEF_STMT);
+ blogc_assert_template_stmt(stmts->next, "bola",
+ BLOGC_TEMPLATE_CONTENT_STMT);
+ blogc_assert_template_stmt(stmts->next->next, NULL,
+ BLOGC_TEMPLATE_ENDIF_STMT);
+ blogc_assert_template_stmt(stmts->next->next->next, "\n",
+ BLOGC_TEMPLATE_CONTENT_STMT);
+ blogc_assert_template_stmt(stmts->next->next->next->next, "BOLA",
+ BLOGC_TEMPLATE_VARIABLE_STMT);
+ blogc_assert_template_stmt(stmts->next->next->next->next->next, "\n",
+ BLOGC_TEMPLATE_CONTENT_STMT);
+ blogc_assert_template_stmt(stmts->next->next->next->next->next->next,
+ "CHUNDA", BLOGC_TEMPLATE_IFNDEF_STMT);
+ sb_slist_t *tmp = stmts->next->next->next->next->next->next->next;
+ blogc_assert_template_stmt(tmp, "CHUNDA", BLOGC_TEMPLATE_VARIABLE_STMT);
+ blogc_assert_template_stmt(tmp->next, NULL, BLOGC_TEMPLATE_ENDIF_STMT);
+ blogc_assert_template_stmt(tmp->next->next, "\n",
+ BLOGC_TEMPLATE_CONTENT_STMT);
+ assert_null(tmp->next->next->next);
+ blogc_template_free_stmts(stmts);
+}
+
+
+static void
+test_template_parse_nested_else(void **state)
+{
+ const char *a =
+ "{% ifdef GUDA %}\n"
+ "{% ifdef BOLA %}\n"
+ "asd\n"
+ "{% else %}\n"
+ "{% ifdef CHUNDA %}\n"
+ "qwe\n"
+ "{% else %}\n"
+ "rty\n"
+ "{% endif %}\n"
+ "{% endif %}\n"
+ "{% ifdef LOL %}\n"
+ "zxc\n"
+ "{% else %}\n"
+ "bnm\n"
+ "{% endif %}\n"
+ "{% endif %}\n";
+ blogc_error_t *err = NULL;
+ sb_slist_t *stmts = blogc_template_parse(a, strlen(a), &err);
+ assert_null(err);
+ assert_non_null(stmts);
+ blogc_assert_template_stmt(stmts, "GUDA", BLOGC_TEMPLATE_IFDEF_STMT);
+ blogc_assert_template_stmt(stmts->next, "\n", BLOGC_TEMPLATE_CONTENT_STMT);
+ blogc_assert_template_stmt(stmts->next->next, "BOLA", BLOGC_TEMPLATE_IFDEF_STMT);
+ blogc_assert_template_stmt(stmts->next->next->next, "\nasd\n",
+ BLOGC_TEMPLATE_CONTENT_STMT);
+ blogc_assert_template_stmt(stmts->next->next->next->next, NULL,
+ BLOGC_TEMPLATE_ELSE_STMT);
+ blogc_assert_template_stmt(stmts->next->next->next->next->next, "\n",
+ BLOGC_TEMPLATE_CONTENT_STMT);
+ blogc_assert_template_stmt(stmts->next->next->next->next->next->next,
+ "CHUNDA", BLOGC_TEMPLATE_IFDEF_STMT);
+ blogc_assert_template_stmt(stmts->next->next->next->next->next->next->next,
+ "\nqwe\n", BLOGC_TEMPLATE_CONTENT_STMT);
+ sb_slist_t *tmp = stmts->next->next->next->next->next->next->next->next;
+ blogc_assert_template_stmt(tmp, NULL, BLOGC_TEMPLATE_ELSE_STMT);
+ blogc_assert_template_stmt(tmp->next, "\nrty\n", BLOGC_TEMPLATE_CONTENT_STMT);
+ blogc_assert_template_stmt(tmp->next->next, NULL,
+ BLOGC_TEMPLATE_ENDIF_STMT);
+ blogc_assert_template_stmt(tmp->next->next->next, "\n",
+ BLOGC_TEMPLATE_CONTENT_STMT);
+ blogc_assert_template_stmt(tmp->next->next->next->next, NULL,
+ BLOGC_TEMPLATE_ENDIF_STMT);
+ blogc_assert_template_stmt(tmp->next->next->next->next->next, "\n",
+ BLOGC_TEMPLATE_CONTENT_STMT);
+ blogc_assert_template_stmt(tmp->next->next->next->next->next->next,
+ "LOL", BLOGC_TEMPLATE_IFDEF_STMT);
+ blogc_assert_template_stmt(tmp->next->next->next->next->next->next->next,
+ "\nzxc\n", BLOGC_TEMPLATE_CONTENT_STMT);
+ tmp = tmp->next->next->next->next->next->next->next->next;
+ blogc_assert_template_stmt(tmp, NULL, BLOGC_TEMPLATE_ELSE_STMT);
+ blogc_assert_template_stmt(tmp->next, "\nbnm\n", BLOGC_TEMPLATE_CONTENT_STMT);
+ blogc_assert_template_stmt(tmp->next->next, NULL,
+ BLOGC_TEMPLATE_ENDIF_STMT);
+ blogc_assert_template_stmt(tmp->next->next->next, "\n",
+ BLOGC_TEMPLATE_CONTENT_STMT);
+ blogc_assert_template_stmt(tmp->next->next->next->next, NULL,
+ BLOGC_TEMPLATE_ENDIF_STMT);
+ blogc_assert_template_stmt(tmp->next->next->next->next->next, "\n",
+ BLOGC_TEMPLATE_CONTENT_STMT);
+ assert_null(tmp->next->next->next->next->next->next);
+ blogc_template_free_stmts(stmts);
+}
+
+
+static void
+test_template_parse_invalid_block_start(void **state)
+{
+ const char *a = "{% ASD %}\n";
+ blogc_error_t *err = NULL;
+ sb_slist_t *stmts = blogc_template_parse(a, strlen(a), &err);
+ assert_non_null(err);
+ assert_null(stmts);
+ assert_int_equal(err->type, BLOGC_ERROR_TEMPLATE_PARSER);
+ assert_string_equal(err->msg,
+ "Invalid statement syntax. Must begin with lowercase letter.\n"
+ "Error occurred near line 1, position 4: {% ASD %}");
+ blogc_error_free(err);
+ a = "{%-- block entry %}\n";
+ err = NULL;
+ stmts = blogc_template_parse(a, strlen(a), &err);
+ assert_non_null(err);
+ assert_null(stmts);
+ assert_int_equal(err->type, BLOGC_ERROR_TEMPLATE_PARSER);
+ assert_string_equal(err->msg,
+ "Invalid statement syntax. Duplicated whitespace cleaner before statement.\n"
+ "Error occurred near line 1, position 4: {%-- block entry %}");
+ blogc_error_free(err);
+ a = "{% block entry --%}\n";
+ err = NULL;
+ stmts = blogc_template_parse(a, strlen(a), &err);
+ assert_non_null(err);
+ assert_null(stmts);
+ assert_int_equal(err->type, BLOGC_ERROR_TEMPLATE_PARSER);
+ assert_string_equal(err->msg,
+ "Invalid statement syntax. Duplicated whitespace cleaner after statement.\n"
+ "Error occurred near line 1, position 17: {% block entry --%}");
+ blogc_error_free(err);
+}
+
+
+static void
+test_template_parse_invalid_block_nested(void **state)
+{
+ const char *a =
+ "{% block entry %}\n"
+ "{% block listing %}\n";
+ blogc_error_t *err = NULL;
+ sb_slist_t *stmts = blogc_template_parse(a, strlen(a), &err);
+ assert_non_null(err);
+ assert_null(stmts);
+ assert_int_equal(err->type, BLOGC_ERROR_TEMPLATE_PARSER);
+ assert_string_equal(err->msg,
+ "Blocks can't be nested.\n"
+ "Error occurred near line 2, position 9: {% block listing %}");
+ blogc_error_free(err);
+}
+
+
+static void
+test_template_parse_invalid_foreach_nested(void **state)
+{
+ const char *a =
+ "{% foreach A %}\n"
+ "{% foreach B %}\n";
+ blogc_error_t *err = NULL;
+ sb_slist_t *stmts = blogc_template_parse(a, strlen(a), &err);
+ assert_non_null(err);
+ assert_null(stmts);
+ assert_int_equal(err->type, BLOGC_ERROR_TEMPLATE_PARSER);
+ assert_string_equal(err->msg,
+ "'foreach' statements can't be nested.\n"
+ "Error occurred near line 2, position 11: {% foreach B %}");
+ blogc_error_free(err);
+}
+
+
+static void
+test_template_parse_invalid_block_not_open(void **state)
+{
+ const char *a = "{% endblock %}\n";
+ blogc_error_t *err = NULL;
+ sb_slist_t *stmts = blogc_template_parse(a, strlen(a), &err);
+ assert_non_null(err);
+ assert_null(stmts);
+ assert_int_equal(err->type, BLOGC_ERROR_TEMPLATE_PARSER);
+ assert_string_equal(err->msg,
+ "'endblock' statement without an open 'block' statement.\n"
+ "Error occurred near line 1, position 12: {% endblock %}");
+ blogc_error_free(err);
+}
+
+
+static void
+test_template_parse_invalid_endif_not_open(void **state)
+{
+ const char *a = "{% block listing %}{% endif %}{% endblock %}\n";
+ blogc_error_t *err = NULL;
+ sb_slist_t *stmts = blogc_template_parse(a, strlen(a), &err);
+ assert_non_null(err);
+ assert_null(stmts);
+ assert_int_equal(err->type, BLOGC_ERROR_TEMPLATE_PARSER);
+ assert_string_equal(err->msg,
+ "'endif' statement without an open 'if', 'ifdef' or 'ifndef' statement.\n"
+ "Error occurred near line 1, position 28: "
+ "{% block listing %}{% endif %}{% endblock %}");
+ blogc_error_free(err);
+}
+
+
+static void
+test_template_parse_invalid_endif_not_open_inside_block(void **state)
+{
+ const char *a = "{% ifdef BOLA %}{% block listing %}{% endif %}{% endblock %}";
+ blogc_error_t *err = NULL;
+ sb_slist_t *stmts = blogc_template_parse(a, strlen(a), &err);
+ assert_non_null(err);
+ assert_null(stmts);
+ assert_int_equal(err->type, BLOGC_ERROR_TEMPLATE_PARSER);
+ assert_string_equal(err->msg,
+ "'endif' statement without an open 'if', 'ifdef' or 'ifndef' statement.\n"
+ "Error occurred near line 1, position 44: {% ifdef BOLA %}{% block "
+ "listing %}{% endif %}{% endblock %}");
+ blogc_error_free(err);
+}
+
+
+static void
+test_template_parse_invalid_else_not_open_inside_block(void **state)
+{
+ const char *a = "{% ifdef BOLA %}{% block listing %}{% else %}{% endif %}{% endblock %}";
+ blogc_error_t *err = NULL;
+ sb_slist_t *stmts = blogc_template_parse(a, strlen(a), &err);
+ assert_non_null(err);
+ assert_null(stmts);
+ assert_int_equal(err->type, BLOGC_ERROR_TEMPLATE_PARSER);
+ assert_string_equal(err->msg,
+ "'else' statement without an open 'if', 'ifdef' or 'ifndef' statement.\n"
+ "Error occurred near line 1, position 43: {% ifdef BOLA %}"
+ "{% block listing %}{% else %}{% endif %}{% endblock %}");
+ blogc_error_free(err);
+}
+
+
+static void
+test_template_parse_invalid_endforeach_not_open(void **state)
+{
+ const char *a = "{% endforeach %}\n";
+ blogc_error_t *err = NULL;
+ sb_slist_t *stmts = blogc_template_parse(a, strlen(a), &err);
+ assert_non_null(err);
+ assert_null(stmts);
+ assert_int_equal(err->type, BLOGC_ERROR_TEMPLATE_PARSER);
+ assert_string_equal(err->msg,
+ "'endforeach' statement without an open 'foreach' statement.\n"
+ "Error occurred near line 1, position 14: {% endforeach %}");
+ blogc_error_free(err);
+}
+
+
+static void
+test_template_parse_invalid_endforeach_not_open_inside_block(void **state)
+{
+ const char *a = "{% foreach TAGS %}{% block entry %}{% endforeach %}"
+ "{% endblock %}\n";
+ blogc_error_t *err = NULL;
+ sb_slist_t *stmts = blogc_template_parse(a, strlen(a), &err);
+ assert_non_null(err);
+ assert_null(stmts);
+ assert_int_equal(err->type, BLOGC_ERROR_TEMPLATE_PARSER);
+ assert_string_equal(err->msg,
+ "'endforeach' statement without an open 'foreach' statement.\n"
+ "Error occurred near line 1, position 49: {% foreach TAGS %}"
+ "{% block entry %}{% endforeach %}{% endblock %}");
+ blogc_error_free(err);
+}
+
+
+static void
+test_template_parse_invalid_endforeach_not_open_inside_block2(void **state)
+{
+ const char *a = "{% block entry %}{% foreach TAGS %}"
+ "{% endforeach %}{% endforeach %}{% endblock %}\n";
+ blogc_error_t *err = NULL;
+ sb_slist_t *stmts = blogc_template_parse(a, strlen(a), &err);
+ assert_non_null(err);
+ assert_null(stmts);
+ assert_int_equal(err->type, BLOGC_ERROR_TEMPLATE_PARSER);
+ assert_string_equal(err->msg,
+ "'endforeach' statement without an open 'foreach' statement.\n"
+ "Error occurred near line 1, position 65: {% block entry %}"
+ "{% foreach TAGS %}{% endforeach %}{% endforeach %}{% endblock %}");
+ blogc_error_free(err);
+}
+
+
+static void
+test_template_parse_invalid_endforeach_not_closed_inside_block(void **state)
+{
+ const char *a = "{% block entry %}{% foreach TAGS %}{% endblock %}"
+ "{% endforeach %}\n";
+ blogc_error_t *err = NULL;
+ sb_slist_t *stmts = blogc_template_parse(a, strlen(a), &err);
+ assert_non_null(err);
+ assert_null(stmts);
+ assert_int_equal(err->type, BLOGC_ERROR_TEMPLATE_PARSER);
+ assert_string_equal(err->msg,
+ "An open 'foreach' statement was not closed inside a 'entry' block!");
+ blogc_error_free(err);
+}
+
+
+static void
+test_template_parse_invalid_endforeach_not_closed_inside_block2(void **state)
+{
+ const char *a = "{% block entry %}{% foreach TAGS %}{% endforeach %}"
+ "{% foreach TAGS %}{% endblock %}{% endforeach %}\n";
+ blogc_error_t *err = NULL;
+ sb_slist_t *stmts = blogc_template_parse(a, strlen(a), &err);
+ assert_non_null(err);
+ assert_null(stmts);
+ assert_int_equal(err->type, BLOGC_ERROR_TEMPLATE_PARSER);
+ assert_string_equal(err->msg,
+ "An open 'foreach' statement was not closed inside a 'entry' block!");
+ blogc_error_free(err);
+}
+
+
+static void
+test_template_parse_invalid_block_name(void **state)
+{
+ const char *a = "{% chunda %}\n";
+ blogc_error_t *err = NULL;
+ sb_slist_t *stmts = blogc_template_parse(a, strlen(a), &err);
+ assert_non_null(err);
+ assert_null(stmts);
+ assert_int_equal(err->type, BLOGC_ERROR_TEMPLATE_PARSER);
+ assert_string_equal(err->msg,
+ "Invalid statement type: Allowed types are: 'block', 'endblock', 'if', "
+ "'ifdef', 'ifndef', 'else', 'endif', 'foreach' and 'endforeach'.\n"
+ "Error occurred near line 1, position 10: {% chunda %}");
+ blogc_error_free(err);
+}
+
+
+static void
+test_template_parse_invalid_block_type_start(void **state)
+{
+ const char *a = "{% block ENTRY %}\n";
+ blogc_error_t *err = NULL;
+ sb_slist_t *stmts = blogc_template_parse(a, strlen(a), &err);
+ assert_non_null(err);
+ assert_null(stmts);
+ assert_int_equal(err->type, BLOGC_ERROR_TEMPLATE_PARSER);
+ assert_string_equal(err->msg,
+ "Invalid block syntax. Must begin with lowercase letter.\n"
+ "Error occurred near line 1, position 10: {% block ENTRY %}");
+ blogc_error_free(err);
+}
+
+
+static void
+test_template_parse_invalid_block_type(void **state)
+{
+ const char *a = "{% block chunda %}\n";
+ blogc_error_t *err = NULL;
+ sb_slist_t *stmts = blogc_template_parse(a, strlen(a), &err);
+ assert_non_null(err);
+ assert_null(stmts);
+ assert_int_equal(err->type, BLOGC_ERROR_TEMPLATE_PARSER);
+ assert_string_equal(err->msg,
+ "Invalid block type. Allowed types are: 'entry', 'listing' and 'listing_once'.\n"
+ "Error occurred near line 1, position 16: {% block chunda %}");
+ blogc_error_free(err);
+}
+
+
+static void
+test_template_parse_invalid_ifdef_start(void **state)
+{
+ const char *a = "{% block entry %}{% ifdef guda %}\n";
+ blogc_error_t *err = NULL;
+ sb_slist_t *stmts = blogc_template_parse(a, strlen(a), &err);
+ assert_non_null(err);
+ assert_null(stmts);
+ assert_int_equal(err->type, BLOGC_ERROR_TEMPLATE_PARSER);
+ assert_string_equal(err->msg,
+ "Invalid variable name. Must begin with uppercase letter.\n"
+ "Error occurred near line 1, position 27: "
+ "{% block entry %}{% ifdef guda %}");
+ blogc_error_free(err);
+}
+
+
+static void
+test_template_parse_invalid_foreach_start(void **state)
+{
+ const char *a = "{% block entry %}{% foreach guda %}\n";
+ blogc_error_t *err = NULL;
+ sb_slist_t *stmts = blogc_template_parse(a, strlen(a), &err);
+ assert_non_null(err);
+ assert_null(stmts);
+ assert_int_equal(err->type, BLOGC_ERROR_TEMPLATE_PARSER);
+ assert_string_equal(err->msg,
+ "Invalid foreach variable name. Must begin with uppercase letter.\n"
+ "Error occurred near line 1, position 29: "
+ "{% block entry %}{% foreach guda %}");
+ blogc_error_free(err);
+}
+
+
+static void
+test_template_parse_invalid_ifdef_variable(void **state)
+{
+ const char *a = "{% block entry %}{% ifdef BoLA %}\n";
+ blogc_error_t *err = NULL;
+ sb_slist_t *stmts = blogc_template_parse(a, strlen(a), &err);
+ assert_non_null(err);
+ assert_null(stmts);
+ assert_int_equal(err->type, BLOGC_ERROR_TEMPLATE_PARSER);
+ assert_string_equal(err->msg,
+ "Invalid variable name. Must be uppercase letter, number or '_'.\n"
+ "Error occurred near line 1, position 28: "
+ "{% block entry %}{% ifdef BoLA %}");
+ blogc_error_free(err);
+}
+
+
+static void
+test_template_parse_invalid_ifdef_variable2(void **state)
+{
+ const char *a = "{% block entry %}{% ifdef 0123 %}\n";
+ blogc_error_t *err = NULL;
+ sb_slist_t *stmts = blogc_template_parse(a, strlen(a), &err);
+ assert_non_null(err);
+ assert_null(stmts);
+ assert_int_equal(err->type, BLOGC_ERROR_TEMPLATE_PARSER);
+ assert_string_equal(err->msg,
+ "Invalid variable name. Must begin with uppercase letter.\n"
+ "Error occurred near line 1, position 27: "
+ "{% block entry %}{% ifdef 0123 %}");
+ blogc_error_free(err);
+}
+
+
+static void
+test_template_parse_invalid_foreach_variable(void **state)
+{
+ const char *a = "{% block entry %}{% foreach BoLA %}\n";
+ blogc_error_t *err = NULL;
+ sb_slist_t *stmts = blogc_template_parse(a, strlen(a), &err);
+ assert_non_null(err);
+ assert_null(stmts);
+ assert_int_equal(err->type, BLOGC_ERROR_TEMPLATE_PARSER);
+ assert_string_equal(err->msg,
+ "Invalid foreach variable name. Must be uppercase letter, number or '_'.\n"
+ "Error occurred near line 1, position 30: "
+ "{% block entry %}{% foreach BoLA %}");
+ blogc_error_free(err);
+}
+
+
+static void
+test_template_parse_invalid_foreach_variable2(void **state)
+{
+ const char *a = "{% block entry %}{% foreach 0123 %}\n";
+ blogc_error_t *err = NULL;
+ sb_slist_t *stmts = blogc_template_parse(a, strlen(a), &err);
+ assert_non_null(err);
+ assert_null(stmts);
+ assert_int_equal(err->type, BLOGC_ERROR_TEMPLATE_PARSER);
+ assert_string_equal(err->msg,
+ "Invalid foreach variable name. Must begin with uppercase letter.\n"
+ "Error occurred near line 1, position 29: {% block entry %}"
+ "{% foreach 0123 %}");
+ blogc_error_free(err);
+}
+
+
+static void
+test_template_parse_invalid_if_operator(void **state)
+{
+ const char *a = "{% block entry %}{% if BOLA = \"asd\" %}\n";
+ blogc_error_t *err = NULL;
+ sb_slist_t *stmts = blogc_template_parse(a, strlen(a), &err);
+ assert_non_null(err);
+ assert_null(stmts);
+ assert_int_equal(err->type, BLOGC_ERROR_TEMPLATE_PARSER);
+ assert_string_equal(err->msg,
+ "Invalid 'if' operator. Must be '<', '>', '<=', '>=', '==' or '!='.\n"
+ "Error occurred near line 1, position 29: "
+ "{% block entry %}{% if BOLA = \"asd\" %}");
+ blogc_error_free(err);
+}
+
+
+static void
+test_template_parse_invalid_if_operand(void **state)
+{
+ const char *a = "{% block entry %}{% if BOLA == asd %}\n";
+ blogc_error_t *err = NULL;
+ sb_slist_t *stmts = blogc_template_parse(a, strlen(a), &err);
+ assert_non_null(err);
+ assert_null(stmts);
+ assert_int_equal(err->type, BLOGC_ERROR_TEMPLATE_PARSER);
+ assert_string_equal(err->msg,
+ "Invalid 'if' operand. Must be double-quoted static string or variable.\n"
+ "Error occurred near line 1, position 32: "
+ "{% block entry %}{% if BOLA == asd %}");
+ blogc_error_free(err);
+}
+
+
+static void
+test_template_parse_invalid_if_operand2(void **state)
+{
+ const char *a = "{% block entry %}{% if BOLA == \"asd %}\n";
+ blogc_error_t *err = NULL;
+ sb_slist_t *stmts = blogc_template_parse(a, strlen(a), &err);
+ assert_non_null(err);
+ assert_null(stmts);
+ assert_int_equal(err->type, BLOGC_ERROR_TEMPLATE_PARSER);
+ assert_string_equal(err->msg,
+ "Found an open double-quoted string.\n"
+ "Error occurred near line 1, position 32: "
+ "{% block entry %}{% if BOLA == \"asd %}");
+ blogc_error_free(err);
+}
+
+
+static void
+test_template_parse_invalid_if_operand3(void **state)
+{
+ const char *a = "{% block entry %}{% if BOLA == 0123 %}\n";
+ blogc_error_t *err = NULL;
+ sb_slist_t *stmts = blogc_template_parse(a, strlen(a), &err);
+ assert_non_null(err);
+ assert_null(stmts);
+ assert_int_equal(err->type, BLOGC_ERROR_TEMPLATE_PARSER);
+ assert_string_equal(err->msg,
+ "Invalid 'if' operand. Must be double-quoted static string or variable.\n"
+ "Error occurred near line 1, position 32: "
+ "{% block entry %}{% if BOLA == 0123 %}");
+ blogc_error_free(err);
+}
+
+
+static void
+test_template_parse_invalid_else1(void **state)
+{
+ const char *a = "{% else %}\n";
+ blogc_error_t *err = NULL;
+ sb_slist_t *stmts = blogc_template_parse(a, strlen(a), &err);
+ assert_non_null(err);
+ assert_null(stmts);
+ assert_int_equal(err->type, BLOGC_ERROR_TEMPLATE_PARSER);
+ assert_string_equal(err->msg,
+ "'else' statement without an open 'if', 'ifdef' or 'ifndef' statement.\n"
+ "Error occurred near line 1, position 8: {% else %}");
+ blogc_error_free(err);
+}
+
+
+static void
+test_template_parse_invalid_else2(void **state)
+{
+ const char *a = "{% if BOLA == \"123\" %}{% if GUDA == \"1\" %}{% else %}{% else %}\n";
+ blogc_error_t *err = NULL;
+ sb_slist_t *stmts = blogc_template_parse(a, strlen(a), &err);
+ assert_non_null(err);
+ assert_null(stmts);
+ assert_int_equal(err->type, BLOGC_ERROR_TEMPLATE_PARSER);
+ assert_string_equal(err->msg,
+ "More than one 'else' statement for an open 'if', 'ifdef' or 'ifndef' "
+ "statement.\nError occurred near line 1, position 60: {% if BOLA == \"123\" "
+ "%}{% if GUDA == \"1\" %}{% else %}{% else %}");
+ blogc_error_free(err);
+}
+
+
+static void
+test_template_parse_invalid_else3(void **state)
+{
+ const char *a =
+ "{% if BOLA == \"123\" %}\n"
+ "{% if GUDA == \"1\" %}\n"
+ "{% else %}\n"
+ "asd\n"
+ "{% endif %}\n"
+ "{% else %}\n"
+ "{% else %}\n";
+ blogc_error_t *err = NULL;
+ sb_slist_t *stmts = blogc_template_parse(a, strlen(a), &err);
+ assert_non_null(err);
+ assert_null(stmts);
+ assert_int_equal(err->type, BLOGC_ERROR_TEMPLATE_PARSER);
+ assert_string_equal(err->msg,
+ "More than one 'else' statement for an open 'if', 'ifdef' or 'ifndef' "
+ "statement.\nError occurred near line 7, position 8: {% else %}");
+ blogc_error_free(err);
+}
+
+
+static void
+test_template_parse_invalid_block_end(void **state)
+{
+ const char *a = "{% block entry }}\n";
+ blogc_error_t *err = NULL;
+ sb_slist_t *stmts = blogc_template_parse(a, strlen(a), &err);
+ assert_non_null(err);
+ assert_null(stmts);
+ assert_int_equal(err->type, BLOGC_ERROR_TEMPLATE_PARSER);
+ assert_string_equal(err->msg,
+ "Invalid statement syntax. Must end with '%}'.\n"
+ "Error occurred near line 1, position 16: {% block entry }}");
+ blogc_error_free(err);
+}
+
+
+static void
+test_template_parse_invalid_variable_name(void **state)
+{
+ const char *a = "{% block entry %}{{ bola }}{% endblock %}\n";
+ blogc_error_t *err = NULL;
+ sb_slist_t *stmts = blogc_template_parse(a, strlen(a), &err);
+ assert_non_null(err);
+ assert_null(stmts);
+ assert_int_equal(err->type, BLOGC_ERROR_TEMPLATE_PARSER);
+ assert_string_equal(err->msg,
+ "Invalid variable name. Must begin with uppercase letter.\n"
+ "Error occurred near line 1, position 21: "
+ "{% block entry %}{{ bola }}{% endblock %}");
+ blogc_error_free(err);
+}
+
+
+static void
+test_template_parse_invalid_variable_name2(void **state)
+{
+ const char *a = "{% block entry %}{{ Bola }}{% endblock %}\n";
+ blogc_error_t *err = NULL;
+ sb_slist_t *stmts = blogc_template_parse(a, strlen(a), &err);
+ assert_non_null(err);
+ assert_null(stmts);
+ assert_int_equal(err->type, BLOGC_ERROR_TEMPLATE_PARSER);
+ assert_string_equal(err->msg,
+ "Invalid variable name. Must be uppercase letter, number or '_'.\n"
+ "Error occurred near line 1, position 22: "
+ "{% block entry %}{{ Bola }}{% endblock %}");
+ blogc_error_free(err);
+}
+
+
+static void
+test_template_parse_invalid_variable_name3(void **state)
+{
+ const char *a = "{% block entry %}{{ 0123 }}{% endblock %}\n";
+ blogc_error_t *err = NULL;
+ sb_slist_t *stmts = blogc_template_parse(a, strlen(a), &err);
+ assert_non_null(err);
+ assert_null(stmts);
+ assert_int_equal(err->type, BLOGC_ERROR_TEMPLATE_PARSER);
+ assert_string_equal(err->msg,
+ "Invalid variable name. Must begin with uppercase letter.\n"
+ "Error occurred near line 1, position 21: {% block entry %}{{ 0123 }}"
+ "{% endblock %}");
+ blogc_error_free(err);
+}
+
+
+static void
+test_template_parse_invalid_variable_end(void **state)
+{
+ const char *a = "{% block entry %}{{ BOLA %}{% endblock %}\n";
+ blogc_error_t *err = NULL;
+ sb_slist_t *stmts = blogc_template_parse(a, strlen(a), &err);
+ assert_non_null(err);
+ assert_null(stmts);
+ assert_int_equal(err->type, BLOGC_ERROR_TEMPLATE_PARSER);
+ assert_string_equal(err->msg,
+ "Invalid statement syntax. Must end with '}}'.\n"
+ "Error occurred near line 1, position 26: "
+ "{% block entry %}{{ BOLA %}{% endblock %}");
+ blogc_error_free(err);
+}
+
+
+static void
+test_template_parse_invalid_close(void **state)
+{
+ const char *a = "{% block entry %%\n";
+ blogc_error_t *err = NULL;
+ sb_slist_t *stmts = blogc_template_parse(a, strlen(a), &err);
+ assert_non_null(err);
+ assert_null(stmts);
+ assert_int_equal(err->type, BLOGC_ERROR_TEMPLATE_PARSER);
+ assert_string_equal(err->msg,
+ "Invalid statement syntax. Must end with '}'.\n"
+ "Error occurred near line 1, position 17: {% block entry %%");
+ blogc_error_free(err);
+}
+
+
+static void
+test_template_parse_invalid_close2(void **state)
+{
+ const char *a = "{% block entry %}{{ BOLA }%{% endblock %}\n";
+ blogc_error_t *err = NULL;
+ sb_slist_t *stmts = blogc_template_parse(a, strlen(a), &err);
+ assert_non_null(err);
+ assert_null(stmts);
+ assert_int_equal(err->type, BLOGC_ERROR_TEMPLATE_PARSER);
+ assert_string_equal(err->msg,
+ "Invalid statement syntax. Must end with '}'.\n"
+ "Error occurred near line 1, position 27: "
+ "{% block entry %}{{ BOLA }%{% endblock %}");
+ blogc_error_free(err);
+}
+
+
+static void
+test_template_parse_invalid_endif_not_closed(void **state)
+{
+ const char *a = "{% block entry %}{% endblock %}{% ifdef BOLA %}\n";
+ blogc_error_t *err = NULL;
+ sb_slist_t *stmts = blogc_template_parse(a, strlen(a), &err);
+ assert_non_null(err);
+ assert_null(stmts);
+ assert_int_equal(err->type, BLOGC_ERROR_TEMPLATE_PARSER);
+ assert_string_equal(err->msg, "1 open 'if', 'ifdef' and/or 'ifndef' statements "
+ "were not closed!");
+ blogc_error_free(err);
+}
+
+
+static void
+test_template_parse_invalid_endif_not_closed_inside_block(void **state)
+{
+ const char *a = "{% block listing %}{% ifdef BOLA %}{% endblock %}{% endif %}";
+ blogc_error_t *err = NULL;
+ sb_slist_t *stmts = blogc_template_parse(a, strlen(a), &err);
+ assert_non_null(err);
+ assert_null(stmts);
+ assert_int_equal(err->type, BLOGC_ERROR_TEMPLATE_PARSER);
+ assert_string_equal(err->msg,
+ "1 open 'if', 'ifdef' and/or 'ifndef' statements were not closed inside "
+ "a 'listing' block!");
+ blogc_error_free(err);
+}
+
+
+static void
+test_template_parse_invalid_else_not_closed_inside_block(void **state)
+{
+ const char *a = "{% block listing %}{% ifdef BOLA %}{% else %}{% endblock %}{% endif %}";
+ blogc_error_t *err = NULL;
+ sb_slist_t *stmts = blogc_template_parse(a, strlen(a), &err);
+ assert_non_null(err);
+ assert_null(stmts);
+ assert_int_equal(err->type, BLOGC_ERROR_TEMPLATE_PARSER);
+ assert_string_equal(err->msg,
+ "1 open 'if', 'ifdef' and/or 'ifndef' statements were not closed inside "
+ "a 'listing' block!");
+ blogc_error_free(err);
+}
+
+
+static void
+test_template_parse_invalid_block_not_closed(void **state)
+{
+ const char *a = "{% block entry %}\n";
+ blogc_error_t *err = NULL;
+ sb_slist_t *stmts = blogc_template_parse(a, strlen(a), &err);
+ assert_non_null(err);
+ assert_null(stmts);
+ assert_int_equal(err->type, BLOGC_ERROR_TEMPLATE_PARSER);
+ assert_string_equal(err->msg, "An open block was not closed!");
+ blogc_error_free(err);
+}
+
+
+static void
+test_template_parse_invalid_foreach_not_closed(void **state)
+{
+ const char *a = "{% foreach ASD %}\n";
+ blogc_error_t *err = NULL;
+ sb_slist_t *stmts = blogc_template_parse(a, strlen(a), &err);
+ assert_non_null(err);
+ assert_null(stmts);
+ assert_int_equal(err->type, BLOGC_ERROR_TEMPLATE_PARSER);
+ assert_string_equal(err->msg, "An open 'foreach' statement was not closed!");
+ blogc_error_free(err);
+}
+
+
+int
+main(void)
+{
+ const UnitTest tests[] = {
+ unit_test(test_template_parse),
+ unit_test(test_template_parse_crlf),
+ unit_test(test_template_parse_html),
+ unit_test(test_template_parse_ifdef_and_var_outside_block),
+ unit_test(test_template_parse_nested_else),
+ unit_test(test_template_parse_invalid_block_start),
+ unit_test(test_template_parse_invalid_block_nested),
+ unit_test(test_template_parse_invalid_foreach_nested),
+ unit_test(test_template_parse_invalid_block_not_open),
+ unit_test(test_template_parse_invalid_endif_not_open),
+ unit_test(test_template_parse_invalid_endif_not_open_inside_block),
+ unit_test(test_template_parse_invalid_else_not_open_inside_block),
+ unit_test(test_template_parse_invalid_endforeach_not_open),
+ unit_test(test_template_parse_invalid_endforeach_not_open_inside_block),
+ unit_test(test_template_parse_invalid_endforeach_not_open_inside_block2),
+ unit_test(test_template_parse_invalid_endforeach_not_closed_inside_block),
+ unit_test(test_template_parse_invalid_endforeach_not_closed_inside_block2),
+ unit_test(test_template_parse_invalid_block_name),
+ unit_test(test_template_parse_invalid_block_type_start),
+ unit_test(test_template_parse_invalid_block_type),
+ unit_test(test_template_parse_invalid_ifdef_start),
+ unit_test(test_template_parse_invalid_foreach_start),
+ unit_test(test_template_parse_invalid_ifdef_variable),
+ unit_test(test_template_parse_invalid_ifdef_variable2),
+ unit_test(test_template_parse_invalid_foreach_variable),
+ unit_test(test_template_parse_invalid_foreach_variable2),
+ unit_test(test_template_parse_invalid_if_operator),
+ unit_test(test_template_parse_invalid_if_operand),
+ unit_test(test_template_parse_invalid_if_operand2),
+ unit_test(test_template_parse_invalid_if_operand3),
+ unit_test(test_template_parse_invalid_else1),
+ unit_test(test_template_parse_invalid_else2),
+ unit_test(test_template_parse_invalid_else3),
+ unit_test(test_template_parse_invalid_block_end),
+ unit_test(test_template_parse_invalid_variable_name),
+ unit_test(test_template_parse_invalid_variable_name2),
+ unit_test(test_template_parse_invalid_variable_name3),
+ unit_test(test_template_parse_invalid_variable_end),
+ unit_test(test_template_parse_invalid_close),
+ unit_test(test_template_parse_invalid_close2),
+ unit_test(test_template_parse_invalid_endif_not_closed),
+ unit_test(test_template_parse_invalid_endif_not_closed_inside_block),
+ unit_test(test_template_parse_invalid_else_not_closed_inside_block),
+ unit_test(test_template_parse_invalid_block_not_closed),
+ unit_test(test_template_parse_invalid_foreach_not_closed),
+ };
+ return run_tests(tests);
+}
diff --git a/tests/check_utf8.c b/tests/check_utf8.c
new file mode 100644
index 0000000..e7be61e
--- /dev/null
+++ b/tests/check_utf8.c
@@ -0,0 +1,101 @@
+/*
+ * blogc: A blog compiler.
+ * Copyright (C) 2015-2016 Rafael G. Martins <rafael@rafaelmartins.eng.br>
+ *
+ * This program can be distributed under the terms of the BSD License.
+ * See the file LICENSE.
+ */
+
+#include <stdarg.h>
+#include <stddef.h>
+#include <setjmp.h>
+#include <cmocka.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <string.h>
+#include "../src/utf8.h"
+#include "../src/utils.h"
+
+// this file MUST be ASCII
+
+
+static void
+test_utf8_valid(void **state)
+{
+ const char *c = "<a href=\"{{ BASE_URL }}/page/{{ PREVIOUS_PAGE }}/\">"
+ "\xc2\xab Newer posts</a>";
+ assert_true(blogc_utf8_validate((uint8_t*) c, strlen(c)));
+ const uint8_t d[3] = {0xe2, 0x82, 0xac}; // euro sign
+ assert_true(blogc_utf8_validate(d, 3));
+ const uint8_t e[3] = {0xef, 0xbb, 0xbf}; // utf-8 bom
+ assert_true(blogc_utf8_validate(e, 3));
+}
+
+
+static void
+test_utf8_invalid(void **state)
+{
+ const uint8_t c[4] = {0xff, 0xfe, 0xac, 0x20}; // utf-16
+ assert_false(blogc_utf8_validate(c, 4));
+ const uint8_t d[8] = {0xff, 0xfe, 0x00, 0x00, 0xac, 0x20, 0x00, 0x00}; // utf-32
+ assert_false(blogc_utf8_validate(d, 8));
+}
+
+
+static void
+test_utf8_valid_str(void **state)
+{
+ sb_string_t *s = sb_string_new();
+ sb_string_append(s,
+ "<a href=\"{{ BASE_URL }}/page/{{ PREVIOUS_PAGE }}/\">\xc2\xab Newer "
+ "posts</a>");
+ assert_true(blogc_utf8_validate_str(s));
+ sb_string_free(s, true);
+ s = sb_string_new();
+ sb_string_append(s, "\xe2\x82\xac");
+ assert_true(blogc_utf8_validate_str(s));
+ sb_string_free(s, true);
+}
+
+
+static void
+test_utf8_invalid_str(void **state)
+{
+ sb_string_t *s = sb_string_new();
+ sb_string_append(s, "\xff\xfe\xac\x20"); // utf-16
+ assert_false(blogc_utf8_validate_str(s));
+ sb_string_free(s, true);
+ s = sb_string_new();
+ sb_string_append(s, "\xff\xfe\x00\x00\xac\x20\x00\x00"); // utf-32
+ assert_false(blogc_utf8_validate_str(s));
+ sb_string_free(s, true);
+}
+
+
+static void
+test_utf8_skip_bom(void **state)
+{
+ const uint8_t c[4] = {0xef, 0xbb, 0xbf, 0};
+ assert_int_equal(blogc_utf8_skip_bom(c, 2), 0);
+ assert_int_equal(blogc_utf8_skip_bom(c, 3), 3);
+ assert_string_equal(c + 3, "");
+ const uint8_t d[8] = {0xef, 0xbb, 0xbf, 'b', 'o', 'l', 'a', 0};
+ assert_int_equal(blogc_utf8_skip_bom(d, 7), 3);
+ assert_string_equal(d + 3, "bola");
+ const uint8_t e[5] = "bola";
+ assert_int_equal(blogc_utf8_skip_bom(e, 4), 0);
+}
+
+
+int
+main(void)
+{
+ const UnitTest tests[] = {
+ unit_test(test_utf8_valid),
+ unit_test(test_utf8_invalid),
+ unit_test(test_utf8_valid_str),
+ unit_test(test_utf8_invalid_str),
+ unit_test(test_utf8_skip_bom),
+ };
+ return run_tests(tests);
+}
diff --git a/tests/common/check_utils.c b/tests/check_utils.c
index 20e6891..1750aa2 100644
--- a/tests/common/check_utils.c
+++ b/tests/check_utils.c
@@ -1,6 +1,6 @@
/*
* blogc: A blog compiler.
- * Copyright (C) 2014-2020 Rafael G. Martins <rafael@rafaelmartins.eng.br>
+ * Copyright (C) 2014-2016 Rafael G. Martins <rafael@rafaelmartins.eng.br>
*
* This program can be distributed under the terms of the BSD License.
* See the file LICENSE.
@@ -12,99 +12,58 @@
#include <cmocka.h>
#include <stdbool.h>
#include <stdlib.h>
-#include "../../src/common/utils.h"
+#include "../src/utils.h"
-#define BC_STRING_CHUNK_SIZE 128
+#define SB_STRING_CHUNK_SIZE 128
static void
test_slist_append(void **state)
{
- bc_slist_t *l = NULL;
- l = bc_slist_append(l, (void*) bc_strdup("bola"));
+ sb_slist_t *l = NULL;
+ l = sb_slist_append(l, (void*) sb_strdup("bola"));
assert_non_null(l);
assert_string_equal(l->data, "bola");
assert_null(l->next);
- l = bc_slist_append(l, (void*) bc_strdup("guda"));
+ l = sb_slist_append(l, (void*) sb_strdup("guda"));
assert_non_null(l);
assert_string_equal(l->data, "bola");
assert_non_null(l->next);
assert_string_equal(l->next->data, "guda");
assert_null(l->next->next);
- bc_slist_free_full(l, free);
+ sb_slist_free_full(l, free);
}
static void
test_slist_prepend(void **state)
{
- bc_slist_t *l = NULL;
- l = bc_slist_prepend(l, (void*) bc_strdup("bola"));
+ sb_slist_t *l = NULL;
+ l = sb_slist_prepend(l, (void*) sb_strdup("bola"));
assert_non_null(l);
assert_string_equal(l->data, "bola");
assert_null(l->next);
- l = bc_slist_prepend(l, (void*) bc_strdup("guda"));
+ l = sb_slist_prepend(l, (void*) sb_strdup("guda"));
assert_non_null(l);
assert_string_equal(l->data, "guda");
assert_non_null(l->next);
assert_string_equal(l->next->data, "bola");
assert_null(l->next->next);
- bc_slist_free_full(l, free);
-}
-
-
-static void
-test_slist_append_list(void **state)
-{
- assert_null(bc_slist_append_list(NULL, NULL));
-
- bc_slist_t *l = NULL;
- l = bc_slist_append(l, (void*) bc_strdup("bola"));
- l = bc_slist_append(l, (void*) bc_strdup("guda"));
-
- bc_slist_t *t = bc_slist_append_list(l, NULL);
- assert_non_null(t);
- assert_string_equal(t->data, "bola");
- assert_non_null(t->next);
- assert_string_equal(t->next->data, "guda");
- assert_null(t->next->next);
-
- t = bc_slist_append_list(NULL, l);
- assert_non_null(t);
- assert_string_equal(t->data, "bola");
- assert_non_null(t->next);
- assert_string_equal(t->next->data, "guda");
- assert_null(t->next->next);
-
- bc_slist_t *n = NULL;
- n = bc_slist_append(n, (void*) bc_strdup("chunda"));
- n = bc_slist_append(n, (void*) bc_strdup("asd"));
-
- t = bc_slist_append_list(l, n);
- assert_non_null(t);
- assert_string_equal(t->data, "bola");
- assert_non_null(t->next);
- assert_string_equal(t->next->data, "guda");
- assert_non_null(t->next->next);
- assert_string_equal(t->next->next->data, "chunda");
- assert_non_null(t->next->next->next);
- assert_string_equal(t->next->next->next->data, "asd");
- assert_null(t->next->next->next->next);
- bc_slist_free_full(t, free);
+ sb_slist_free_full(l, free);
}
static void
test_slist_free(void **state)
{
- bc_slist_t *l = NULL;
- char *t1 = bc_strdup("bola");
- char *t2 = bc_strdup("guda");
- char *t3 = bc_strdup("chunda");
- l = bc_slist_append(l, (void*) t1);
- l = bc_slist_append(l, (void*) t2);
- l = bc_slist_append(l, (void*) t3);
- bc_slist_free(l);
+ sb_slist_t *l = NULL;
+ char *t1 = sb_strdup("bola");
+ char *t2 = sb_strdup("guda");
+ char *t3 = sb_strdup("chunda");
+ l = sb_slist_append(l, (void*) t1);
+ l = sb_slist_append(l, (void*) t2);
+ l = sb_slist_append(l, (void*) t3);
+ sb_slist_free(l);
assert_string_equal(t1, "bola");
assert_string_equal(t2, "guda");
assert_string_equal(t3, "chunda");
@@ -117,23 +76,23 @@ test_slist_free(void **state)
static void
test_slist_length(void **state)
{
- bc_slist_t *l = NULL;
- l = bc_slist_append(l, (void*) bc_strdup("bola"));
- l = bc_slist_append(l, (void*) bc_strdup("guda"));
- l = bc_slist_append(l, (void*) bc_strdup("chunda"));
- assert_int_equal(bc_slist_length(l), 3);
- bc_slist_free_full(l, free);
- assert_int_equal(bc_slist_length(NULL), 0);
+ sb_slist_t *l = NULL;
+ l = sb_slist_append(l, (void*) sb_strdup("bola"));
+ l = sb_slist_append(l, (void*) sb_strdup("guda"));
+ l = sb_slist_append(l, (void*) sb_strdup("chunda"));
+ assert_int_equal(sb_slist_length(l), 3);
+ sb_slist_free_full(l, free);
+ assert_int_equal(sb_slist_length(NULL), 0);
}
static void
test_strdup(void **state)
{
- char *str = bc_strdup("bola");
+ char *str = sb_strdup("bola");
assert_string_equal(str, "bola");
free(str);
- str = bc_strdup(NULL);
+ str = sb_strdup(NULL);
assert_null(str);
}
@@ -141,16 +100,16 @@ test_strdup(void **state)
static void
test_strndup(void **state)
{
- char *str = bc_strndup("bolaguda", 4);
+ char *str = sb_strndup("bolaguda", 4);
assert_string_equal(str, "bola");
free(str);
- str = bc_strndup("bolaguda", 30);
+ str = sb_strndup("bolaguda", 30);
assert_string_equal(str, "bolaguda");
free(str);
- str = bc_strndup("bolaguda", 8);
+ str = sb_strndup("bolaguda", 8);
assert_string_equal(str, "bolaguda");
free(str);
- str = bc_strdup(NULL);
+ str = sb_strdup(NULL);
assert_null(str);
}
@@ -158,11 +117,10 @@ test_strndup(void **state)
static void
test_strdup_printf(void **state)
{
- assert_null(bc_strdup_printf(NULL));
- char *str = bc_strdup_printf("bola");
+ char *str = sb_strdup_printf("bola");
assert_string_equal(str, "bola");
free(str);
- str = bc_strdup_printf("bola, %s", "guda");
+ str = sb_strdup_printf("bola, %s", "guda");
assert_string_equal(str, "bola, guda");
free(str);
}
@@ -171,166 +129,141 @@ test_strdup_printf(void **state)
static void
test_str_starts_with(void **state)
{
- assert_true(bc_str_starts_with("bolaguda", "bola"));
- assert_true(bc_str_starts_with("bola", "bola"));
- assert_false(bc_str_starts_with("gudabola", "bola"));
- assert_false(bc_str_starts_with("guda", "bola"));
- assert_false(bc_str_starts_with("bola", "bolaguda"));
+ assert_true(sb_str_starts_with("bolaguda", "bola"));
+ assert_true(sb_str_starts_with("bola", "bola"));
+ assert_false(sb_str_starts_with("gudabola", "bola"));
+ assert_false(sb_str_starts_with("guda", "bola"));
+ assert_false(sb_str_starts_with("bola", "bolaguda"));
}
static void
test_str_ends_with(void **state)
{
- assert_true(bc_str_ends_with("bolaguda", "guda"));
- assert_true(bc_str_ends_with("bola", "bola"));
- assert_false(bc_str_ends_with("gudabola", "guda"));
- assert_false(bc_str_ends_with("guda", "bola"));
- assert_false(bc_str_ends_with("bola", "gudabola"));
+ assert_true(sb_str_ends_with("bolaguda", "guda"));
+ assert_true(sb_str_ends_with("bola", "bola"));
+ assert_false(sb_str_ends_with("gudabola", "guda"));
+ assert_false(sb_str_ends_with("guda", "bola"));
+ assert_false(sb_str_ends_with("bola", "gudabola"));
}
static void
test_str_lstrip(void **state)
{
- char *str = bc_strdup(" \tbola\n \t");
- assert_string_equal(bc_str_lstrip(str), "bola\n \t");
+ char *str = sb_strdup(" \tbola\n \t");
+ assert_string_equal(sb_str_lstrip(str), "bola\n \t");
free(str);
- str = bc_strdup("guda");
- assert_string_equal(bc_str_lstrip(str), "guda");
+ str = sb_strdup("guda");
+ assert_string_equal(sb_str_lstrip(str), "guda");
free(str);
- str = bc_strdup("\n");
- assert_string_equal(bc_str_lstrip(str), "");
+ str = sb_strdup("\n");
+ assert_string_equal(sb_str_lstrip(str), "");
free(str);
- str = bc_strdup("\t \n");
- assert_string_equal(bc_str_lstrip(str), "");
+ str = sb_strdup("\t \n");
+ assert_string_equal(sb_str_lstrip(str), "");
free(str);
- str = bc_strdup("");
- assert_string_equal(bc_str_lstrip(str), "");
+ str = sb_strdup("");
+ assert_string_equal(sb_str_lstrip(str), "");
free(str);
- assert_null(bc_str_lstrip(NULL));
+ assert_null(sb_str_lstrip(NULL));
}
static void
test_str_rstrip(void **state)
{
- char *str = bc_strdup(" \tbola\n \t");
- assert_string_equal(bc_str_rstrip(str), " \tbola");
+ char *str = sb_strdup(" \tbola\n \t");
+ assert_string_equal(sb_str_rstrip(str), " \tbola");
free(str);
- str = bc_strdup("guda");
- assert_string_equal(bc_str_rstrip(str), "guda");
+ str = sb_strdup("guda");
+ assert_string_equal(sb_str_rstrip(str), "guda");
free(str);
- str = bc_strdup("\n");
- assert_string_equal(bc_str_rstrip(str), "");
+ str = sb_strdup("\n");
+ assert_string_equal(sb_str_rstrip(str), "");
free(str);
- str = bc_strdup("\t \n");
- assert_string_equal(bc_str_rstrip(str), "");
+ str = sb_strdup("\t \n");
+ assert_string_equal(sb_str_rstrip(str), "");
free(str);
- str = bc_strdup("");
- assert_string_equal(bc_str_rstrip(str), "");
+ str = sb_strdup("");
+ assert_string_equal(sb_str_rstrip(str), "");
free(str);
- assert_null(bc_str_rstrip(NULL));
+ assert_null(sb_str_rstrip(NULL));
}
static void
test_str_strip(void **state)
{
- char *str = bc_strdup(" \tbola\n \t");
- assert_string_equal(bc_str_strip(str), "bola");
+ char *str = sb_strdup(" \tbola\n \t");
+ assert_string_equal(sb_str_strip(str), "bola");
free(str);
- str = bc_strdup("guda");
- assert_string_equal(bc_str_strip(str), "guda");
+ str = sb_strdup("guda");
+ assert_string_equal(sb_str_strip(str), "guda");
free(str);
- str = bc_strdup("\n");
- assert_string_equal(bc_str_strip(str), "");
+ str = sb_strdup("\n");
+ assert_string_equal(sb_str_strip(str), "");
free(str);
- str = bc_strdup("\t \n");
- assert_string_equal(bc_str_strip(str), "");
+ str = sb_strdup("\t \n");
+ assert_string_equal(sb_str_strip(str), "");
free(str);
- str = bc_strdup("");
- assert_string_equal(bc_str_strip(str), "");
+ str = sb_strdup("");
+ assert_string_equal(sb_str_strip(str), "");
free(str);
- assert_null(bc_str_strip(NULL));
+ assert_null(sb_str_strip(NULL));
}
static void
test_str_split(void **state)
{
- char **strv = bc_str_split("bola:guda:chunda", ':', 0);
+ char **strv = sb_str_split("bola:guda:chunda", ':', 0);
assert_string_equal(strv[0], "bola");
assert_string_equal(strv[1], "guda");
assert_string_equal(strv[2], "chunda");
assert_null(strv[3]);
- bc_strv_free(strv);
- strv = bc_str_split("bola:guda:chunda", ':', 2);
+ sb_strv_free(strv);
+ strv = sb_str_split("bola:guda:chunda", ':', 2);
assert_string_equal(strv[0], "bola");
assert_string_equal(strv[1], "guda:chunda");
assert_null(strv[2]);
- bc_strv_free(strv);
- strv = bc_str_split("bola:guda:chunda", ':', 1);
+ sb_strv_free(strv);
+ strv = sb_str_split("bola:guda:chunda", ':', 1);
assert_string_equal(strv[0], "bola:guda:chunda");
assert_null(strv[1]);
- bc_strv_free(strv);
- strv = bc_str_split("", ':', 1);
+ sb_strv_free(strv);
+ strv = sb_str_split("", ':', 1);
assert_null(strv[0]);
- bc_strv_free(strv);
- assert_null(bc_str_split(NULL, ':', 0));
+ sb_strv_free(strv);
+ assert_null(sb_str_split(NULL, ':', 0));
}
static void
test_str_replace(void **state)
{
- char *str = bc_str_replace("bolao", 'o', "zaz");
+ char *str = sb_str_replace("bolao", 'o', "zaz");
assert_string_equal(str, "bzazlazaz");
free(str);
- str = bc_str_replace("bolao", 'b', "zaz");
+ str = sb_str_replace("bolao", 'b', "zaz");
assert_string_equal(str, "zazolao");
free(str);
- str = bc_str_replace("bolao", 'b', NULL);
+ str = sb_str_replace("bolao", 'b', NULL);
assert_string_equal(str, "bolao");
free(str);
- assert_null(bc_str_replace(NULL, 'b', "zaz"));
+ assert_null(sb_str_replace(NULL, 'b', "zaz"));
}
static void
test_str_find(void **state)
{
- assert_null(bc_str_find(NULL, 'c'));
- assert_string_equal(bc_str_find("bola", 'l'), "la");
- assert_string_equal(bc_str_find("bo\\lalala", 'l'), "lala");
- assert_string_equal(bc_str_find("bola", '\0'), "");
- assert_null(bc_str_find("bola", 'g'));
- assert_null(bc_str_find("bo\\la", 'l'));
-}
-
-
-static void
-test_str_to_bool(void **state)
-{
- assert_false(bc_str_to_bool(NULL));
- assert_true(bc_str_to_bool("1"));
- assert_true(bc_str_to_bool("y"));
- assert_true(bc_str_to_bool("Y"));
- assert_true(bc_str_to_bool("yes"));
- assert_true(bc_str_to_bool("YES"));
- assert_true(bc_str_to_bool("true"));
- assert_true(bc_str_to_bool("TRUE"));
- assert_true(bc_str_to_bool("on"));
- assert_true(bc_str_to_bool("ON"));
- assert_false(bc_str_to_bool("0"));
- assert_false(bc_str_to_bool("n"));
- assert_false(bc_str_to_bool("N"));
- assert_false(bc_str_to_bool("no"));
- assert_false(bc_str_to_bool("NO"));
- assert_false(bc_str_to_bool("false"));
- assert_false(bc_str_to_bool("FALSE"));
- assert_false(bc_str_to_bool("off"));
- assert_false(bc_str_to_bool("OFF"));
+ assert_null(sb_str_find(NULL, 'c'));
+ assert_string_equal(sb_str_find("bola", 'l'), "la");
+ assert_string_equal(sb_str_find("bo\\lalala", 'l'), "lala");
+ assert_string_equal(sb_str_find("bola", '\0'), "");
+ assert_null(sb_str_find("bola", 'g'));
+ assert_null(sb_str_find("bo\\la", 'l'));
}
@@ -338,16 +271,16 @@ static void
test_strv_join(void **state)
{
char *pieces[] = {"guda","bola", "chunda", NULL};
- char *str = bc_strv_join(pieces, ":");
+ char *str = sb_strv_join(pieces, ":");
assert_string_equal(str, "guda:bola:chunda");
free(str);
char *pieces2[] = {NULL};
- str = bc_strv_join(pieces2, ":");
+ str = sb_strv_join(pieces2, ":");
assert_string_equal(str, "");
free(str);
- assert_null(bc_strv_join(pieces, NULL));
- assert_null(bc_strv_join(NULL, ":"));
- assert_null(bc_strv_join(NULL, NULL));
+ assert_null(sb_strv_join(pieces, NULL));
+ assert_null(sb_strv_join(NULL, ":"));
+ assert_null(sb_strv_join(NULL, NULL));
}
@@ -355,88 +288,88 @@ static void
test_strv_length(void **state)
{
char *pieces[] = {"guda","bola", "chunda", NULL};
- assert_int_equal(bc_strv_length(pieces), 3);
+ assert_int_equal(sb_strv_length(pieces), 3);
char *pieces2[] = {NULL};
- assert_int_equal(bc_strv_length(pieces2), 0);
- assert_int_equal(bc_strv_length(NULL), 0);
+ assert_int_equal(sb_strv_length(pieces2), 0);
+ assert_int_equal(sb_strv_length(NULL), 0);
}
static void
test_string_new(void **state)
{
- bc_string_t *str = bc_string_new();
+ sb_string_t *str = sb_string_new();
assert_non_null(str);
assert_string_equal(str->str, "");
assert_int_equal(str->len, 0);
- assert_int_equal(str->allocated_len, BC_STRING_CHUNK_SIZE);
- assert_null(bc_string_free(str, true));
+ assert_int_equal(str->allocated_len, SB_STRING_CHUNK_SIZE);
+ assert_null(sb_string_free(str, true));
}
static void
test_string_free(void **state)
{
- bc_string_t *str = bc_string_new();
+ sb_string_t *str = sb_string_new();
free(str->str);
- str->str = bc_strdup("bola");
+ str->str = sb_strdup("bola");
str->len = 4;
- str->allocated_len = BC_STRING_CHUNK_SIZE;
- char *tmp = bc_string_free(str, false);
+ str->allocated_len = SB_STRING_CHUNK_SIZE;
+ char *tmp = sb_string_free(str, false);
assert_string_equal(tmp, "bola");
free(tmp);
- assert_null(bc_string_free(NULL, false));
+ assert_null(sb_string_free(NULL, false));
}
static void
test_string_dup(void **state)
{
- bc_string_t *str = bc_string_new();
+ sb_string_t *str = sb_string_new();
free(str->str);
- str->str = bc_strdup("bola");
+ str->str = sb_strdup("bola");
str->len = 4;
- str->allocated_len = BC_STRING_CHUNK_SIZE;
- bc_string_t *new = bc_string_dup(str);
+ str->allocated_len = SB_STRING_CHUNK_SIZE;
+ sb_string_t *new = sb_string_dup(str);
assert_non_null(new);
assert_string_equal(new->str, "bola");
assert_int_equal(new->len, 4);
- assert_int_equal(new->allocated_len, BC_STRING_CHUNK_SIZE);
- assert_null(bc_string_free(new, true));
- assert_null(bc_string_free(str, true));
- assert_null(bc_string_dup(NULL));
+ assert_int_equal(new->allocated_len, SB_STRING_CHUNK_SIZE);
+ assert_null(sb_string_free(new, true));
+ assert_null(sb_string_free(str, true));
+ assert_null(sb_string_dup(NULL));
}
static void
test_string_append_len(void **state)
{
- bc_string_t *str = bc_string_new();
- str = bc_string_append_len(str, "guda", 4);
+ sb_string_t *str = sb_string_new();
+ str = sb_string_append_len(str, "guda", 4);
assert_non_null(str);
assert_string_equal(str->str, "guda");
assert_int_equal(str->len, 4);
- assert_int_equal(str->allocated_len, BC_STRING_CHUNK_SIZE);
- assert_null(bc_string_free(str, true));
- str = bc_string_new();
- str = bc_string_append_len(str, "guda", 4);
- str = bc_string_append_len(str, "bola", 4);
+ assert_int_equal(str->allocated_len, SB_STRING_CHUNK_SIZE);
+ assert_null(sb_string_free(str, true));
+ str = sb_string_new();
+ str = sb_string_append_len(str, "guda", 4);
+ str = sb_string_append_len(str, "bola", 4);
assert_non_null(str);
assert_string_equal(str->str, "gudabola");
assert_int_equal(str->len, 8);
- assert_int_equal(str->allocated_len, BC_STRING_CHUNK_SIZE);
- assert_null(bc_string_free(str, true));
- str = bc_string_new();
- str = bc_string_append_len(str, "guda", 3);
- str = bc_string_append_len(str, "bola", 4);
+ assert_int_equal(str->allocated_len, SB_STRING_CHUNK_SIZE);
+ assert_null(sb_string_free(str, true));
+ str = sb_string_new();
+ str = sb_string_append_len(str, "guda", 3);
+ str = sb_string_append_len(str, "bola", 4);
assert_non_null(str);
assert_string_equal(str->str, "gudbola");
assert_int_equal(str->len, 7);
- assert_int_equal(str->allocated_len, BC_STRING_CHUNK_SIZE);
- assert_null(bc_string_free(str, true));
- str = bc_string_new();
- str = bc_string_append_len(str, "guda", 4);
- str = bc_string_append_len(str,
+ assert_int_equal(str->allocated_len, SB_STRING_CHUNK_SIZE);
+ assert_null(sb_string_free(str, true));
+ str = sb_string_new();
+ str = sb_string_append_len(str, "guda", 4);
+ str = sb_string_append_len(str,
"cwlwmwxxmvjnwtidmjehzdeexbxjnjowruxjrqpgpfhmvwgqeacdjissntmbtsjidzkcw"
"nnqhxhneolbwqlctcxmrsutolrjikpavxombpfpjyaqltgvzrjidotalcuwrwxtaxjiwa"
"xfhfyzymtffusoqywaruxpybwggukltspqqmghzpqstvcvlqbkhquihzndnrvkaqvevaz"
@@ -446,8 +379,8 @@ test_string_append_len(void **state)
"dxntikgoqlidfnmdhxzevqzlzubvyleeksdirmmttqthhkvfjggznpmarcamacpvwsrnr"
"ftzfeyasjpxoevyptpdnqokswiondusnuymqwaryrmdgscbnuilxtypuynckancsfnwtg"
"okxhegoifakimxbbafkeannglvsxprqzfekdinssqymtfexf", 600);
- str = bc_string_append_len(str, NULL, 0);
- str = bc_string_append_len(str,
+ str = sb_string_append_len(str, NULL, 0);
+ str = sb_string_append_len(str,
"cwlwmwxxmvjnwtidmjehzdeexbxjnjowruxjrqpgpfhmvwgqeacdjissntmbtsjidzkcw"
"nnqhxhneolbwqlctcxmrsutolrjikpavxombpfpjyaqltgvzrjidotalcuwrwxtaxjiwa"
"xfhfyzymtffusoqywaruxpybwggukltspqqmghzpqstvcvlqbkhquihzndnrvkaqvevaz"
@@ -478,40 +411,40 @@ test_string_append_len(void **state)
"pdnqokswiondusnuymqwaryrmdgscbnuilxtypuynckancsfnwtgokxhegoifakimxbba"
"fkeannglvsxprqzfekdinssqymtfexf");
assert_int_equal(str->len, 1204);
- assert_int_equal(str->allocated_len, BC_STRING_CHUNK_SIZE * 10);
- assert_null(bc_string_free(str, true));
- str = bc_string_new();
- str = bc_string_append_len(str, NULL, 0);
+ assert_int_equal(str->allocated_len, SB_STRING_CHUNK_SIZE * 10);
+ assert_null(sb_string_free(str, true));
+ str = sb_string_new();
+ str = sb_string_append_len(str, NULL, 0);
assert_non_null(str);
assert_string_equal(str->str, "");
assert_int_equal(str->len, 0);
- assert_int_equal(str->allocated_len, BC_STRING_CHUNK_SIZE);
- assert_null(bc_string_free(str, true));
- assert_null(bc_string_append_len(NULL, "foo", 3));
+ assert_int_equal(str->allocated_len, SB_STRING_CHUNK_SIZE);
+ assert_null(sb_string_free(str, true));
+ assert_null(sb_string_append_len(NULL, "foo", 3));
}
static void
test_string_append(void **state)
{
- bc_string_t *str = bc_string_new();
- str = bc_string_append(str, "guda");
+ sb_string_t *str = sb_string_new();
+ str = sb_string_append(str, "guda");
assert_non_null(str);
assert_string_equal(str->str, "guda");
assert_int_equal(str->len, 4);
- assert_int_equal(str->allocated_len, BC_STRING_CHUNK_SIZE);
- assert_null(bc_string_free(str, true));
- str = bc_string_new();
- str = bc_string_append(str, "guda");
- str = bc_string_append(str, "bola");
+ assert_int_equal(str->allocated_len, SB_STRING_CHUNK_SIZE);
+ assert_null(sb_string_free(str, true));
+ str = sb_string_new();
+ str = sb_string_append(str, "guda");
+ str = sb_string_append(str, "bola");
assert_non_null(str);
assert_string_equal(str->str, "gudabola");
assert_int_equal(str->len, 8);
- assert_int_equal(str->allocated_len, BC_STRING_CHUNK_SIZE);
- assert_null(bc_string_free(str, true));
- str = bc_string_new();
- str = bc_string_append(str, "guda");
- str = bc_string_append(str,
+ assert_int_equal(str->allocated_len, SB_STRING_CHUNK_SIZE);
+ assert_null(sb_string_free(str, true));
+ str = sb_string_new();
+ str = sb_string_append(str, "guda");
+ str = sb_string_append(str,
"cwlwmwxxmvjnwtidmjehzdeexbxjnjowruxjrqpgpfhmvwgqeacdjissntmbtsjidzkcw"
"nnqhxhneolbwqlctcxmrsutolrjikpavxombpfpjyaqltgvzrjidotalcuwrwxtaxjiwa"
"xfhfyzymtffusoqywaruxpybwggukltspqqmghzpqstvcvlqbkhquihzndnrvkaqvevaz"
@@ -521,8 +454,8 @@ test_string_append(void **state)
"dxntikgoqlidfnmdhxzevqzlzubvyleeksdirmmttqthhkvfjggznpmarcamacpvwsrnr"
"ftzfeyasjpxoevyptpdnqokswiondusnuymqwaryrmdgscbnuilxtypuynckancsfnwtg"
"okxhegoifakimxbbafkeannglvsxprqzfekdinssqymtfexf");
- str = bc_string_append(str, NULL);
- str = bc_string_append(str,
+ str = sb_string_append(str, NULL);
+ str = sb_string_append(str,
"cwlwmwxxmvjnwtidmjehzdeexbxjnjowruxjrqpgpfhmvwgqeacdjissntmbtsjidzkcw"
"nnqhxhneolbwqlctcxmrsutolrjikpavxombpfpjyaqltgvzrjidotalcuwrwxtaxjiwa"
"xfhfyzymtffusoqywaruxpybwggukltspqqmghzpqstvcvlqbkhquihzndnrvkaqvevaz"
@@ -553,27 +486,27 @@ test_string_append(void **state)
"pdnqokswiondusnuymqwaryrmdgscbnuilxtypuynckancsfnwtgokxhegoifakimxbba"
"fkeannglvsxprqzfekdinssqymtfexf");
assert_int_equal(str->len, 1204);
- assert_int_equal(str->allocated_len, BC_STRING_CHUNK_SIZE * 10);
- assert_null(bc_string_free(str, true));
- str = bc_string_new();
- str = bc_string_append(str, NULL);
+ assert_int_equal(str->allocated_len, SB_STRING_CHUNK_SIZE * 10);
+ assert_null(sb_string_free(str, true));
+ str = sb_string_new();
+ str = sb_string_append(str, NULL);
assert_non_null(str);
assert_string_equal(str->str, "");
assert_int_equal(str->len, 0);
- assert_int_equal(str->allocated_len, BC_STRING_CHUNK_SIZE);
- assert_null(bc_string_free(str, true));
- assert_null(bc_string_append(NULL, "asd"));
- assert_null(bc_string_append(NULL, NULL));
+ assert_int_equal(str->allocated_len, SB_STRING_CHUNK_SIZE);
+ assert_null(sb_string_free(str, true));
+ assert_null(sb_string_append(NULL, "asd"));
+ assert_null(sb_string_append(NULL, NULL));
}
static void
test_string_append_c(void **state)
{
- bc_string_t *str = bc_string_new();
- str = bc_string_append_len(str, "guda", 4);
+ sb_string_t *str = sb_string_new();
+ str = sb_string_append_len(str, "guda", 4);
for (int i = 0; i < 600; i++)
- str = bc_string_append_c(str, 'c');
+ str = sb_string_append_c(str, 'c');
assert_non_null(str);
assert_string_equal(str->str,
"gudaccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc"
@@ -586,65 +519,62 @@ test_string_append_c(void **state)
"ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc"
"cccccccccccccccccccccccccccccccccccccccccccccccccccc");
assert_int_equal(str->len, 604);
- assert_int_equal(str->allocated_len, BC_STRING_CHUNK_SIZE * 5);
- assert_null(bc_string_free(str, true));
- assert_null(bc_string_append_c(NULL, 0));
+ assert_int_equal(str->allocated_len, SB_STRING_CHUNK_SIZE * 5);
+ assert_null(sb_string_free(str, true));
+ assert_null(sb_string_append_c(NULL, 0));
}
static void
test_string_append_printf(void **state)
{
- bc_string_t *str = bc_string_new();
- str = bc_string_append_printf(str, NULL);
- assert_string_equal(str->str, "");
- assert_non_null(str);
- str = bc_string_append_printf(str, "guda: %s %d", "bola", 1);
+ sb_string_t *str = sb_string_new();
+ str = sb_string_append_printf(str, "guda: %s %d", "bola", 1);
assert_non_null(str);
assert_string_equal(str->str, "guda: bola 1");
assert_int_equal(str->len, 12);
- assert_int_equal(str->allocated_len, BC_STRING_CHUNK_SIZE);
- assert_null(bc_string_free(str, true));
- assert_null(bc_string_append_printf(NULL, "asd"));
+ assert_int_equal(str->allocated_len, SB_STRING_CHUNK_SIZE);
+ assert_null(sb_string_free(str, true));
+ assert_null(sb_string_append_printf(NULL, "asd"));
}
static void
test_string_append_escaped(void **state)
{
- bc_string_t *str = bc_string_new();
- str = bc_string_append_escaped(str, NULL);
+ sb_string_t *str = sb_string_new();
+ str = sb_string_append_escaped(str, NULL);
assert_non_null(str);
assert_string_equal(str->str, "");
assert_int_equal(str->len, 0);
- assert_int_equal(str->allocated_len, BC_STRING_CHUNK_SIZE);
- str = bc_string_append_escaped(str, "foo \\a bar \\\\ lol");
+ assert_int_equal(str->allocated_len, SB_STRING_CHUNK_SIZE);
+ str = sb_string_append_escaped(str, "foo \\a bar \\\\ lol");
assert_non_null(str);
assert_string_equal(str->str, "foo a bar \\ lol");
assert_int_equal(str->len, 15);
- assert_int_equal(str->allocated_len, BC_STRING_CHUNK_SIZE);
- assert_null(bc_string_free(str, true));
- assert_null(bc_string_append_escaped(NULL, "asd"));
+ assert_int_equal(str->allocated_len, SB_STRING_CHUNK_SIZE);
+ assert_null(sb_string_free(str, true));
+ assert_null(sb_string_append_escaped(NULL, "asd"));
}
static void
test_trie_new(void **state)
{
- bc_trie_t *trie = bc_trie_new(free);
+ sb_trie_t *trie = sb_trie_new(free);
assert_non_null(trie);
assert_null(trie->root);
assert_true(trie->free_func == free);
- bc_trie_free(trie);
+ sb_trie_free(trie);
}
static void
test_trie_insert(void **state)
{
- bc_trie_t *trie = bc_trie_new(free);
+ sb_trie_t *trie = sb_trie_new(free);
- bc_trie_insert(trie, "bola", bc_strdup("guda"));
+ sb_trie_insert(trie, "bola", sb_strdup("guda"));
assert_true(trie->root->key == 'b');
assert_null(trie->root->data);
assert_true(trie->root->child->key == 'o');
@@ -657,7 +587,7 @@ test_trie_insert(void **state)
assert_string_equal(trie->root->child->child->child->child->data, "guda");
- bc_trie_insert(trie, "chu", bc_strdup("nda"));
+ sb_trie_insert(trie, "chu", sb_strdup("nda"));
assert_true(trie->root->key == 'b');
assert_null(trie->root->data);
assert_true(trie->root->child->key == 'o');
@@ -679,7 +609,7 @@ test_trie_insert(void **state)
assert_string_equal(trie->root->next->child->child->child->data, "nda");
- bc_trie_insert(trie, "bote", bc_strdup("aba"));
+ sb_trie_insert(trie, "bote", sb_strdup("aba"));
assert_true(trie->root->key == 'b');
assert_null(trie->root->data);
assert_true(trie->root->child->key == 'o');
@@ -708,7 +638,7 @@ test_trie_insert(void **state)
assert_string_equal(trie->root->child->child->next->child->child->data, "aba");
- bc_trie_insert(trie, "bo", bc_strdup("haha"));
+ sb_trie_insert(trie, "bo", sb_strdup("haha"));
assert_true(trie->root->key == 'b');
assert_null(trie->root->data);
assert_true(trie->root->child->key == 'o');
@@ -739,12 +669,12 @@ test_trie_insert(void **state)
assert_true(trie->root->child->child->next->next->key == '\0');
assert_string_equal(trie->root->child->child->next->next->data, "haha");
- bc_trie_free(trie);
+ sb_trie_free(trie);
- trie = bc_trie_new(free);
+ trie = sb_trie_new(free);
- bc_trie_insert(trie, "chu", bc_strdup("nda"));
+ sb_trie_insert(trie, "chu", sb_strdup("nda"));
assert_true(trie->root->key == 'c');
assert_null(trie->root->data);
assert_true(trie->root->child->key == 'h');
@@ -755,7 +685,7 @@ test_trie_insert(void **state)
assert_string_equal(trie->root->child->child->child->data, "nda");
- bc_trie_insert(trie, "bola", bc_strdup("guda"));
+ sb_trie_insert(trie, "bola", sb_strdup("guda"));
assert_true(trie->root->key == 'c');
assert_null(trie->root->data);
assert_true(trie->root->child->key == 'h');
@@ -777,7 +707,7 @@ test_trie_insert(void **state)
assert_string_equal(trie->root->next->child->child->child->child->data, "guda");
- bc_trie_insert(trie, "bote", bc_strdup("aba"));
+ sb_trie_insert(trie, "bote", sb_strdup("aba"));
assert_true(trie->root->key == 'c');
assert_null(trie->root->data);
assert_true(trie->root->child->key == 'h');
@@ -806,7 +736,7 @@ test_trie_insert(void **state)
assert_string_equal(trie->root->next->child->child->next->child->child->data, "aba");
- bc_trie_insert(trie, "bo", bc_strdup("haha"));
+ sb_trie_insert(trie, "bo", sb_strdup("haha"));
assert_true(trie->root->key == 'c');
assert_null(trie->root->data);
assert_true(trie->root->child->key == 'h');
@@ -837,16 +767,16 @@ test_trie_insert(void **state)
assert_true(trie->root->next->child->child->next->next->key == '\0');
assert_string_equal(trie->root->next->child->child->next->next->data, "haha");
- bc_trie_free(trie);
+ sb_trie_free(trie);
}
static void
test_trie_insert_duplicated(void **state)
{
- bc_trie_t *trie = bc_trie_new(free);
+ sb_trie_t *trie = sb_trie_new(free);
- bc_trie_insert(trie, "bola", bc_strdup("guda"));
+ sb_trie_insert(trie, "bola", sb_strdup("guda"));
assert_true(trie->root->key == 'b');
assert_null(trie->root->data);
assert_true(trie->root->child->key == 'o');
@@ -858,7 +788,7 @@ test_trie_insert_duplicated(void **state)
assert_true(trie->root->child->child->child->child->key == '\0');
assert_string_equal(trie->root->child->child->child->child->data, "guda");
- bc_trie_insert(trie, "bola", bc_strdup("asdf"));
+ sb_trie_insert(trie, "bola", sb_strdup("asdf"));
assert_true(trie->root->key == 'b');
assert_null(trie->root->data);
assert_true(trie->root->child->key == 'o');
@@ -870,10 +800,10 @@ test_trie_insert_duplicated(void **state)
assert_true(trie->root->child->child->child->child->key == '\0');
assert_string_equal(trie->root->child->child->child->child->data, "asdf");
- bc_trie_free(trie);
+ sb_trie_free(trie);
trie = NULL;
- bc_trie_insert(trie, "bola", NULL);
+ sb_trie_insert(trie, "bola", NULL);
assert_null(trie);
}
@@ -881,19 +811,19 @@ test_trie_insert_duplicated(void **state)
static void
test_trie_keep_data(void **state)
{
- bc_trie_t *trie = bc_trie_new(NULL);
+ sb_trie_t *trie = sb_trie_new(NULL);
char *t1 = "guda";
char *t2 = "nda";
char *t3 = "aba";
char *t4 = "haha";
- bc_trie_insert(trie, "bola", t1);
- bc_trie_insert(trie, "chu", t2);
- bc_trie_insert(trie, "bote", t3);
- bc_trie_insert(trie, "bo", t4);
+ sb_trie_insert(trie, "bola", t1);
+ sb_trie_insert(trie, "chu", t2);
+ sb_trie_insert(trie, "bote", t3);
+ sb_trie_insert(trie, "bo", t4);
- bc_trie_free(trie);
+ sb_trie_free(trie);
assert_string_equal(t1, "guda");
assert_string_equal(t2, "nda");
@@ -905,80 +835,80 @@ test_trie_keep_data(void **state)
static void
test_trie_lookup(void **state)
{
- bc_trie_t *trie = bc_trie_new(free);
+ sb_trie_t *trie = sb_trie_new(free);
- bc_trie_insert(trie, "bola", bc_strdup("guda"));
- bc_trie_insert(trie, "chu", bc_strdup("nda"));
- bc_trie_insert(trie, "bote", bc_strdup("aba"));
- bc_trie_insert(trie, "bo", bc_strdup("haha"));
+ sb_trie_insert(trie, "bola", sb_strdup("guda"));
+ sb_trie_insert(trie, "chu", sb_strdup("nda"));
+ sb_trie_insert(trie, "bote", sb_strdup("aba"));
+ sb_trie_insert(trie, "bo", sb_strdup("haha"));
- assert_string_equal(bc_trie_lookup(trie, "bola"), "guda");
- assert_string_equal(bc_trie_lookup(trie, "chu"), "nda");
- assert_string_equal(bc_trie_lookup(trie, "bote"), "aba");
- assert_string_equal(bc_trie_lookup(trie, "bo"), "haha");
+ assert_string_equal(sb_trie_lookup(trie, "bola"), "guda");
+ assert_string_equal(sb_trie_lookup(trie, "chu"), "nda");
+ assert_string_equal(sb_trie_lookup(trie, "bote"), "aba");
+ assert_string_equal(sb_trie_lookup(trie, "bo"), "haha");
- assert_null(bc_trie_lookup(trie, "arcoiro"));
+ assert_null(sb_trie_lookup(trie, "arcoiro"));
- bc_trie_free(trie);
+ sb_trie_free(trie);
- trie = bc_trie_new(free);
+ trie = sb_trie_new(free);
- bc_trie_insert(trie, "chu", bc_strdup("nda"));
- bc_trie_insert(trie, "bola", bc_strdup("guda"));
- bc_trie_insert(trie, "bote", bc_strdup("aba"));
- bc_trie_insert(trie, "bo", bc_strdup("haha"));
- bc_trie_insert(trie, "copa", bc_strdup("bu"));
- bc_trie_insert(trie, "b", bc_strdup("c"));
- bc_trie_insert(trie, "test", bc_strdup("asd"));
+ sb_trie_insert(trie, "chu", sb_strdup("nda"));
+ sb_trie_insert(trie, "bola", sb_strdup("guda"));
+ sb_trie_insert(trie, "bote", sb_strdup("aba"));
+ sb_trie_insert(trie, "bo", sb_strdup("haha"));
+ sb_trie_insert(trie, "copa", sb_strdup("bu"));
+ sb_trie_insert(trie, "b", sb_strdup("c"));
+ sb_trie_insert(trie, "test", sb_strdup("asd"));
- assert_string_equal(bc_trie_lookup(trie, "bola"), "guda");
- assert_string_equal(bc_trie_lookup(trie, "chu"), "nda");
- assert_string_equal(bc_trie_lookup(trie, "bote"), "aba");
- assert_string_equal(bc_trie_lookup(trie, "bo"), "haha");
+ assert_string_equal(sb_trie_lookup(trie, "bola"), "guda");
+ assert_string_equal(sb_trie_lookup(trie, "chu"), "nda");
+ assert_string_equal(sb_trie_lookup(trie, "bote"), "aba");
+ assert_string_equal(sb_trie_lookup(trie, "bo"), "haha");
- assert_null(bc_trie_lookup(trie, "arcoiro"));
+ assert_null(sb_trie_lookup(trie, "arcoiro"));
- bc_trie_free(trie);
+ sb_trie_free(trie);
- assert_null(bc_trie_lookup(NULL, "bola"));
+ assert_null(sb_trie_lookup(NULL, "bola"));
}
static void
test_trie_size(void **state)
{
- bc_trie_t *trie = bc_trie_new(free);
+ sb_trie_t *trie = sb_trie_new(free);
- bc_trie_insert(trie, "bola", bc_strdup("guda"));
- bc_trie_insert(trie, "chu", bc_strdup("nda"));
- bc_trie_insert(trie, "bote", bc_strdup("aba"));
- bc_trie_insert(trie, "bo", bc_strdup("haha"));
+ sb_trie_insert(trie, "bola", sb_strdup("guda"));
+ sb_trie_insert(trie, "chu", sb_strdup("nda"));
+ sb_trie_insert(trie, "bote", sb_strdup("aba"));
+ sb_trie_insert(trie, "bo", sb_strdup("haha"));
- assert_int_equal(bc_trie_size(trie), 4);
- assert_int_equal(bc_trie_size(NULL), 0);
+ assert_int_equal(sb_trie_size(trie), 4);
+ assert_int_equal(sb_trie_size(NULL), 0);
- bc_trie_free(trie);
+ sb_trie_free(trie);
- trie = bc_trie_new(free);
+ trie = sb_trie_new(free);
- bc_trie_insert(trie, "chu", bc_strdup("nda"));
- bc_trie_insert(trie, "bola", bc_strdup("guda"));
- bc_trie_insert(trie, "bote", bc_strdup("aba"));
- bc_trie_insert(trie, "bo", bc_strdup("haha"));
- bc_trie_insert(trie, "copa", bc_strdup("bu"));
- bc_trie_insert(trie, "b", bc_strdup("c"));
- bc_trie_insert(trie, "test", bc_strdup("asd"));
+ sb_trie_insert(trie, "chu", sb_strdup("nda"));
+ sb_trie_insert(trie, "bola", sb_strdup("guda"));
+ sb_trie_insert(trie, "bote", sb_strdup("aba"));
+ sb_trie_insert(trie, "bo", sb_strdup("haha"));
+ sb_trie_insert(trie, "copa", sb_strdup("bu"));
+ sb_trie_insert(trie, "b", sb_strdup("c"));
+ sb_trie_insert(trie, "test", sb_strdup("asd"));
- assert_int_equal(bc_trie_size(trie), 7);
- assert_int_equal(bc_trie_size(NULL), 0);
+ assert_int_equal(sb_trie_size(trie), 7);
+ assert_int_equal(sb_trie_size(NULL), 0);
- bc_trie_free(trie);
+ sb_trie_free(trie);
}
-static size_t counter;
-static char *expected_keys[] = {"chu", "copa", "bola", "bote", "bo", "b", "test", "testa"};
-static char *expected_datas[] = {"nda", "bu", "guda", "aba", "haha", "c", "asd", "lol"};
+static unsigned int counter;
+static char *expected_keys[] = {"chu", "copa", "bola", "bote", "bo", "b", "test"};
+static char *expected_datas[] = {"nda", "bu", "guda", "aba", "haha", "c", "asd"};
static void
mock_foreach(const char *key, void *data, void *user_data)
@@ -992,150 +922,71 @@ mock_foreach(const char *key, void *data, void *user_data)
static void
test_trie_foreach(void **state)
{
- bc_trie_t *trie = bc_trie_new(free);
+ sb_trie_t *trie = sb_trie_new(free);
- bc_trie_insert(trie, "chu", bc_strdup("nda"));
- bc_trie_insert(trie, "bola", bc_strdup("guda"));
- bc_trie_insert(trie, "bote", bc_strdup("aba"));
- bc_trie_insert(trie, "bo", bc_strdup("haha"));
- bc_trie_insert(trie, "copa", bc_strdup("bu"));
- bc_trie_insert(trie, "b", bc_strdup("c"));
- bc_trie_insert(trie, "test", bc_strdup("asd"));
- bc_trie_insert(trie, "testa", bc_strdup("lol"));
+ sb_trie_insert(trie, "chu", sb_strdup("nda"));
+ sb_trie_insert(trie, "bola", sb_strdup("guda"));
+ sb_trie_insert(trie, "bote", sb_strdup("aba"));
+ sb_trie_insert(trie, "bo", sb_strdup("haha"));
+ sb_trie_insert(trie, "copa", sb_strdup("bu"));
+ sb_trie_insert(trie, "b", sb_strdup("c"));
+ sb_trie_insert(trie, "test", sb_strdup("asd"));
counter = 0;
- bc_trie_foreach(trie, mock_foreach, "foo");
- bc_trie_foreach(NULL, mock_foreach, "foo");
- bc_trie_foreach(trie, NULL, "foo");
- bc_trie_foreach(NULL, NULL, "foo");
- assert_int_equal(counter, 8);
-
- bc_trie_free(trie);
-}
-
-
-static void
-test_trie_inserted_after_prefix(void **state)
-{
- bc_trie_t *trie = bc_trie_new(free);
-
- bc_trie_insert(trie, "bola", bc_strdup("guda"));
- assert_true(trie->root->key == 'b');
- assert_null(trie->root->data);
- assert_true(trie->root->child->key == 'o');
- assert_null(trie->root->child->data);
- assert_true(trie->root->child->child->key == 'l');
- assert_null(trie->root->child->child->data);
- assert_true(trie->root->child->child->child->key == 'a');
- assert_null(trie->root->child->child->child->data);
- assert_true(trie->root->child->child->child->child->key == '\0');
- assert_string_equal(trie->root->child->child->child->child->data, "guda");
-
- bc_trie_insert(trie, "bolaoo", bc_strdup("asdf"));
- assert_true(trie->root->key == 'b');
- assert_null(trie->root->data);
- assert_true(trie->root->child->key == 'o');
- assert_null(trie->root->child->data);
- assert_true(trie->root->child->child->key == 'l');
- assert_null(trie->root->child->child->data);
- assert_true(trie->root->child->child->child->key == 'a');
- assert_null(trie->root->child->child->child->data);
- assert_true(trie->root->child->child->child->child->key == '\0');
- assert_string_equal(trie->root->child->child->child->child->data, "guda");
- assert_non_null(trie->root->child->child->child->child->next);
- assert_true(trie->root->child->child->child->child->next->key == 'o');
- assert_null(trie->root->child->child->child->child->next->data);
- assert_true(trie->root->child->child->child->child->next->child->key == 'o');
- assert_null(trie->root->child->child->child->child->next->child->data);
- assert_true(trie->root->child->child->child->child->next->child->child->key == '\0');
- assert_string_equal(trie->root->child->child->child->child->next->child->child->data, "asdf");
-
- assert_int_equal(bc_trie_size(trie), 2);
- assert_string_equal(bc_trie_lookup(trie, "bola"), "guda");
- assert_string_equal(bc_trie_lookup(trie, "bolaoo"), "asdf");
-
- bc_trie_free(trie);
-}
-
+ sb_trie_foreach(trie, mock_foreach, "foo");
+ sb_trie_foreach(NULL, mock_foreach, "foo");
+ sb_trie_foreach(trie, NULL, "foo");
+ sb_trie_foreach(NULL, NULL, "foo");
+ assert_int_equal(counter, 7);
-static void
-test_shell_quote(void **state)
-{
- char *t;
- t = bc_shell_quote(NULL);
- assert_string_equal(t, "''");
- free(t);
- t = bc_shell_quote("!bola");
- assert_string_equal(t, "''\\!'bola'");
- free(t);
- t = bc_shell_quote("'bola");
- assert_string_equal(t, "''\\''bola'");
- free(t);
- t = bc_shell_quote("bo!bola");
- assert_string_equal(t, "'bo'\\!'bola'");
- free(t);
- t = bc_shell_quote("bo'bola");
- assert_string_equal(t, "'bo'\\''bola'");
- free(t);
- t = bc_shell_quote("bola!");
- assert_string_equal(t, "'bola'\\!''");
- free(t);
- t = bc_shell_quote("bola'");
- assert_string_equal(t, "'bola'\\'''");
- free(t);
+ sb_trie_free(trie);
}
int
main(void)
{
- const struct CMUnitTest tests[] = {
+ const UnitTest tests[] = {
// slist
- cmocka_unit_test(test_slist_append),
- cmocka_unit_test(test_slist_prepend),
- cmocka_unit_test(test_slist_append_list),
- cmocka_unit_test(test_slist_free),
- cmocka_unit_test(test_slist_length),
+ unit_test(test_slist_append),
+ unit_test(test_slist_prepend),
+ unit_test(test_slist_free),
+ unit_test(test_slist_length),
// strfuncs
- cmocka_unit_test(test_strdup),
- cmocka_unit_test(test_strndup),
- cmocka_unit_test(test_strdup_printf),
- cmocka_unit_test(test_str_starts_with),
- cmocka_unit_test(test_str_ends_with),
- cmocka_unit_test(test_str_lstrip),
- cmocka_unit_test(test_str_rstrip),
- cmocka_unit_test(test_str_strip),
- cmocka_unit_test(test_str_split),
- cmocka_unit_test(test_str_replace),
- cmocka_unit_test(test_str_find),
- cmocka_unit_test(test_str_to_bool),
- cmocka_unit_test(test_strv_join),
- cmocka_unit_test(test_strv_length),
+ unit_test(test_strdup),
+ unit_test(test_strndup),
+ unit_test(test_strdup_printf),
+ unit_test(test_str_starts_with),
+ unit_test(test_str_ends_with),
+ unit_test(test_str_lstrip),
+ unit_test(test_str_rstrip),
+ unit_test(test_str_strip),
+ unit_test(test_str_split),
+ unit_test(test_str_replace),
+ unit_test(test_str_find),
+ unit_test(test_strv_join),
+ unit_test(test_strv_length),
// string
- cmocka_unit_test(test_string_new),
- cmocka_unit_test(test_string_free),
- cmocka_unit_test(test_string_dup),
- cmocka_unit_test(test_string_append_len),
- cmocka_unit_test(test_string_append),
- cmocka_unit_test(test_string_append_c),
- cmocka_unit_test(test_string_append_printf),
- cmocka_unit_test(test_string_append_escaped),
+ unit_test(test_string_new),
+ unit_test(test_string_free),
+ unit_test(test_string_dup),
+ unit_test(test_string_append_len),
+ unit_test(test_string_append),
+ unit_test(test_string_append_c),
+ unit_test(test_string_append_printf),
+ unit_test(test_string_append_escaped),
// trie
- cmocka_unit_test(test_trie_new),
- cmocka_unit_test(test_trie_insert),
- cmocka_unit_test(test_trie_insert_duplicated),
- cmocka_unit_test(test_trie_keep_data),
- cmocka_unit_test(test_trie_lookup),
- cmocka_unit_test(test_trie_size),
- cmocka_unit_test(test_trie_foreach),
- cmocka_unit_test(test_trie_inserted_after_prefix),
-
- // shell
- cmocka_unit_test(test_shell_quote),
+ unit_test(test_trie_new),
+ unit_test(test_trie_insert),
+ unit_test(test_trie_insert_duplicated),
+ unit_test(test_trie_keep_data),
+ unit_test(test_trie_lookup),
+ unit_test(test_trie_size),
+ unit_test(test_trie_foreach),
};
- return cmocka_run_group_tests(tests, NULL, NULL);
+ return run_tests(tests);
}
diff --git a/tests/common/check_config_parser.c b/tests/common/check_config_parser.c
deleted file mode 100644
index 5360f54..0000000
--- a/tests/common/check_config_parser.c
+++ /dev/null
@@ -1,1037 +0,0 @@
-/*
- * blogc: A blog compiler.
- * Copyright (C) 2014-2019 Rafael G. Martins <rafael@rafaelmartins.eng.br>
- *
- * This program can be distributed under the terms of the BSD License.
- * See the file LICENSE.
- */
-
-#include <stdarg.h>
-#include <stddef.h>
-#include <setjmp.h>
-#include <cmocka.h>
-
-#include <stdlib.h>
-#include <string.h>
-
-#include "../../src/common/config-parser.h"
-#include "../../src/common/error.h"
-#include "../../src/common/utils.h"
-
-
-static void
-test_config_empty(void **state)
-{
- const char *a = "";
- bc_error_t *err = NULL;
- bc_config_t *c = bc_config_parse(a, strlen(a), NULL, &err);
- assert_null(err);
- assert_non_null(c);
- assert_non_null(c->root);
- assert_int_equal(bc_trie_size(c->root), 0);
- assert_string_equal(bc_config_get_with_default(c, "bola", "foo", "bar"), "bar");
- bc_config_free(c);
-}
-
-
-static void
-test_config_section_empty(void **state)
-{
- const char *a = "[foo]";
- bc_error_t *err = NULL;
- bc_config_t *c = bc_config_parse(a, strlen(a), NULL, &err);
- assert_null(err);
- assert_non_null(c);
- assert_non_null(c->root);
- assert_int_equal(bc_trie_size(c->root), 1);
- char **s = bc_config_list_sections(c);
- assert_non_null(s);
- assert_int_equal(bc_strv_length(s), 1);
- assert_string_equal(s[0], "foo");
- assert_null(s[1]);
- bc_strv_free(s);
- char **k = bc_config_list_keys(c, "foo");
- assert_non_null(k);
- assert_int_equal(bc_strv_length(k), 0);
- assert_null(k[0]);
- bc_strv_free(k);
- bc_config_free(c);
-}
-
-
-static void
-test_config_section(void **state)
-{
- const char *a =
- "[foo]\n"
- "asd = zxc";
- bc_error_t *err = NULL;
- bc_config_t *c = bc_config_parse(a, strlen(a), NULL, &err);
- assert_null(err);
- assert_non_null(c);
- assert_non_null(c->root);
- assert_int_equal(bc_trie_size(c->root), 1);
- char **s = bc_config_list_sections(c);
- assert_non_null(s);
- assert_int_equal(bc_strv_length(s), 1);
- assert_string_equal(s[0], "foo");
- assert_null(s[1]);
- bc_strv_free(s);
- assert_string_equal(bc_config_get(c, "foo", "asd"), "zxc");
- char **k = bc_config_list_keys(c, "foo");
- assert_non_null(k);
- assert_int_equal(bc_strv_length(k), 1);
- assert_string_equal(k[0], "asd");
- assert_null(k[1]);
- bc_strv_free(k);
- bc_config_free(c);
-
- a =
- "[foo]\n"
- "asd = zxc\n";
- err = NULL;
- c = bc_config_parse(a, strlen(a), NULL, &err);
- assert_null(err);
- assert_non_null(c);
- assert_non_null(c->root);
- assert_int_equal(bc_trie_size(c->root), 1);
- s = bc_config_list_sections(c);
- assert_non_null(s);
- assert_int_equal(bc_strv_length(s), 1);
- assert_string_equal(s[0], "foo");
- assert_null(s[1]);
- bc_strv_free(s);
- assert_string_equal(bc_config_get(c, "foo", "asd"), "zxc");
- k = bc_config_list_keys(c, "foo");
- assert_non_null(k);
- assert_int_equal(bc_strv_length(k), 1);
- assert_string_equal(k[0], "asd");
- assert_null(k[1]);
- bc_strv_free(k);
- bc_config_free(c);
-
- a =
- "[foo]\r\n"
- "asd = zxc\r\n";
- err = NULL;
- c = bc_config_parse(a, strlen(a), NULL, &err);
- assert_null(err);
- assert_non_null(c);
- assert_non_null(c->root);
- assert_int_equal(bc_trie_size(c->root), 1);
- s = bc_config_list_sections(c);
- assert_non_null(s);
- assert_int_equal(bc_strv_length(s), 1);
- assert_string_equal(s[0], "foo");
- assert_null(s[1]);
- bc_strv_free(s);
- assert_string_equal(bc_config_get(c, "foo", "asd"), "zxc");
- k = bc_config_list_keys(c, "foo");
- assert_non_null(k);
- assert_int_equal(bc_strv_length(k), 1);
- assert_string_equal(k[0], "asd");
- assert_null(k[1]);
- bc_strv_free(k);
- bc_config_free(c);
-}
-
-
-static void
-test_config_section_multiple_keys(void **state)
-{
- const char *a =
- "[foo]\n"
- "asd = zxc\n"
- "qwe = rty \n"
- "zxc = vbn";
- bc_error_t *err = NULL;
- bc_config_t *c = bc_config_parse(a, strlen(a), NULL, &err);
- assert_null(err);
- assert_non_null(c);
- assert_non_null(c->root);
- assert_int_equal(bc_trie_size(c->root), 1);
- char **s = bc_config_list_sections(c);
- assert_non_null(s);
- assert_int_equal(bc_strv_length(s), 1);
- assert_string_equal(s[0], "foo");
- assert_null(s[1]);
- bc_strv_free(s);
- assert_string_equal(bc_config_get(c, "foo", "asd"), "zxc");
- assert_string_equal(bc_config_get(c, "foo", "qwe"), "rty");
- assert_string_equal(bc_config_get(c, "foo", "zxc"), "vbn");
- char **k = bc_config_list_keys(c, "foo");
- assert_non_null(k);
- assert_int_equal(bc_strv_length(k), 3);
- assert_string_equal(k[0], "asd");
- assert_string_equal(k[1], "qwe");
- assert_string_equal(k[2], "zxc");
- assert_null(k[3]);
- bc_strv_free(k);
- bc_config_free(c);
-
- a =
- "[foo]\n"
- "asd = zxc\n"
- "qwe = rty \n"
- "zxc = vbn\n";
- err = NULL;
- c = bc_config_parse(a, strlen(a), NULL, &err);
- assert_null(err);
- assert_non_null(c);
- assert_non_null(c->root);
- assert_int_equal(bc_trie_size(c->root), 1);
- s = bc_config_list_sections(c);
- assert_non_null(s);
- assert_int_equal(bc_strv_length(s), 1);
- assert_string_equal(s[0], "foo");
- assert_null(s[1]);
- bc_strv_free(s);
- assert_string_equal(bc_config_get(c, "foo", "asd"), "zxc");
- assert_string_equal(bc_config_get(c, "foo", "qwe"), "rty");
- assert_string_equal(bc_config_get(c, "foo", "zxc"), "vbn");
- k = bc_config_list_keys(c, "foo");
- assert_non_null(k);
- assert_int_equal(bc_strv_length(k), 3);
- assert_string_equal(k[0], "asd");
- assert_string_equal(k[1], "qwe");
- assert_string_equal(k[2], "zxc");
- assert_null(k[3]);
- bc_strv_free(k);
- bc_config_free(c);
-
- a =
- "[foo]\r\n"
- "asd = zxc\r\n"
- "qwe = rty \r\n"
- "zxc = vbn\r\n";
- err = NULL;
- c = bc_config_parse(a, strlen(a), NULL, &err);
- assert_null(err);
- assert_non_null(c);
- assert_non_null(c->root);
- assert_int_equal(bc_trie_size(c->root), 1);
- s = bc_config_list_sections(c);
- assert_non_null(s);
- assert_int_equal(bc_strv_length(s), 1);
- assert_string_equal(s[0], "foo");
- assert_null(s[1]);
- bc_strv_free(s);
- assert_string_equal(bc_config_get(c, "foo", "asd"), "zxc");
- assert_string_equal(bc_config_get(c, "foo", "qwe"), "rty");
- assert_string_equal(bc_config_get(c, "foo", "zxc"), "vbn");
- k = bc_config_list_keys(c, "foo");
- assert_non_null(k);
- assert_int_equal(bc_strv_length(k), 3);
- assert_string_equal(k[0], "asd");
- assert_string_equal(k[1], "qwe");
- assert_string_equal(k[2], "zxc");
- assert_null(k[3]);
- bc_strv_free(k);
- bc_config_free(c);
-}
-
-
-static void
-test_config_section_multiple_sections(void **state)
-{
- const char *a =
- "[foo]\n"
- "asd = zxc\n"
- "qwe = rty\n"
- "zxc = vbn\n"
- "\n"
- "[bar]\n"
- "lol = hehe";
- bc_error_t *err = NULL;
- bc_config_t *c = bc_config_parse(a, strlen(a), NULL, &err);
- assert_null(err);
- assert_non_null(c);
- assert_non_null(c->root);
- assert_int_equal(bc_trie_size(c->root), 2);
- char **s = bc_config_list_sections(c);
- assert_non_null(s);
- assert_int_equal(bc_strv_length(s), 2);
- assert_string_equal(s[0], "foo");
- assert_string_equal(s[1], "bar");
- assert_null(s[2]);
- bc_strv_free(s);
- assert_string_equal(bc_config_get(c, "foo", "asd"), "zxc");
- assert_string_equal(bc_config_get(c, "foo", "qwe"), "rty");
- assert_string_equal(bc_config_get(c, "foo", "zxc"), "vbn");
- assert_string_equal(bc_config_get(c, "bar", "lol"), "hehe");
- char **k = bc_config_list_keys(c, "foo");
- assert_non_null(k);
- assert_int_equal(bc_strv_length(k), 3);
- assert_string_equal(k[0], "asd");
- assert_string_equal(k[1], "qwe");
- assert_string_equal(k[2], "zxc");
- assert_null(k[3]);
- bc_strv_free(k);
- k = bc_config_list_keys(c, "bar");
- assert_non_null(k);
- assert_int_equal(bc_strv_length(k), 1);
- assert_string_equal(k[0], "lol");
- assert_null(k[1]);
- bc_strv_free(k);
- bc_config_free(c);
-
- a =
- "[foo]\n"
- "asd = zxc\n"
- "qwe = rty\n"
- "zxc = vbn\n"
- "\n"
- "[bar]\n"
- "lol = hehe\n";
- err = NULL;
- c = bc_config_parse(a, strlen(a), NULL, &err);
- assert_null(err);
- assert_non_null(c);
- assert_non_null(c->root);
- assert_int_equal(bc_trie_size(c->root), 2);
- s = bc_config_list_sections(c);
- assert_non_null(s);
- assert_int_equal(bc_strv_length(s), 2);
- assert_string_equal(s[0], "foo");
- assert_string_equal(s[1], "bar");
- assert_null(s[2]);
- bc_strv_free(s);
- assert_string_equal(bc_config_get(c, "foo", "asd"), "zxc");
- assert_string_equal(bc_config_get(c, "foo", "qwe"), "rty");
- assert_string_equal(bc_config_get(c, "foo", "zxc"), "vbn");
- assert_string_equal(bc_config_get(c, "bar", "lol"), "hehe");
- k = bc_config_list_keys(c, "foo");
- assert_non_null(k);
- assert_int_equal(bc_strv_length(k), 3);
- assert_string_equal(k[0], "asd");
- assert_string_equal(k[1], "qwe");
- assert_string_equal(k[2], "zxc");
- assert_null(k[3]);
- bc_strv_free(k);
- k = bc_config_list_keys(c, "bar");
- assert_non_null(k);
- assert_int_equal(bc_strv_length(k), 1);
- assert_string_equal(k[0], "lol");
- assert_null(k[1]);
- bc_strv_free(k);
- bc_config_free(c);
-
- a =
- "[foo]\r\n"
- "asd = zxc\r\n"
- "qwe = rty\r\n"
- "zxc = vbn\r\n"
- "\r\n"
- "[bar]\r\n"
- "lol = hehe\r\n";
- err = NULL;
- c = bc_config_parse(a, strlen(a), NULL, &err);
- assert_null(err);
- assert_non_null(c);
- assert_non_null(c->root);
- assert_int_equal(bc_trie_size(c->root), 2);
- s = bc_config_list_sections(c);
- assert_non_null(s);
- assert_int_equal(bc_strv_length(s), 2);
- assert_string_equal(s[0], "foo");
- assert_string_equal(s[1], "bar");
- assert_null(s[2]);
- bc_strv_free(s);
- assert_string_equal(bc_config_get(c, "foo", "asd"), "zxc");
- assert_string_equal(bc_config_get(c, "foo", "qwe"), "rty");
- assert_string_equal(bc_config_get(c, "foo", "zxc"), "vbn");
- assert_string_equal(bc_config_get(c, "bar", "lol"), "hehe");
- k = bc_config_list_keys(c, "foo");
- assert_non_null(k);
- assert_int_equal(bc_strv_length(k), 3);
- assert_string_equal(k[0], "asd");
- assert_string_equal(k[1], "qwe");
- assert_string_equal(k[2], "zxc");
- assert_null(k[3]);
- bc_strv_free(k);
- k = bc_config_list_keys(c, "bar");
- assert_non_null(k);
- assert_int_equal(bc_strv_length(k), 1);
- assert_string_equal(k[0], "lol");
- assert_null(k[1]);
- bc_strv_free(k);
- bc_config_free(c);
-}
-
-
-static void
-test_config_section_list(void **state)
-{
- const char *a =
- "[foo]\n"
- "asd = zxc\n"
- "qwe = rty\n"
- "zxc = vbn\n"
- "\n"
- "[bar]\n"
- "lol = hehe\n"
- " asdasdadssad ";
- bc_error_t *err = NULL;
- const char *sections[] = {"bar", NULL};
- bc_config_t *c = bc_config_parse(a, strlen(a), sections, &err);
- assert_null(err);
- assert_non_null(c);
- assert_non_null(c->root);
- assert_int_equal(bc_trie_size(c->root), 2);
- char **s = bc_config_list_sections(c);
- assert_non_null(s);
- assert_int_equal(bc_strv_length(s), 2);
- assert_string_equal(s[0], "foo");
- assert_string_equal(s[1], "bar");
- assert_null(s[2]);
- bc_strv_free(s);
- assert_string_equal(bc_config_get(c, "foo", "asd"), "zxc");
- assert_string_equal(bc_config_get(c, "foo", "qwe"), "rty");
- assert_string_equal(bc_config_get(c, "foo", "zxc"), "vbn");
- char **bar = bc_config_get_list(c, "bar");
- assert_non_null(bar);
- assert_string_equal(bar[0], "lol = hehe");
- assert_string_equal(bar[1], "asdasdadssad");
- assert_null(bar[2]);
- bc_strv_free(bar);
- char **k = bc_config_list_keys(c, "foo");
- assert_non_null(k);
- assert_int_equal(bc_strv_length(k), 3);
- assert_string_equal(k[0], "asd");
- assert_string_equal(k[1], "qwe");
- assert_string_equal(k[2], "zxc");
- assert_null(k[3]);
- bc_strv_free(k);
- k = bc_config_list_keys(c, "bar");
- assert_null(k);
- bc_config_free(c);
-
- a =
- "[foo]\n"
- "asd = zxc\n"
- "qwe = rty\n"
- "zxc = vbn\n"
- "\n"
- "[bar]\n"
- "lol = hehe\n"
- "asdasdadssad\n";
- err = NULL;
- c = bc_config_parse(a, strlen(a), sections, &err);
- assert_null(err);
- assert_non_null(c);
- assert_non_null(c->root);
- assert_int_equal(bc_trie_size(c->root), 2);
- s = bc_config_list_sections(c);
- assert_non_null(s);
- assert_int_equal(bc_strv_length(s), 2);
- assert_string_equal(s[0], "foo");
- assert_string_equal(s[1], "bar");
- assert_null(s[2]);
- bc_strv_free(s);
- assert_string_equal(bc_config_get(c, "foo", "asd"), "zxc");
- assert_string_equal(bc_config_get(c, "foo", "qwe"), "rty");
- assert_string_equal(bc_config_get(c, "foo", "zxc"), "vbn");
- bar = bc_config_get_list(c, "bar");
- assert_non_null(bar);
- assert_string_equal(bar[0], "lol = hehe");
- assert_string_equal(bar[1], "asdasdadssad");
- assert_null(bar[2]);
- bc_strv_free(bar);
- k = bc_config_list_keys(c, "foo");
- assert_non_null(k);
- assert_int_equal(bc_strv_length(k), 3);
- assert_string_equal(k[0], "asd");
- assert_string_equal(k[1], "qwe");
- assert_string_equal(k[2], "zxc");
- assert_null(k[3]);
- bc_strv_free(k);
- k = bc_config_list_keys(c, "bar");
- assert_null(k);
- bc_config_free(c);
-
- a =
- "[foo]\r\n"
- "asd = zxc\r\n"
- "qwe = rty\r\n"
- "zxc = vbn\r\n"
- "\r\n"
- "[bar]\r\n"
- "lol = hehe\r\n"
- "asdasdadssad\r\n";
- err = NULL;
- c = bc_config_parse(a, strlen(a), sections, &err);
- assert_null(err);
- assert_non_null(c);
- assert_non_null(c->root);
- assert_int_equal(bc_trie_size(c->root), 2);
- s = bc_config_list_sections(c);
- assert_non_null(s);
- assert_int_equal(bc_strv_length(s), 2);
- assert_string_equal(s[0], "foo");
- assert_string_equal(s[1], "bar");
- assert_null(s[2]);
- bc_strv_free(s);
- assert_string_equal(bc_config_get(c, "foo", "asd"), "zxc");
- assert_string_equal(bc_config_get(c, "foo", "qwe"), "rty");
- assert_string_equal(bc_config_get(c, "foo", "zxc"), "vbn");
- bar = bc_config_get_list(c, "bar");
- assert_non_null(bar);
- assert_string_equal(bar[0], "lol = hehe");
- assert_string_equal(bar[1], "asdasdadssad");
- assert_null(bar[2]);
- bc_strv_free(bar);
- k = bc_config_list_keys(c, "foo");
- assert_non_null(k);
- assert_int_equal(bc_strv_length(k), 3);
- assert_string_equal(k[0], "asd");
- assert_string_equal(k[1], "qwe");
- assert_string_equal(k[2], "zxc");
- assert_null(k[3]);
- bc_strv_free(k);
- k = bc_config_list_keys(c, "bar");
- assert_null(k);
- bc_config_free(c);
-}
-
-
-static void
-test_config_quoted_values(void **state)
-{
- const char *a =
- "[foo]\n"
- "a = \"lol\"\n"
- "b = \"lo\\\"l\"\n"
- "c = \"lo'l\"\n"
- "d = 'lol'\n"
- "e = 'lo\\'l'\n"
- "f = 'lo\"l'\n"
- "g = \\\\asd\n"
- "h = \"\\\\asd\"\n"
- "i = '\\\\asd'\n";
- bc_error_t *err = NULL;
- bc_config_t *c = bc_config_parse(a, strlen(a), NULL, &err);
- assert_null(err);
- assert_non_null(c);
- assert_non_null(c->root);
- assert_int_equal(bc_trie_size(c->root), 1);
- char **s = bc_config_list_sections(c);
- assert_non_null(s);
- assert_int_equal(bc_strv_length(s), 1);
- assert_string_equal(s[0], "foo");
- assert_null(s[1]);
- bc_strv_free(s);
- char **k = bc_config_list_keys(c, "foo");
- assert_non_null(k);
- assert_int_equal(bc_strv_length(k), 9);
- assert_string_equal(k[0], "a");
- assert_string_equal(k[1], "b");
- assert_string_equal(k[2], "c");
- assert_string_equal(k[3], "d");
- assert_string_equal(k[4], "e");
- assert_string_equal(k[5], "f");
- assert_string_equal(k[6], "g");
- assert_string_equal(k[7], "h");
- assert_string_equal(k[8], "i");
- assert_null(k[9]);
- bc_strv_free(k);
- assert_string_equal(bc_config_get(c, "foo", "a"), "lol");
- assert_string_equal(bc_config_get(c, "foo", "b"), "lo\"l");
- assert_string_equal(bc_config_get(c, "foo", "c"), "lo'l");
- assert_string_equal(bc_config_get(c, "foo", "d"), "'lol'");
- assert_string_equal(bc_config_get(c, "foo", "e"), "'lo'l'");
- assert_string_equal(bc_config_get(c, "foo", "f"), "'lo\"l'");
- assert_string_equal(bc_config_get(c, "foo", "g"), "\\asd");
- assert_string_equal(bc_config_get(c, "foo", "h"), "\\asd");
- assert_string_equal(bc_config_get(c, "foo", "i"), "'\\asd'");
- bc_config_free(c);
-
- a =
- "[foo]\n"
- "\"lol\"\n"
- "\"lo\\\"l\"\n"
- "\"lo'l\"\n"
- "'lol'\n"
- "'lo\\'l'\n"
- "'lo\"l'\n"
- "\\\\asd\n"
- "\"\\\\asd\"\n"
- "'\\\\asd'\n"
- "\n"
- "[bar]\n"
- "'lol = hehe'\n"
- "\" asdasdadssad \"";
- err = NULL;
- const char *sections[] = {"foo", "bar", NULL};
- c = bc_config_parse(a, strlen(a), sections, &err);
- assert_null(err);
- assert_non_null(c);
- assert_non_null(c->root);
- assert_int_equal(bc_trie_size(c->root), 2);
- s = bc_config_list_sections(c);
- assert_non_null(s);
- assert_int_equal(bc_strv_length(s), 2);
- assert_string_equal(s[0], "foo");
- assert_string_equal(s[1], "bar");
- assert_null(s[2]);
- bc_strv_free(s);
- char **bar = bc_config_get_list(c, "foo");
- assert_string_equal(bar[0], "lol");
- assert_string_equal(bar[1], "lo\"l");
- assert_string_equal(bar[2], "lo'l");
- assert_string_equal(bar[3], "'lol'");
- assert_string_equal(bar[4], "'lo'l'");
- assert_string_equal(bar[5], "'lo\"l'");
- assert_string_equal(bar[6], "\\asd");
- assert_string_equal(bar[7], "\\asd");
- assert_string_equal(bar[8], "'\\asd'");
- assert_null(bar[9]);
- bc_strv_free(bar);
- bar = bc_config_get_list(c, "bar");
- assert_non_null(bar);
- assert_string_equal(bar[0], "'lol = hehe'");
- assert_string_equal(bar[1], " asdasdadssad ");
- assert_null(bar[2]);
- bc_strv_free(bar);
- k = bc_config_list_keys(c, "foo");
- assert_null(k);
- k = bc_config_list_keys(c, "bar");
- assert_null(k);
- bc_config_free(c);
-}
-
-
-static void
-test_config_empty_values(void **state)
-{
- const char *a =
- "[foo]\n"
- "asd =";
- bc_error_t *err = NULL;
- bc_config_t *c = bc_config_parse(a, strlen(a), NULL, &err);
- assert_null(err);
- assert_non_null(c);
- assert_non_null(c->root);
- assert_int_equal(bc_trie_size(c->root), 1);
- char **s = bc_config_list_sections(c);
- assert_non_null(s);
- assert_int_equal(bc_strv_length(s), 1);
- assert_string_equal(s[0], "foo");
- assert_null(s[1]);
- bc_strv_free(s);
- assert_string_equal(bc_config_get(c, "foo", "asd"), "");
- char **k = bc_config_list_keys(c, "foo");
- assert_non_null(k);
- assert_int_equal(bc_strv_length(k), 1);
- assert_string_equal(k[0], "asd");
- assert_null(k[1]);
- bc_strv_free(k);
- bc_config_free(c);
-
- a =
- "[foo]\n"
- "asd = \n";
- err = NULL;
- c = bc_config_parse(a, strlen(a), NULL, &err);
- assert_null(err);
- assert_non_null(c);
- assert_non_null(c->root);
- assert_int_equal(bc_trie_size(c->root), 1);
- s = bc_config_list_sections(c);
- assert_non_null(s);
- assert_int_equal(bc_strv_length(s), 1);
- assert_string_equal(s[0], "foo");
- assert_null(s[1]);
- bc_strv_free(s);
- assert_string_equal(bc_config_get(c, "foo", "asd"), "");
- k = bc_config_list_keys(c, "foo");
- assert_non_null(k);
- assert_int_equal(bc_strv_length(k), 1);
- assert_string_equal(k[0], "asd");
- assert_null(k[1]);
- bc_strv_free(k);
- bc_config_free(c);
-
- a =
- "[foo]\n"
- "asd = foo\n"
- "qwe =";
- err = NULL;
- c = bc_config_parse(a, strlen(a), NULL, &err);
- assert_null(err);
- assert_non_null(c);
- assert_non_null(c->root);
- assert_int_equal(bc_trie_size(c->root), 1);
- s = bc_config_list_sections(c);
- assert_non_null(s);
- assert_int_equal(bc_strv_length(s), 1);
- assert_string_equal(s[0], "foo");
- assert_null(s[1]);
- bc_strv_free(s);
- assert_string_equal(bc_config_get(c, "foo", "asd"), "foo");
- assert_string_equal(bc_config_get(c, "foo", "qwe"), "");
- k = bc_config_list_keys(c, "foo");
- assert_non_null(k);
- assert_int_equal(bc_strv_length(k), 2);
- assert_string_equal(k[0], "asd");
- assert_string_equal(k[1], "qwe");
- assert_null(k[2]);
- bc_strv_free(k);
- bc_config_free(c);
-
- a =
- "[foo]\n"
- "asd = foo\n"
- "qwe = \n";
- err = NULL;
- c = bc_config_parse(a, strlen(a), NULL, &err);
- assert_null(err);
- assert_non_null(c);
- assert_non_null(c->root);
- assert_int_equal(bc_trie_size(c->root), 1);
- s = bc_config_list_sections(c);
- assert_non_null(s);
- assert_int_equal(bc_strv_length(s), 1);
- assert_string_equal(s[0], "foo");
- assert_null(s[1]);
- bc_strv_free(s);
- assert_string_equal(bc_config_get(c, "foo", "asd"), "foo");
- assert_string_equal(bc_config_get(c, "foo", "qwe"), "");
- k = bc_config_list_keys(c, "foo");
- assert_non_null(k);
- assert_int_equal(bc_strv_length(k), 2);
- assert_string_equal(k[0], "asd");
- assert_string_equal(k[1], "qwe");
- assert_null(k[2]);
- bc_strv_free(k);
- bc_config_free(c);
-
- a =
- "[foo]\n"
- "asd =\n"
- "qwe = foo";
- err = NULL;
- c = bc_config_parse(a, strlen(a), NULL, &err);
- assert_null(err);
- assert_non_null(c);
- assert_non_null(c->root);
- assert_int_equal(bc_trie_size(c->root), 1);
- s = bc_config_list_sections(c);
- assert_non_null(s);
- assert_int_equal(bc_strv_length(s), 1);
- assert_string_equal(s[0], "foo");
- assert_null(s[1]);
- bc_strv_free(s);
- assert_string_equal(bc_config_get(c, "foo", "asd"), "");
- assert_string_equal(bc_config_get(c, "foo", "qwe"), "foo");
- k = bc_config_list_keys(c, "foo");
- assert_non_null(k);
- assert_int_equal(bc_strv_length(k), 2);
- assert_string_equal(k[0], "asd");
- assert_string_equal(k[1], "qwe");
- assert_null(k[2]);
- bc_strv_free(k);
- bc_config_free(c);
-
- a =
- "[foo]\n"
- "asd = \n"
- "qwe = foo\n";
- err = NULL;
- c = bc_config_parse(a, strlen(a), NULL, &err);
- assert_null(err);
- assert_non_null(c);
- assert_non_null(c->root);
- assert_int_equal(bc_trie_size(c->root), 1);
- s = bc_config_list_sections(c);
- assert_non_null(s);
- assert_int_equal(bc_strv_length(s), 1);
- assert_string_equal(s[0], "foo");
- assert_null(s[1]);
- bc_strv_free(s);
- assert_string_equal(bc_config_get(c, "foo", "asd"), "");
- assert_string_equal(bc_config_get(c, "foo", "qwe"), "foo");
- k = bc_config_list_keys(c, "foo");
- assert_non_null(k);
- assert_int_equal(bc_strv_length(k), 2);
- assert_string_equal(k[0], "asd");
- assert_string_equal(k[1], "qwe");
- assert_null(k[2]);
- bc_strv_free(k);
- bc_config_free(c);
-
- a =
- "[foo]\r\n"
- "asd =";
- err = NULL;
- c = bc_config_parse(a, strlen(a), NULL, &err);
- assert_null(err);
- assert_non_null(c);
- assert_non_null(c->root);
- assert_int_equal(bc_trie_size(c->root), 1);
- s = bc_config_list_sections(c);
- assert_non_null(s);
- assert_int_equal(bc_strv_length(s), 1);
- assert_string_equal(s[0], "foo");
- assert_null(s[1]);
- bc_strv_free(s);
- assert_string_equal(bc_config_get(c, "foo", "asd"), "");
- k = bc_config_list_keys(c, "foo");
- assert_non_null(k);
- assert_int_equal(bc_strv_length(k), 1);
- assert_string_equal(k[0], "asd");
- assert_null(k[1]);
- bc_strv_free(k);
- bc_config_free(c);
-
- a =
- "[foo]\r\n"
- "asd = \r\n";
- err = NULL;
- c = bc_config_parse(a, strlen(a), NULL, &err);
- assert_null(err);
- assert_non_null(c);
- assert_non_null(c->root);
- assert_int_equal(bc_trie_size(c->root), 1);
- s = bc_config_list_sections(c);
- assert_non_null(s);
- assert_int_equal(bc_strv_length(s), 1);
- assert_string_equal(s[0], "foo");
- assert_null(s[1]);
- bc_strv_free(s);
- assert_string_equal(bc_config_get(c, "foo", "asd"), "");
- k = bc_config_list_keys(c, "foo");
- assert_non_null(k);
- assert_int_equal(bc_strv_length(k), 1);
- assert_string_equal(k[0], "asd");
- assert_null(k[1]);
- bc_strv_free(k);
- bc_config_free(c);
-
- a =
- "[foo]\r\n"
- "asd = foo\r\n"
- "qwe =";
- err = NULL;
- c = bc_config_parse(a, strlen(a), NULL, &err);
- assert_null(err);
- assert_non_null(c);
- assert_non_null(c->root);
- assert_int_equal(bc_trie_size(c->root), 1);
- s = bc_config_list_sections(c);
- assert_non_null(s);
- assert_int_equal(bc_strv_length(s), 1);
- assert_string_equal(s[0], "foo");
- assert_null(s[1]);
- bc_strv_free(s);
- assert_string_equal(bc_config_get(c, "foo", "asd"), "foo");
- assert_string_equal(bc_config_get(c, "foo", "qwe"), "");
- k = bc_config_list_keys(c, "foo");
- assert_non_null(k);
- assert_int_equal(bc_strv_length(k), 2);
- assert_string_equal(k[0], "asd");
- assert_string_equal(k[1], "qwe");
- assert_null(k[2]);
- bc_strv_free(k);
- bc_config_free(c);
-
- a =
- "[foo]\r\n"
- "asd = foo\r\n"
- "qwe = \r\n";
- err = NULL;
- c = bc_config_parse(a, strlen(a), NULL, &err);
- assert_null(err);
- assert_non_null(c);
- assert_non_null(c->root);
- assert_int_equal(bc_trie_size(c->root), 1);
- s = bc_config_list_sections(c);
- assert_non_null(s);
- assert_int_equal(bc_strv_length(s), 1);
- assert_string_equal(s[0], "foo");
- assert_null(s[1]);
- bc_strv_free(s);
- assert_string_equal(bc_config_get(c, "foo", "asd"), "foo");
- assert_string_equal(bc_config_get(c, "foo", "qwe"), "");
- k = bc_config_list_keys(c, "foo");
- assert_non_null(k);
- assert_int_equal(bc_strv_length(k), 2);
- assert_string_equal(k[0], "asd");
- assert_string_equal(k[1], "qwe");
- assert_null(k[2]);
- bc_strv_free(k);
- bc_config_free(c);
-
- a =
- "[foo]\r\n"
- "asd =\r\n"
- "qwe = foo";
- err = NULL;
- c = bc_config_parse(a, strlen(a), NULL, &err);
- assert_null(err);
- assert_non_null(c);
- assert_non_null(c->root);
- assert_int_equal(bc_trie_size(c->root), 1);
- s = bc_config_list_sections(c);
- assert_non_null(s);
- assert_int_equal(bc_strv_length(s), 1);
- assert_string_equal(s[0], "foo");
- assert_null(s[1]);
- bc_strv_free(s);
- assert_string_equal(bc_config_get(c, "foo", "asd"), "");
- assert_string_equal(bc_config_get(c, "foo", "qwe"), "foo");
- k = bc_config_list_keys(c, "foo");
- assert_non_null(k);
- assert_int_equal(bc_strv_length(k), 2);
- assert_string_equal(k[0], "asd");
- assert_string_equal(k[1], "qwe");
- assert_null(k[2]);
- bc_strv_free(k);
- bc_config_free(c);
-
- a =
- "[foo]\r\n"
- "asd = \r\n"
- "qwe = foo\r\n";
- err = NULL;
- c = bc_config_parse(a, strlen(a), NULL, &err);
- assert_null(err);
- assert_non_null(c);
- assert_non_null(c->root);
- assert_int_equal(bc_trie_size(c->root), 1);
- s = bc_config_list_sections(c);
- assert_non_null(s);
- assert_int_equal(bc_strv_length(s), 1);
- assert_string_equal(s[0], "foo");
- assert_null(s[1]);
- bc_strv_free(s);
- assert_string_equal(bc_config_get(c, "foo", "asd"), "");
- assert_string_equal(bc_config_get(c, "foo", "qwe"), "foo");
- k = bc_config_list_keys(c, "foo");
- assert_non_null(k);
- assert_int_equal(bc_strv_length(k), 2);
- assert_string_equal(k[0], "asd");
- assert_string_equal(k[1], "qwe");
- assert_null(k[2]);
- bc_strv_free(k);
- bc_config_free(c);
-}
-
-
-static void
-test_config_key_prefix(void **state)
-{
- const char *a =
- "[foo]\n"
- "LAST_FLIGHT = lol\n"
- "LAST_FLIGHT_SLUG = hehe\n";
- bc_error_t *err = NULL;
- bc_config_t *c = bc_config_parse(a, strlen(a), NULL, &err);
- assert_null(err);
- assert_non_null(c);
- assert_non_null(c->root);
- assert_int_equal(bc_trie_size(c->root), 1);
- char **s = bc_config_list_sections(c);
- assert_non_null(s);
- assert_int_equal(bc_strv_length(s), 1);
- assert_string_equal(s[0], "foo");
- assert_null(s[1]);
- bc_strv_free(s);
- char **k = bc_config_list_keys(c, "foo");
- assert_non_null(k);
- assert_int_equal(bc_strv_length(k), 2);
- assert_string_equal(k[0], "LAST_FLIGHT");
- assert_string_equal(k[1], "LAST_FLIGHT_SLUG");
- assert_null(k[2]);
- bc_strv_free(k);
- assert_string_equal(bc_config_get(c, "foo", "LAST_FLIGHT"), "lol");
- assert_string_equal(bc_config_get(c, "foo", "LAST_FLIGHT_SLUG"), "hehe");
- bc_config_free(c);
-}
-
-
-static void
-test_config_error_start(void **state)
-{
- const char *a =
- "asd\n"
- "[foo]";
- bc_error_t *err = NULL;
- bc_config_t *c = bc_config_parse(a, strlen(a), NULL, &err);
- assert_non_null(err);
- assert_null(c);
- assert_int_equal(err->type, BC_ERROR_CONFIG_PARSER);
- assert_string_equal(err->msg,
- "File must start with section.\n"
- "Error occurred near line 1, position 1: asd");
- bc_error_free(err);
-}
-
-
-static void
-test_config_error_section_with_newline(void **state)
-{
- const char *a =
- "[foo\nbar]";
- bc_error_t *err = NULL;
- bc_config_t *c = bc_config_parse(a, strlen(a), NULL, &err);
- assert_non_null(err);
- assert_null(c);
- assert_int_equal(err->type, BC_ERROR_CONFIG_PARSER);
- assert_string_equal(err->msg,
- "Section names can't have new lines.\n"
- "Error occurred near line 1, position 5: [foo");
- bc_error_free(err);
-}
-
-
-static void
-test_config_error_key_without_value(void **state)
-{
- const char *a =
- "[foobar]\n"
- "asd = 12\n"
- "foo";
- bc_error_t *err = NULL;
- bc_config_t *c = bc_config_parse(a, strlen(a), NULL, &err);
- assert_non_null(err);
- assert_null(c);
- assert_int_equal(err->type, BC_ERROR_CONFIG_PARSER);
- assert_string_equal(err->msg,
- "Key without value: foo.\n"
- "Error occurred near line 3, position 3: foo");
- bc_error_free(err);
- a =
- "[foobar]\n"
- "asd = 12\n"
- "foo\n";
- err = NULL;
- c = bc_config_parse(a, strlen(a), NULL, &err);
- assert_non_null(err);
- assert_null(c);
- assert_int_equal(err->type, BC_ERROR_CONFIG_PARSER);
- assert_string_equal(err->msg,
- "Key without value: foo.\n"
- "Error occurred near line 3, position 4: foo");
- bc_error_free(err);
-}
-
-
-int
-main(void)
-{
- const struct CMUnitTest tests[] = {
- cmocka_unit_test(test_config_empty),
- cmocka_unit_test(test_config_section_empty),
- cmocka_unit_test(test_config_section),
- cmocka_unit_test(test_config_section_multiple_keys),
- cmocka_unit_test(test_config_section_multiple_sections),
- cmocka_unit_test(test_config_section_list),
- cmocka_unit_test(test_config_quoted_values),
- cmocka_unit_test(test_config_empty_values),
- cmocka_unit_test(test_config_key_prefix),
- cmocka_unit_test(test_config_error_start),
- cmocka_unit_test(test_config_error_section_with_newline),
- cmocka_unit_test(test_config_error_key_without_value),
- };
- return cmocka_run_group_tests(tests, NULL, NULL);
-}
diff --git a/tests/common/check_sort.c b/tests/common/check_sort.c
deleted file mode 100644
index 2bc8751..0000000
--- a/tests/common/check_sort.c
+++ /dev/null
@@ -1,148 +0,0 @@
-/*
- * blogc: A blog compiler.
- * Copyright (C) 2014-2019 Rafael G. Martins <rafael@rafaelmartins.eng.br>
- *
- * This program can be distributed under the terms of the BSD License.
- * See the file LICENSE.
- */
-
-#include <stdarg.h>
-#include <stddef.h>
-#include <setjmp.h>
-#include <cmocka.h>
-#include <stdlib.h>
-#include <string.h>
-#include "../../src/common/utils.h"
-#include "../../src/common/sort.h"
-
-
-static int
-sort_func(void *a, void *b)
-{
- return strcmp((char*) a, (char*) b);
-}
-
-
-static void
-test_slist_sort_empty(void **state)
-{
- bc_slist_t *l = NULL;
- assert_null(bc_slist_sort(l, (bc_sort_func_t) sort_func));
-}
-
-
-static void
-test_slist_sort_single(void **state)
-{
- bc_slist_t *l = NULL;
- l = bc_slist_append(l, bc_strdup("a"));
-
- l = bc_slist_sort(l, (bc_sort_func_t) sort_func);
-
- assert_non_null(l);
- assert_string_equal(l->data, "a");
- assert_null(l->next);
-
- bc_slist_free_full(l, free);
-}
-
-
-static void
-test_slist_sort_sorted(void **state)
-{
- bc_slist_t *l = NULL;
- l = bc_slist_append(l, bc_strdup("a"));
- l = bc_slist_append(l, bc_strdup("b"));
- l = bc_slist_append(l, bc_strdup("c"));
-
- l = bc_slist_sort(l, (bc_sort_func_t) sort_func);
-
- assert_non_null(l);
- assert_string_equal(l->data, "a");
- assert_string_equal(l->next->data, "b");
- assert_string_equal(l->next->next->data, "c");
- assert_null(l->next->next->next);
-
- bc_slist_free_full(l, free);
-}
-
-
-static void
-test_slist_sort_reverse(void **state)
-{
- bc_slist_t *l = NULL;
- l = bc_slist_append(l, bc_strdup("d"));
- l = bc_slist_append(l, bc_strdup("c"));
- l = bc_slist_append(l, bc_strdup("b"));
- l = bc_slist_append(l, bc_strdup("a"));
-
- l = bc_slist_sort(l, (bc_sort_func_t) sort_func);
-
- assert_non_null(l);
- assert_string_equal(l->data, "a");
- assert_string_equal(l->next->data, "b");
- assert_string_equal(l->next->next->data, "c");
- assert_string_equal(l->next->next->next->data, "d");
- assert_null(l->next->next->next->next);
-
- bc_slist_free_full(l, free);
-}
-
-
-static void
-test_slist_sort_mixed1(void **state)
-{
- bc_slist_t *l = NULL;
- l = bc_slist_append(l, bc_strdup("a"));
- l = bc_slist_append(l, bc_strdup("d"));
- l = bc_slist_append(l, bc_strdup("c"));
- l = bc_slist_append(l, bc_strdup("b"));
-
- l = bc_slist_sort(l, (bc_sort_func_t) sort_func);
-
- assert_non_null(l);
- assert_string_equal(l->data, "a");
- assert_string_equal(l->next->data, "b");
- assert_string_equal(l->next->next->data, "c");
- assert_string_equal(l->next->next->next->data, "d");
- assert_null(l->next->next->next->next);
-
- bc_slist_free_full(l, free);
-}
-
-
-static void
-test_slist_sort_mixed2(void **state)
-{
- bc_slist_t *l = NULL;
- l = bc_slist_append(l, bc_strdup("c"));
- l = bc_slist_append(l, bc_strdup("b"));
- l = bc_slist_append(l, bc_strdup("a"));
- l = bc_slist_append(l, bc_strdup("d"));
-
- l = bc_slist_sort(l, (bc_sort_func_t) sort_func);
-
- assert_non_null(l);
- assert_string_equal(l->data, "a");
- assert_string_equal(l->next->data, "b");
- assert_string_equal(l->next->next->data, "c");
- assert_string_equal(l->next->next->next->data, "d");
- assert_null(l->next->next->next->next);
-
- bc_slist_free_full(l, free);
-}
-
-
-int
-main(void)
-{
- const struct CMUnitTest tests[] = {
- cmocka_unit_test(test_slist_sort_empty),
- cmocka_unit_test(test_slist_sort_single),
- cmocka_unit_test(test_slist_sort_sorted),
- cmocka_unit_test(test_slist_sort_reverse),
- cmocka_unit_test(test_slist_sort_mixed1),
- cmocka_unit_test(test_slist_sort_mixed2),
- };
- return cmocka_run_group_tests(tests, NULL, NULL);
-}
diff --git a/tests/common/check_stdin.c b/tests/common/check_stdin.c
deleted file mode 100644
index 5616ee9..0000000
--- a/tests/common/check_stdin.c
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- * blogc: A blog compiler.
- * Copyright (C) 2014-2020 Rafael G. Martins <rafael@rafaelmartins.eng.br>
- *
- * This program can be distributed under the terms of the BSD License.
- * See the file LICENSE.
- */
-
-#include <stdarg.h>
-#include <stddef.h>
-#include <setjmp.h>
-#include <cmocka.h>
-#include <stdlib.h>
-#include <string.h>
-#include <stdio.h>
-#include "../../src/common/stdin.h"
-
-
-int
-__wrap_fgetc(FILE *stream)
-{
- assert_int_equal(fileno(stream), fileno(stdin));
- return mock_type(int);
-}
-
-
-static void
-test_read(void **state)
-{
- assert_null(bc_stdin_read(NULL));
- will_return(__wrap_fgetc, EOF);
- size_t len;
- char *t = bc_stdin_read(&len);
- assert_non_null(t);
- assert_string_equal(t, "");
- assert_int_equal(len, 0);
- free(t);
- will_return(__wrap_fgetc, 'b');
- will_return(__wrap_fgetc, 'o');
- will_return(__wrap_fgetc, 'l');
- will_return(__wrap_fgetc, 'a');
- will_return(__wrap_fgetc, EOF);
- t = bc_stdin_read(&len);
- assert_non_null(t);
- assert_string_equal(t, "bola");
- assert_int_equal(len, 4);
- free(t);
-}
-
-
-int
-main(void)
-{
- const struct CMUnitTest tests[] = {
- cmocka_unit_test(test_read),
- };
- return cmocka_run_group_tests(tests, NULL, NULL);
-}
diff --git a/tests/common/check_utf8.c b/tests/common/check_utf8.c
deleted file mode 100644
index 95e2eab..0000000
--- a/tests/common/check_utf8.c
+++ /dev/null
@@ -1,105 +0,0 @@
-/*
- * blogc: A blog compiler.
- * Copyright (C) 2014-2019 Rafael G. Martins <rafael@rafaelmartins.eng.br>
- *
- * This program can be distributed under the terms of the BSD License.
- * See the file LICENSE.
- */
-
-#include <stdarg.h>
-#include <stddef.h>
-#include <setjmp.h>
-#include <cmocka.h>
-#include <stdbool.h>
-#include <stdint.h>
-#include <string.h>
-#include "../../src/common/utf8.h"
-#include "../../src/common/utils.h"
-
-// this file MUST be ASCII
-
-
-static void
-test_utf8_valid(void **state)
-{
- const char *c = "<a href=\"{{ BASE_URL }}/page/{{ PREVIOUS_PAGE }}/\">"
- "\xc2\xab Newer posts</a>";
- assert_true(bc_utf8_validate((uint8_t*) c, strlen(c)));
- const uint8_t d[3] = {0xe2, 0x82, 0xac}; // euro sign
- assert_true(bc_utf8_validate(d, 3));
- const uint8_t e[3] = {0xef, 0xbb, 0xbf}; // utf-8 bom
- assert_true(bc_utf8_validate(e, 3));
-}
-
-
-static void
-test_utf8_invalid(void **state)
-{
- const uint8_t c[4] = {0xff, 0xfe, 0xac, 0x20}; // utf-16
- assert_false(bc_utf8_validate(c, 4));
- const uint8_t d[8] = {0xff, 0xfe, 0x00, 0x00, 0xac, 0x20, 0x00, 0x00}; // utf-32
- assert_false(bc_utf8_validate(d, 8));
- const uint8_t e[6] = {'a', 0xff, 0xfe, 0xac, 0x20, 'b'}; // utf-16
- assert_false(bc_utf8_validate(e, 6));
- const uint8_t f[10] = {'a', 0xff, 0xfe, 0x00, 0x00, 0xac, 0x20, 0x00, 0x00, 'b'}; // utf-32
- assert_false(bc_utf8_validate(f, 10));
-}
-
-
-static void
-test_utf8_valid_str(void **state)
-{
- bc_string_t *s = bc_string_new();
- bc_string_append(s,
- "<a href=\"{{ BASE_URL }}/page/{{ PREVIOUS_PAGE }}/\">\xc2\xab Newer "
- "posts</a>");
- assert_true(bc_utf8_validate_str(s));
- bc_string_free(s, true);
- s = bc_string_new();
- bc_string_append(s, "\xe2\x82\xac");
- assert_true(bc_utf8_validate_str(s));
- bc_string_free(s, true);
-}
-
-
-static void
-test_utf8_invalid_str(void **state)
-{
- bc_string_t *s = bc_string_new();
- bc_string_append(s, "\xff\xfe\xac\x20"); // utf-16
- assert_false(bc_utf8_validate_str(s));
- bc_string_free(s, true);
- s = bc_string_new();
- bc_string_append(s, "\xff\xfe\x00\x00\xac\x20\x00\x00"); // utf-32
- assert_false(bc_utf8_validate_str(s));
- bc_string_free(s, true);
-}
-
-
-static void
-test_utf8_skip_bom(void **state)
-{
- const uint8_t c[4] = {0xef, 0xbb, 0xbf, 0};
- assert_int_equal(bc_utf8_skip_bom(c, 2), 0);
- assert_int_equal(bc_utf8_skip_bom(c, 3), 3);
- assert_string_equal(c + 3, "");
- const uint8_t d[8] = {0xef, 0xbb, 0xbf, 'b', 'o', 'l', 'a', 0};
- assert_int_equal(bc_utf8_skip_bom(d, 7), 3);
- assert_string_equal(d + 3, "bola");
- const uint8_t e[5] = "bola";
- assert_int_equal(bc_utf8_skip_bom(e, 4), 0);
-}
-
-
-int
-main(void)
-{
- const struct CMUnitTest tests[] = {
- cmocka_unit_test(test_utf8_valid),
- cmocka_unit_test(test_utf8_invalid),
- cmocka_unit_test(test_utf8_valid_str),
- cmocka_unit_test(test_utf8_invalid_str),
- cmocka_unit_test(test_utf8_skip_bom),
- };
- return cmocka_run_group_tests(tests, NULL, NULL);
-}