aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRafael G. Martins <rafael@rafaelmartins.eng.br>2015-06-13 03:32:21 -0300
committerRafael G. Martins <rafael@rafaelmartins.eng.br>2015-06-13 03:32:21 -0300
commit3aeccf252c8c266b51c1a2cc1dc9e9e3d5bf2f90 (patch)
treebc7a75a51d2fbf180c9d63ee1164b93ca21b9b6f
parent168de93a068e489eb96c541172de5e43e13a5873 (diff)
downloadblogc-3aeccf252c8c266b51c1a2cc1dc9e9e3d5bf2f90.tar.gz
blogc-3aeccf252c8c266b51c1a2cc1dc9e9e3d5bf2f90.tar.bz2
blogc-3aeccf252c8c266b51c1a2cc1dc9e9e3d5bf2f90.zip
content-parser: implemented excerpt, and now for good!
-rw-r--r--src/content-parser.c41
-rw-r--r--src/content-parser.h2
-rw-r--r--src/source-parser.c9
-rw-r--r--tests/check_content_parser.c210
-rw-r--r--tests/check_loader.c3
-rw-r--r--tests/check_source_parser.c54
6 files changed, 267 insertions, 52 deletions
diff --git a/src/content-parser.c b/src/content-parser.c
index aa76777..fa17ab8 100644
--- a/src/content-parser.c
+++ b/src/content-parser.c
@@ -22,6 +22,8 @@
typedef enum {
CONTENT_START_LINE = 1,
+ CONTENT_EXCERPT,
+ CONTENT_EXCERPT_END,
CONTENT_HEADER,
CONTENT_HEADER_TITLE_START,
CONTENT_HEADER_TITLE,
@@ -355,7 +357,7 @@ blogc_content_parse_inline(const char *src)
char*
-blogc_content_parse(const char *src)
+blogc_content_parse(const char *src, size_t *end_excerpt)
{
// src is always nul-terminated.
size_t src_len = strlen(src);
@@ -364,6 +366,7 @@ blogc_content_parse(const char *src)
size_t start = 0;
size_t start2 = 0;
size_t end = 0;
+ size_t eend = 0;
unsigned int header_level = 0;
char *prefix = NULL;
@@ -393,6 +396,13 @@ blogc_content_parse(const char *src)
if (c == '\n' || c == '\r' || is_last)
break;
start = current;
+ if (c == '.') {
+ if (end_excerpt != NULL) {
+ eend = rv->len; // fuck it
+ state = CONTENT_EXCERPT;
+ break;
+ }
+ }
if (c == '#') {
header_level = 1;
state = CONTENT_HEADER;
@@ -426,6 +436,33 @@ blogc_content_parse(const char *src)
state = CONTENT_PARAGRAPH;
break;
+ case CONTENT_EXCERPT:
+ if (end_excerpt != NULL) {
+ if (c == '.')
+ break;
+ if (c == '\n' || c == '\r') {
+ //*end_excerpt = eend;
+ //state = CONTENT_START_LINE;
+ state = CONTENT_EXCERPT_END;
+ break;
+ }
+ }
+ eend = 0;
+ state = CONTENT_PARAGRAPH;
+ break;
+
+ case CONTENT_EXCERPT_END:
+ if (end_excerpt != NULL) {
+ if (c == '\n' || c == '\r') {
+ *end_excerpt = eend;
+ state = CONTENT_START_LINE;
+ break;
+ }
+ }
+ eend = 0;
+ state = CONTENT_PARAGRAPH_END;
+ break;
+
case CONTENT_HEADER:
if (c == '#') {
header_level += 1;
@@ -521,7 +558,7 @@ blogc_content_parse(const char *src)
else
b_string_append_printf(tmp_str, "%s\n", l->data);
}
- tmp = blogc_content_parse(tmp_str->str);
+ tmp = blogc_content_parse(tmp_str->str, NULL);
b_string_append_printf(rv, "<blockquote>%s</blockquote>\n",
tmp);
free(tmp);
diff --git a/src/content-parser.h b/src/content-parser.h
index d0a0732..ec441c6 100644
--- a/src/content-parser.h
+++ b/src/content-parser.h
@@ -13,6 +13,6 @@
#include "error.h"
char* blogc_content_parse_inline(const char *src);
-char* blogc_content_parse(const char *src);
+char* blogc_content_parse(const char *src, size_t *end_excerpt);
#endif /* _CONTENT_PARSER_H */
diff --git a/src/source-parser.c b/src/source-parser.c
index f0fca29..050082f 100644
--- a/src/source-parser.c
+++ b/src/source-parser.c
@@ -38,6 +38,7 @@ blogc_source_parse(const char *src, size_t src_len, blogc_error_t **err)
size_t current = 0;
size_t start = 0;
+ size_t end_excerpt = 0;
char *key = NULL;
char *tmp = NULL;
@@ -148,7 +149,13 @@ blogc_source_parse(const char *src, size_t src_len, blogc_error_t **err)
if (current == (src_len - 1)) {
tmp = b_strndup(src + start, src_len - start);
b_trie_insert(rv, "RAW_CONTENT", tmp);
- b_trie_insert(rv, "CONTENT", blogc_content_parse(tmp));
+ b_trie_insert(rv, "CONTENT", blogc_content_parse(tmp, &end_excerpt));
+ if (end_excerpt != 0)
+ b_trie_insert(rv, "EXCERPT",
+ b_strndup(b_trie_lookup(rv, "CONTENT"), end_excerpt));
+ else
+ b_trie_insert(rv, "EXCERPT",
+ b_strdup(b_trie_lookup(rv, "CONTENT")));
}
break;
}
diff --git a/tests/check_content_parser.c b/tests/check_content_parser.c
index 9b1d318..f19d7dc 100644
--- a/tests/check_content_parser.c
+++ b/tests/check_content_parser.c
@@ -22,6 +22,7 @@
static void
test_content_parse(void **state)
{
+ size_t l = 0;
char *html = blogc_content_parse(
"# um\n"
"## dois\n"
@@ -57,8 +58,9 @@ test_content_parse(void **state)
"guda\n"
"yay\n"
"\n"
- "**bola**\n");
+ "**bola**\n", &l);
assert_non_null(html);
+ assert_int_equal(l, 0);
assert_string_equal(html,
"<h1>um</h1>\n"
"<h2>dois</h2>\n"
@@ -95,14 +97,56 @@ test_content_parse(void **state)
}
+static void
+test_content_parse_with_excerpt(void **state)
+{
+ size_t l = 0;
+ char *html = blogc_content_parse(
+ "# test\n"
+ "\n"
+ "chunda\n"
+ "\n"
+ "..\n"
+ "\n"
+ "guda\n"
+ "lol", &l);
+ assert_non_null(html);
+ assert_int_equal(l, 28);
+ assert_string_equal(html,
+ "<h1>test</h1>\n"
+ "<p>chunda</p>\n"
+ "<p>guda\n"
+ "lol</p>\n");
+ free(html);
+ l = 0;
+ html = blogc_content_parse(
+ "# test\n"
+ "\n"
+ "chunda\n"
+ "\n"
+ "...\n"
+ "\n"
+ "guda\n"
+ "lol", &l);
+ assert_non_null(html);
+ assert_int_equal(l, 28);
+ assert_string_equal(html,
+ "<h1>test</h1>\n"
+ "<p>chunda</p>\n"
+ "<p>guda\n"
+ "lol</p>\n");
+ free(html);
+}
+
+
void
test_content_parse_header(void **state)
{
- char *html = blogc_content_parse("## bola");
+ char *html = blogc_content_parse("## bola", NULL);
assert_non_null(html);
assert_string_equal(html, "<h2>bola</h2>\n");
free(html);
- html = blogc_content_parse("## bola\n");
+ html = blogc_content_parse("## bola\n", NULL);
assert_non_null(html);
assert_string_equal(html, "<h2>bola</h2>\n");
free(html);
@@ -111,7 +155,7 @@ test_content_parse_header(void **state)
"\n"
"## bola\n"
"\n"
- "guda\n");
+ "guda\n", NULL);
assert_non_null(html);
assert_string_equal(html,
"<p>bola</p>\n"
@@ -124,11 +168,11 @@ test_content_parse_header(void **state)
void
test_content_parse_html(void **state)
{
- char *html = blogc_content_parse("<div>\n</div>");
+ char *html = blogc_content_parse("<div>\n</div>", NULL);
assert_non_null(html);
assert_string_equal(html, "<div>\n</div>\n");
free(html);
- html = blogc_content_parse("<div>\n</div>\n");
+ html = blogc_content_parse("<div>\n</div>\n", NULL);
assert_non_null(html);
assert_string_equal(html, "<div>\n</div>\n");
free(html);
@@ -138,7 +182,7 @@ test_content_parse_html(void **state)
"<div>\n"
"</div>\n"
"\n"
- "chunda\n");
+ "chunda\n", NULL);
assert_non_null(html);
assert_string_equal(html,
"<p>bola</p>\n"
@@ -151,14 +195,14 @@ test_content_parse_html(void **state)
void
test_content_parse_blockquote(void **state)
{
- char *html = blogc_content_parse("> bola\n> guda");
+ char *html = blogc_content_parse("> bola\n> guda", 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");
+ html = blogc_content_parse("> bola\n> guda\n", NULL);
assert_non_null(html);
assert_string_equal(html,
"<blockquote><p>bola\n"
@@ -171,7 +215,7 @@ test_content_parse_blockquote(void **state)
"> bola\n"
"> guda\n"
"\n"
- "chunda\n");
+ "chunda\n", NULL);
assert_non_null(html);
assert_string_equal(html,
"<p>bola</p>\n"
@@ -186,13 +230,13 @@ test_content_parse_blockquote(void **state)
void
test_content_parse_code(void **state)
{
- char *html = blogc_content_parse(" bola\n guda");
+ char *html = blogc_content_parse(" bola\n guda", 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");
+ html = blogc_content_parse(" bola\n guda\n", NULL);
assert_non_null(html);
assert_string_equal(html,
"<pre><code>bola\n"
@@ -204,7 +248,7 @@ test_content_parse_code(void **state)
" bola\n"
" guda\n"
"\n"
- "chunda\n");
+ "chunda\n", NULL);
assert_non_null(html);
assert_string_equal(html,
"<p>bola</p>\n"
@@ -218,28 +262,28 @@ test_content_parse_code(void **state)
void
test_content_parse_horizontal_rule(void **state)
{
- char *html = blogc_content_parse("bola\nguda\n\n**");
+ char *html = blogc_content_parse("bola\nguda\n\n**", 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++++");
+ html = blogc_content_parse("bola\nguda\n\n++++", 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");
+ html = blogc_content_parse("bola\nguda\n\n--\n", 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");
+ html = blogc_content_parse("bola\nguda\n\n****\n", NULL);
assert_non_null(html);
assert_string_equal(html,
"<p>bola\n"
@@ -251,7 +295,7 @@ test_content_parse_horizontal_rule(void **state)
"\n"
"**\n"
"\n"
- "chunda\n");
+ "chunda\n", NULL);
assert_non_null(html);
assert_string_equal(html,
"<p>bola</p>\n"
@@ -263,7 +307,7 @@ test_content_parse_horizontal_rule(void **state)
"\n"
"----\n"
"\n"
- "chunda\n");
+ "chunda\n", NULL);
assert_non_null(html);
assert_string_equal(html,
"<p>bola</p>\n"
@@ -281,7 +325,7 @@ test_content_parse_unordered_list(void **state)
"\n"
"* asd\n"
"* qwe\n"
- "* zxc");
+ "* zxc", NULL);
assert_non_null(html);
assert_string_equal(html,
"<p>lol</p>\n"
@@ -296,7 +340,7 @@ test_content_parse_unordered_list(void **state)
"\n"
"* asd\n"
"* qwe\n"
- "* zxc\n");
+ "* zxc\n", NULL);
assert_non_null(html);
assert_string_equal(html,
"<p>lol</p>\n"
@@ -313,7 +357,7 @@ test_content_parse_unordered_list(void **state)
"* qwe\n"
"* zxc\n"
"\n"
- "fuuuu\n");
+ "fuuuu\n", NULL);
assert_non_null(html);
assert_string_equal(html,
"<p>lol</p>\n"
@@ -335,7 +379,7 @@ test_content_parse_ordered_list(void **state)
"\n"
"1. asd\n"
"2. qwe\n"
- "3. zxc");
+ "3. zxc", NULL);
assert_non_null(html);
assert_string_equal(html,
"<p>lol</p>\n"
@@ -350,7 +394,7 @@ test_content_parse_ordered_list(void **state)
"\n"
"1. asd\n"
"2. qwe\n"
- "3. zxc\n");
+ "3. zxc\n", NULL);
assert_non_null(html);
assert_string_equal(html,
"<p>lol</p>\n"
@@ -367,7 +411,7 @@ test_content_parse_ordered_list(void **state)
"2. qwe\n"
"3. zxc\n"
"\n"
- "fuuuu\n");
+ "fuuuu\n", NULL);
assert_non_null(html);
assert_string_equal(html,
"<p>lol</p>\n"
@@ -380,7 +424,7 @@ test_content_parse_ordered_list(void **state)
free(html);
html = blogc_content_parse(
"1.\nasd\n"
- "2. qwe\n");
+ "2. qwe\n", NULL);
assert_non_null(html);
assert_string_equal(html,
"<p>1.\n"
@@ -389,7 +433,7 @@ test_content_parse_ordered_list(void **state)
"<li>qwe</li>\n"
"</ol>\n");
free(html);
- html = blogc_content_parse("1.\n");
+ html = blogc_content_parse("1.\n", NULL);
assert_non_null(html);
assert_string_equal(html,
"<ol>\n"
@@ -399,13 +443,87 @@ test_content_parse_ordered_list(void **state)
}
+static void
+test_content_parse_invalid_excerpt(void **state)
+{
+ size_t l = 0;
+ char *html = blogc_content_parse(
+ "# test\n"
+ "\n"
+ "chunda\n"
+ "..\n"
+ "\n"
+ "guda\n"
+ "lol", &l);
+ assert_non_null(html);
+ assert_int_equal(l, 0);
+ assert_string_equal(html,
+ "<h1>test</h1>\n"
+ "<p>chunda\n"
+ "..</p>\n"
+ "<p>guda\n"
+ "lol</p>\n");
+ free(html);
+ l = 0;
+ html = blogc_content_parse(
+ "# test\n"
+ "\n"
+ "chunda\n"
+ "\n"
+ "...\n"
+ "guda\n"
+ "lol", &l);
+ assert_non_null(html);
+ assert_int_equal(l, 0);
+ assert_string_equal(html,
+ "<h1>test</h1>\n"
+ "<p>chunda</p>\n"
+ "<p>...\n"
+ "guda\n"
+ "lol</p>\n");
+ free(html);
+ l = 0;
+ html = blogc_content_parse(
+ "# test\n"
+ "\n"
+ "chunda..\n"
+ "\n"
+ "guda\n"
+ "lol", &l);
+ assert_non_null(html);
+ assert_int_equal(l, 0);
+ assert_string_equal(html,
+ "<h1>test</h1>\n"
+ "<p>chunda..</p>\n"
+ "<p>guda\n"
+ "lol</p>\n");
+ free(html);
+ l = 0;
+ html = blogc_content_parse(
+ "# test\n"
+ "\n"
+ "chunda\n"
+ "\n"
+ "...guda\n"
+ "lol", &l);
+ assert_non_null(html);
+ assert_int_equal(l, 0);
+ assert_string_equal(html,
+ "<h1>test</h1>\n"
+ "<p>chunda</p>\n"
+ "<p>...guda\n"
+ "lol</p>\n");
+ free(html);
+}
+
+
void
test_content_parse_invalid_header(void **state)
{
char *html = blogc_content_parse(
"asd\n"
"\n"
- "##bola\n");
+ "##bola\n", NULL);
assert_non_null(html);
assert_string_equal(html,
"<p>asd</p>\n"
@@ -422,7 +540,7 @@ test_content_parse_invalid_header_empty(void **state)
"\n"
"##\n"
"\n"
- "qwe\n");
+ "qwe\n", NULL);
assert_non_null(html);
assert_string_equal(html,
"<p>asd</p>\n"
@@ -439,7 +557,7 @@ test_content_parse_invalid_blockquote(void **state)
char *html = blogc_content_parse(
"> asd\n"
"> bola\n"
- "> foo\n");
+ "> foo\n", NULL);
assert_non_null(html);
assert_string_equal(html,
"<p>&gt; asd\n"
@@ -455,7 +573,7 @@ test_content_parse_invalid_code(void **state)
char *html = blogc_content_parse(
" asd\n"
" bola\n"
- " foo\n");
+ " foo\n", NULL);
assert_non_null(html);
assert_string_equal(html,
"<p> asd\n"
@@ -469,11 +587,11 @@ void
test_content_parse_invalid_horizontal_rule(void **state)
{
// this generates invalid html, but...
- char *html = blogc_content_parse("** asd");
+ char *html = blogc_content_parse("** asd", NULL);
assert_non_null(html);
assert_string_equal(html, "<p><strong> asd</p>\n");
free(html);
- html = blogc_content_parse("** asd\n");
+ html = blogc_content_parse("** asd\n", NULL);
assert_non_null(html);
assert_string_equal(html, "<p><strong> asd</p>\n");
free(html);
@@ -486,7 +604,7 @@ test_content_parse_invalid_unordered_list(void **state)
// more invalid html
char *html = blogc_content_parse(
"* asd\n"
- "1. qwe");
+ "1. qwe", NULL);
assert_non_null(html);
assert_string_equal(html,
"<p><em> asd\n"
@@ -495,7 +613,7 @@ test_content_parse_invalid_unordered_list(void **state)
html = blogc_content_parse(
"* asd\n"
"1. qwe\n"
- "\n");
+ "\n", NULL);
assert_non_null(html);
assert_string_equal(html,
"<p><em> asd\n"
@@ -503,7 +621,7 @@ test_content_parse_invalid_unordered_list(void **state)
free(html);
html = blogc_content_parse(
"* asd\n"
- "1. qwe\n");
+ "1. qwe\n", NULL);
assert_non_null(html);
assert_string_equal(html,
"<p><em> asd\n"
@@ -511,7 +629,7 @@ test_content_parse_invalid_unordered_list(void **state)
free(html);
html = blogc_content_parse(
"* asd\n"
- "1. qwe\n");
+ "1. qwe\n", NULL);
assert_non_null(html);
assert_string_equal(html,
"<p><em> asd\n"
@@ -523,7 +641,7 @@ test_content_parse_invalid_unordered_list(void **state)
"* asd\n"
"1. qwe\n"
"\n"
- "poi\n");
+ "poi\n", NULL);
assert_non_null(html);
assert_string_equal(html,
"<p>chunda</p>\n"
@@ -540,7 +658,7 @@ test_content_parse_invalid_ordered_list(void **state)
// more invalid html
char *html = blogc_content_parse(
"1. asd\n"
- "* qwe");
+ "* qwe", NULL);
assert_non_null(html);
assert_string_equal(html,
"<p>1. asd\n"
@@ -549,7 +667,7 @@ test_content_parse_invalid_ordered_list(void **state)
html = blogc_content_parse(
"1. asd\n"
"* qwe\n"
- "\n");
+ "\n", NULL);
assert_non_null(html);
assert_string_equal(html,
"<p>1. asd\n"
@@ -557,7 +675,7 @@ test_content_parse_invalid_ordered_list(void **state)
free(html);
html = blogc_content_parse(
"1. asd\n"
- "* qwe\n");
+ "* qwe\n", NULL);
assert_non_null(html);
assert_string_equal(html,
"<p>1. asd\n"
@@ -565,7 +683,7 @@ test_content_parse_invalid_ordered_list(void **state)
free(html);
html = blogc_content_parse(
"1. asd\n"
- "* qwe\n");
+ "* qwe\n", NULL);
assert_non_null(html);
assert_string_equal(html,
"<p>1. asd\n"
@@ -577,7 +695,7 @@ test_content_parse_invalid_ordered_list(void **state)
"1. asd\n"
"* qwe\n"
"\n"
- "poi\n");
+ "poi\n", NULL);
assert_non_null(html);
assert_string_equal(html,
"<p>chunda</p>\n"
@@ -587,7 +705,7 @@ test_content_parse_invalid_ordered_list(void **state)
free(html);
html = blogc_content_parse(
"1 asd\n"
- "* qwe\n");
+ "* qwe\n", NULL);
assert_non_null(html);
assert_string_equal(html,
"<p>1 asd\n"
@@ -595,7 +713,7 @@ test_content_parse_invalid_ordered_list(void **state)
free(html);
html = blogc_content_parse(
"a. asd\n"
- "2. qwe\n");
+ "2. qwe\n", NULL);
assert_non_null(html);
assert_string_equal(html,
"<p>a. asd\n"
@@ -913,6 +1031,7 @@ main(void)
{
const UnitTest tests[] = {
unit_test(test_content_parse),
+ unit_test(test_content_parse_with_excerpt),
unit_test(test_content_parse_header),
unit_test(test_content_parse_html),
unit_test(test_content_parse_blockquote),
@@ -920,6 +1039,7 @@ main(void)
unit_test(test_content_parse_horizontal_rule),
unit_test(test_content_parse_unordered_list),
unit_test(test_content_parse_ordered_list),
+ 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),
diff --git a/tests/check_loader.c b/tests/check_loader.c
index 865d598..f5be3e7 100644
--- a/tests/check_loader.c
+++ b/tests/check_loader.c
@@ -113,9 +113,10 @@ test_source_parse_from_file(void **state)
b_trie_t *t = blogc_source_parse_from_file("bola.txt", &err);
assert_null(err);
assert_non_null(t);
- assert_int_equal(b_trie_size(t), 4);
+ assert_int_equal(b_trie_size(t), 5);
assert_string_equal(b_trie_lookup(t, "ASD"), "123");
assert_string_equal(b_trie_lookup(t, "FILENAME"), "bola");
+ assert_string_equal(b_trie_lookup(t, "EXCERPT"), "<p>bola</p>\n");
assert_string_equal(b_trie_lookup(t, "CONTENT"), "<p>bola</p>\n");
assert_string_equal(b_trie_lookup(t, "RAW_CONTENT"), "bola");
b_trie_free(t);
diff --git a/tests/check_source_parser.c b/tests/check_source_parser.c
index 0cec364..79ca10f 100644
--- a/tests/check_source_parser.c
+++ b/tests/check_source_parser.c
@@ -34,9 +34,12 @@ test_source_parse(void **state)
b_trie_t *source = blogc_source_parse(a, strlen(a), &err);
assert_null(err);
assert_non_null(source);
- assert_int_equal(b_trie_size(source), 4);
+ assert_int_equal(b_trie_size(source), 5);
assert_string_equal(b_trie_lookup(source, "VAR1"), "asd asd");
assert_string_equal(b_trie_lookup(source, "VAR2"), "123chunda");
+ assert_string_equal(b_trie_lookup(source, "EXCERPT"),
+ "<h1>This is a test</h1>\n"
+ "<p>bola</p>\n");
assert_string_equal(b_trie_lookup(source, "CONTENT"),
"<h1>This is a test</h1>\n"
"<p>bola</p>\n");
@@ -64,9 +67,12 @@ test_source_parse_with_spaces(void **state)
b_trie_t *source = blogc_source_parse(a, strlen(a), &err);
assert_null(err);
assert_non_null(source);
- assert_int_equal(b_trie_size(source), 4);
+ assert_int_equal(b_trie_size(source), 5);
assert_string_equal(b_trie_lookup(source, "VAR1"), "chunda");
assert_string_equal(b_trie_lookup(source, "BOLA"), "guda");
+ assert_string_equal(b_trie_lookup(source, "EXCERPT"),
+ "<h1>This is a test</h1>\n"
+ "<p>bola</p>\n");
assert_string_equal(b_trie_lookup(source, "CONTENT"),
"<h1>This is a test</h1>\n"
"<p>bola</p>\n");
@@ -79,6 +85,49 @@ test_source_parse_with_spaces(void **state)
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;
+ b_trie_t *source = blogc_source_parse(a, strlen(a), &err);
+ assert_null(err);
+ assert_non_null(source);
+ assert_int_equal(b_trie_size(source), 5);
+ assert_string_equal(b_trie_lookup(source, "VAR1"), "asd asd");
+ assert_string_equal(b_trie_lookup(source, "VAR2"), "123chunda");
+ assert_string_equal(b_trie_lookup(source, "EXCERPT"),
+ "<h1>This is a test</h1>\n"
+ "<p>bola</p>\n");
+ assert_string_equal(b_trie_lookup(source, "CONTENT"),
+ "<h1>This is a test</h1>\n"
+ "<p>bola</p>\n"
+ "<p>guda\n"
+ "yay</p>\n");
+ assert_string_equal(b_trie_lookup(source, "RAW_CONTENT"),
+ "# This is a test\n"
+ "\n"
+ "bola\n"
+ "\n"
+ "...\n"
+ "\n"
+ "guda\n"
+ "yay");
+ b_trie_free(source);
+}
+
+
+static void
test_source_parse_config_empty(void **state)
{
const char *a = "";
@@ -381,6 +430,7 @@ main(void)
const UnitTest tests[] = {
unit_test(test_source_parse),
unit_test(test_source_parse_with_spaces),
+ unit_test(test_source_parse_with_excerpt),
unit_test(test_source_parse_config_empty),
unit_test(test_source_parse_config_invalid_key),
unit_test(test_source_parse_config_no_key),