From 8cac2c3e3a61b64b9a9855dec413239bcec7f9d2 Mon Sep 17 00:00:00 2001 From: "Rafael G. Martins" Date: Tue, 27 Dec 2016 02:29:54 +0100 Subject: make: implemented a build tool for blogc so, this is basically what happens when you don't have anything better to do in the christmas weekend. most of this code was written in the last 2 or 3 days. i'd like to thank the chivas brothers, the weather and my psychological problems for this achievement. on a serious note, this tool still needs a man page, more tests, and the aws lambda function should be adapted to use it instead of (or together with) make/busybox. also, while talking about aws lambda, this tool can be nicely embedded into the blogc binary, to produce a single "small" static binary for usage in lambda ;) --- tests/blogc-make/check_settings.c | 158 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 158 insertions(+) create mode 100644 tests/blogc-make/check_settings.c (limited to 'tests/blogc-make') diff --git a/tests/blogc-make/check_settings.c b/tests/blogc-make/check_settings.c new file mode 100644 index 0000000..0078073 --- /dev/null +++ b/tests/blogc-make/check_settings.c @@ -0,0 +1,158 @@ +/* + * blogc: A blog compiler. + * Copyright (C) 2015-2016 Rafael G. Martins + * + * This program can be distributed under the terms of the BSD License. + * See the file LICENSE. + */ + +#include +#include +#include +#include + +#include +#include + +#include "../../src/blogc-make/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, + "[environment] key required but not found or empty: AUTHOR_NAME"); + bc_error_free(err); +} + + +static void +test_settings(void **state) +{ + const char *a = + "[settings]\n" + "output_dir = bola\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" + "output_dir = bola\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_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_null(s->root_dir); + assert_int_equal(bc_trie_size(s->env), 7); + assert_string_equal(bc_trie_lookup(s->env, "BOLA"), "asd"); + assert_string_equal(bc_trie_lookup(s->env, "GUDA"), "qwe"); + assert_string_equal(bc_trie_lookup(s->env, "AUTHOR_NAME"), "chunda"); + assert_string_equal(bc_trie_lookup(s->env, "AUTHOR_EMAIL"), "chunda@example.com"); + assert_string_equal(bc_trie_lookup(s->env, "SITE_TITLE"), "Fuuuuuuuuu"); + assert_string_equal(bc_trie_lookup(s->env, "SITE_TAGLINE"), "My cool tagline"); + assert_string_equal(bc_trie_lookup(s->env, "BASE_DOMAIN"), "http://example.com"); + assert_int_equal(bc_trie_size(s->settings), 14); + 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, "output_dir"), "bola"); + 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_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_files); + assert_string_equal(s->copy_files[0], "jjjj"); + assert_string_equal(s->copy_files[1], "kkkk"); + assert_string_equal(s->copy_files[2], "llll"); + assert_null(s->copy_files[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 UnitTest tests[] = { + unit_test(test_settings_empty), + unit_test(test_settings), + unit_test(test_settings2), + }; + return run_tests(tests); +} -- cgit v1.2.3-18-g5258