diff options
author | Rafael G. Martins <rafael@rafaelmartins.eng.br> | 2015-11-02 03:58:09 -0200 |
---|---|---|
committer | Rafael G. Martins <rafael@rafaelmartins.eng.br> | 2015-11-02 03:58:09 -0200 |
commit | 1faa52052624e7c03256df0c63c43f5d40ddb57a (patch) | |
tree | ff53b56d31231f9f05fd3ff9f518f7f90f90bea0 /tests/check_content_parser.c | |
parent | 5b869700957af87f672f4be6336a8f587450ec14 (diff) | |
download | blogc-1faa52052624e7c03256df0c63c43f5d40ddb57a.tar.gz blogc-1faa52052624e7c03256df0c63c43f5d40ddb57a.tar.bz2 blogc-1faa52052624e7c03256df0c63c43f5d40ddb57a.zip |
content-parser: added basic rst-like directives support
this patch adds support to something similar to reStructuredText
directives [1]. the directive loader isn't implemented yet. also,
the current implementation is stricter and differs a lot from the
reStructuredText spec. documentation pending.
this patch also fixes a few old parser bugs.
[1] http://docutils.sourceforge.net/docs/ref/rst/directives.html
Diffstat (limited to 'tests/check_content_parser.c')
-rw-r--r-- | tests/check_content_parser.c | 620 |
1 files changed, 616 insertions, 4 deletions
diff --git a/tests/check_content_parser.c b/tests/check_content_parser.c index 994e900..5d13564 100644 --- a/tests/check_content_parser.c +++ b/tests/check_content_parser.c @@ -1014,6 +1014,405 @@ test_content_parse_ordered_list_crlf(void **state) } +char* +__wrap_blogc_directive_loader(const char *name, const char *argument, + b_trie_t *params) +{ + assert_string_equal(name, mock_type(const char*)); + const char *arg = mock_type(const char*); + if (arg == NULL) + assert_null(argument); + else + assert_string_equal(argument, arg); + assert_int_equal(b_trie_size(params), mock_type(unsigned int)); + + for (unsigned int i = 0; i < b_trie_size(params); i++) + assert_string_equal(b_trie_lookup(params, mock_type(const char*)), + mock_type(const char*)); + + return b_strdup("CHUNDA\n"); +} + + +static void +test_content_parse_directive(void **state) +{ + will_return(__wrap_blogc_directive_loader, "bola"); + will_return(__wrap_blogc_directive_loader, NULL); + will_return(__wrap_blogc_directive_loader, 0); + char *html = blogc_content_parse( + ".. bola::", + NULL); + assert_non_null(html); + assert_string_equal(html, + "CHUNDA\n"); + free(html); + + will_return(__wrap_blogc_directive_loader, "bola"); + will_return(__wrap_blogc_directive_loader, NULL); + will_return(__wrap_blogc_directive_loader, 0); + html = blogc_content_parse( + ".. bola::\n", + NULL); + assert_non_null(html); + assert_string_equal(html, + "CHUNDA\n"); + free(html); + + will_return(__wrap_blogc_directive_loader, "bola"); + will_return(__wrap_blogc_directive_loader, NULL); + will_return(__wrap_blogc_directive_loader, 0); + html = blogc_content_parse( + ".. bola:: ", + NULL); + assert_non_null(html); + assert_string_equal(html, + "CHUNDA\n"); + free(html); + + will_return(__wrap_blogc_directive_loader, "bola"); + will_return(__wrap_blogc_directive_loader, NULL); + will_return(__wrap_blogc_directive_loader, 0); + html = blogc_content_parse( + ".. bola:: \n", + NULL); + assert_non_null(html); + assert_string_equal(html, + "CHUNDA\n"); + free(html); + + will_return(__wrap_blogc_directive_loader, "bola"); + will_return(__wrap_blogc_directive_loader, NULL); + will_return(__wrap_blogc_directive_loader, 0); + html = blogc_content_parse( + ".. bola::\r\n", + NULL); + assert_non_null(html); + assert_string_equal(html, + "CHUNDA\n"); + free(html); + + will_return(__wrap_blogc_directive_loader, "bola"); + will_return(__wrap_blogc_directive_loader, NULL); + will_return(__wrap_blogc_directive_loader, 1); + will_return(__wrap_blogc_directive_loader, "asd"); + will_return(__wrap_blogc_directive_loader, "qwe"); + html = blogc_content_parse( + ".. bola::\n" + " :asd: qwe", + NULL); + assert_non_null(html); + assert_string_equal(html, + "CHUNDA\n"); + free(html); + + will_return(__wrap_blogc_directive_loader, "bola"); + will_return(__wrap_blogc_directive_loader, NULL); + will_return(__wrap_blogc_directive_loader, 1); + will_return(__wrap_blogc_directive_loader, "asd"); + will_return(__wrap_blogc_directive_loader, "qwe"); + html = blogc_content_parse( + ".. bola::\n" + " :asd: qwe\n", + NULL); + assert_non_null(html); + assert_string_equal(html, + "CHUNDA\n"); + free(html); + + will_return(__wrap_blogc_directive_loader, "bola"); + will_return(__wrap_blogc_directive_loader, NULL); + will_return(__wrap_blogc_directive_loader, 1); + will_return(__wrap_blogc_directive_loader, "asd"); + will_return(__wrap_blogc_directive_loader, "qwe"); + html = blogc_content_parse( + ".. bola::\r\n" + " :asd: qwe\r\n", + NULL); + assert_non_null(html); + assert_string_equal(html, + "CHUNDA\n"); + free(html); + + will_return(__wrap_blogc_directive_loader, "bola"); + will_return(__wrap_blogc_directive_loader, NULL); + will_return(__wrap_blogc_directive_loader, 2); + will_return(__wrap_blogc_directive_loader, "asd"); + will_return(__wrap_blogc_directive_loader, "qwe"); + will_return(__wrap_blogc_directive_loader, "zxc"); + will_return(__wrap_blogc_directive_loader, "vbn"); + html = blogc_content_parse( + ".. bola::\n" + " :asd: qwe\n" + " :zxc: vbn", + NULL); + assert_non_null(html); + assert_string_equal(html, + "CHUNDA\n"); + free(html); + + will_return(__wrap_blogc_directive_loader, "bola"); + will_return(__wrap_blogc_directive_loader, NULL); + will_return(__wrap_blogc_directive_loader, 2); + will_return(__wrap_blogc_directive_loader, "asd"); + will_return(__wrap_blogc_directive_loader, "qwe"); + will_return(__wrap_blogc_directive_loader, "zxc"); + will_return(__wrap_blogc_directive_loader, "vbn"); + html = blogc_content_parse( + ".. bola::\n" + " :asd: qwe\n" + " :zxc: vbn\n", + NULL); + assert_non_null(html); + assert_string_equal(html, + "CHUNDA\n"); + free(html); + + will_return(__wrap_blogc_directive_loader, "bola"); + will_return(__wrap_blogc_directive_loader, NULL); + will_return(__wrap_blogc_directive_loader, 2); + will_return(__wrap_blogc_directive_loader, "asd"); + will_return(__wrap_blogc_directive_loader, "qwe"); + will_return(__wrap_blogc_directive_loader, "zxc"); + will_return(__wrap_blogc_directive_loader, "vbn"); + html = blogc_content_parse( + ".. bola::\r\n" + " :asd: qwe\r\n" + " :zxc: vbn\r\n", + NULL); + assert_non_null(html); + assert_string_equal(html, + "CHUNDA\n"); + free(html); + + will_return(__wrap_blogc_directive_loader, "bola"); + will_return(__wrap_blogc_directive_loader, NULL); + will_return(__wrap_blogc_directive_loader, 3); + will_return(__wrap_blogc_directive_loader, "asd"); + will_return(__wrap_blogc_directive_loader, "qwe"); + will_return(__wrap_blogc_directive_loader, "ert"); + will_return(__wrap_blogc_directive_loader, "zxvc"); + will_return(__wrap_blogc_directive_loader, "qwe"); + will_return(__wrap_blogc_directive_loader, "bola"); + html = blogc_content_parse( + "# foo\n" + "\n" + ".. bola::\n" + " :asd: qwe\n" + " :ert: zxvc\n" + " :qwe: bola\n" + "\n" + "bola", NULL); + assert_non_null(html); + assert_string_equal(html, + "<h1 id=\"foo\">foo</h1>\n" + "CHUNDA\n" + "<p>bola</p>\n"); + free(html); + + will_return(__wrap_blogc_directive_loader, "bola"); + will_return(__wrap_blogc_directive_loader, NULL); + will_return(__wrap_blogc_directive_loader, 3); + will_return(__wrap_blogc_directive_loader, "asd"); + will_return(__wrap_blogc_directive_loader, "qwe"); + will_return(__wrap_blogc_directive_loader, "ert"); + will_return(__wrap_blogc_directive_loader, "zxvc"); + will_return(__wrap_blogc_directive_loader, "qwe"); + will_return(__wrap_blogc_directive_loader, "bola"); + html = blogc_content_parse( + "# foo\r\n" + "\r\n" + ".. bola::\r\n" + " :asd: qwe\r\n" + " :ert: zxvc\r\n" + " :qwe: bola\r\n" + "\r\n" + "bola", NULL); + assert_non_null(html); + assert_string_equal(html, + "<h1 id=\"foo\">foo</h1>\r\n" + "CHUNDA\n" + "<p>bola</p>\r\n"); + free(html); + + will_return(__wrap_blogc_directive_loader, "bola"); + will_return(__wrap_blogc_directive_loader, "chunda"); + will_return(__wrap_blogc_directive_loader, 0); + html = blogc_content_parse( + ".. bola:: chunda", + NULL); + assert_non_null(html); + assert_string_equal(html, + "CHUNDA\n"); + free(html); + + will_return(__wrap_blogc_directive_loader, "bola"); + will_return(__wrap_blogc_directive_loader, "chunda"); + will_return(__wrap_blogc_directive_loader, 0); + html = blogc_content_parse( + ".. bola:: chunda\n", + NULL); + assert_non_null(html); + assert_string_equal(html, + "CHUNDA\n"); + free(html); + + will_return(__wrap_blogc_directive_loader, "bola"); + will_return(__wrap_blogc_directive_loader, "chunda"); + will_return(__wrap_blogc_directive_loader, 0); + html = blogc_content_parse( + ".. bola:: chunda\r\n", + NULL); + assert_non_null(html); + assert_string_equal(html, + "CHUNDA\n"); + free(html); + + will_return(__wrap_blogc_directive_loader, "bola"); + will_return(__wrap_blogc_directive_loader, "chunda"); + will_return(__wrap_blogc_directive_loader, 1); + will_return(__wrap_blogc_directive_loader, "asd"); + will_return(__wrap_blogc_directive_loader, "qwe"); + html = blogc_content_parse( + ".. bola:: chunda\n" + " :asd: qwe", + NULL); + assert_non_null(html); + assert_string_equal(html, + "CHUNDA\n"); + free(html); + + will_return(__wrap_blogc_directive_loader, "bola"); + will_return(__wrap_blogc_directive_loader, "chunda"); + will_return(__wrap_blogc_directive_loader, 1); + will_return(__wrap_blogc_directive_loader, "asd"); + will_return(__wrap_blogc_directive_loader, "qwe"); + html = blogc_content_parse( + ".. bola:: chunda\n" + " :asd: qwe\n", + NULL); + assert_non_null(html); + assert_string_equal(html, + "CHUNDA\n"); + free(html); + + will_return(__wrap_blogc_directive_loader, "bola"); + will_return(__wrap_blogc_directive_loader, "chunda"); + will_return(__wrap_blogc_directive_loader, 1); + will_return(__wrap_blogc_directive_loader, "asd"); + will_return(__wrap_blogc_directive_loader, "qwe"); + html = blogc_content_parse( + ".. bola:: chunda\r\n" + " :asd: qwe\r\n", + NULL); + assert_non_null(html); + assert_string_equal(html, + "CHUNDA\n"); + free(html); + + will_return(__wrap_blogc_directive_loader, "bola"); + will_return(__wrap_blogc_directive_loader, "chunda"); + will_return(__wrap_blogc_directive_loader, 2); + will_return(__wrap_blogc_directive_loader, "asd"); + will_return(__wrap_blogc_directive_loader, "qwe"); + will_return(__wrap_blogc_directive_loader, "zxc"); + will_return(__wrap_blogc_directive_loader, "vbn"); + html = blogc_content_parse( + ".. bola:: chunda\n" + " :asd: qwe\n" + " :zxc: vbn", + NULL); + assert_non_null(html); + assert_string_equal(html, + "CHUNDA\n"); + free(html); + + will_return(__wrap_blogc_directive_loader, "bola"); + will_return(__wrap_blogc_directive_loader, "chunda"); + will_return(__wrap_blogc_directive_loader, 2); + will_return(__wrap_blogc_directive_loader, "asd"); + will_return(__wrap_blogc_directive_loader, "qwe"); + will_return(__wrap_blogc_directive_loader, "zxc"); + will_return(__wrap_blogc_directive_loader, "vbn"); + html = blogc_content_parse( + ".. bola:: chunda\n" + " :asd: qwe\n" + " :zxc: vbn\n", + NULL); + assert_non_null(html); + assert_string_equal(html, + "CHUNDA\n"); + free(html); + + will_return(__wrap_blogc_directive_loader, "bola"); + will_return(__wrap_blogc_directive_loader, "chunda"); + will_return(__wrap_blogc_directive_loader, 2); + will_return(__wrap_blogc_directive_loader, "asd"); + will_return(__wrap_blogc_directive_loader, "qwe"); + will_return(__wrap_blogc_directive_loader, "zxc"); + will_return(__wrap_blogc_directive_loader, "vbn"); + html = blogc_content_parse( + ".. bola:: chunda\r\n" + " :asd: qwe\r\n" + " :zxc: vbn\r\n", + NULL); + assert_non_null(html); + assert_string_equal(html, + "CHUNDA\n"); + free(html); + + will_return(__wrap_blogc_directive_loader, "bola"); + will_return(__wrap_blogc_directive_loader, "chunda"); + will_return(__wrap_blogc_directive_loader, 3); + will_return(__wrap_blogc_directive_loader, "asd"); + will_return(__wrap_blogc_directive_loader, "qwe"); + will_return(__wrap_blogc_directive_loader, "ert"); + will_return(__wrap_blogc_directive_loader, "zxvc"); + will_return(__wrap_blogc_directive_loader, "qwe"); + will_return(__wrap_blogc_directive_loader, "bola"); + html = blogc_content_parse( + "# foo\n" + "\n" + ".. bola:: chunda\n" + " :asd: qwe\n" + " :ert: zxvc\n" + " :qwe: bola\n" + "\n" + "bola", NULL); + assert_non_null(html); + assert_string_equal(html, + "<h1 id=\"foo\">foo</h1>\n" + "CHUNDA\n" + "<p>bola</p>\n"); + free(html); + + will_return(__wrap_blogc_directive_loader, "bola"); + will_return(__wrap_blogc_directive_loader, "chunda"); + will_return(__wrap_blogc_directive_loader, 3); + will_return(__wrap_blogc_directive_loader, "asd"); + will_return(__wrap_blogc_directive_loader, "qwe"); + will_return(__wrap_blogc_directive_loader, "ert"); + will_return(__wrap_blogc_directive_loader, "zxvc"); + will_return(__wrap_blogc_directive_loader, "qwe"); + will_return(__wrap_blogc_directive_loader, "bola"); + html = blogc_content_parse( + "# foo\r\n" + "\r\n" + ".. bola:: chunda\r\n" + " :asd: qwe\r\n" + " :ert: zxvc\r\n" + " :qwe: bola\r\n" + "\r\n" + "bola", NULL); + assert_non_null(html); + assert_string_equal(html, + "<h1 id=\"foo\">foo</h1>\r\n" + "CHUNDA\n" + "<p>bola</p>\r\n"); + free(html); +} + + static void test_content_parse_invalid_excerpt(void **state) { @@ -1135,6 +1534,14 @@ test_content_parse_invalid_blockquote(void **state) "> bola\n" "> foo</p>\n"); free(html); + html = blogc_content_parse( + "> asd\n" + "> bola", NULL); + assert_non_null(html); + assert_string_equal(html, + "<p>> asd\n" + "> bola</p>\n"); + free(html); } @@ -1151,6 +1558,16 @@ test_content_parse_invalid_code(void **state) " bola\n" " foo</p>\n"); free(html); + html = blogc_content_parse( + " asd\n" + " bola\n" + " foo", NULL); + assert_non_null(html); + assert_string_equal(html, + "<p> asd\n" + " bola\n" + " foo</p>\n"); + free(html); } @@ -1196,7 +1613,8 @@ test_content_parse_invalid_unordered_list(void **state) assert_non_null(html); assert_string_equal(html, "<p><em> asd\n" - "1. qwe</p>\n"); + "1. qwe" + "</p>\n"); free(html); html = blogc_content_parse( "* asd\n" @@ -1204,7 +1622,8 @@ test_content_parse_invalid_unordered_list(void **state) assert_non_null(html); assert_string_equal(html, "<p><em> asd\n" - "1. qwe</p>\n"); + "1. qwe" + "</p>\n"); free(html); html = blogc_content_parse( "chunda\n" @@ -1250,7 +1669,8 @@ test_content_parse_invalid_ordered_list(void **state) assert_non_null(html); assert_string_equal(html, "<p>1. asd\n" - "<em> qwe</p>\n"); + "<em> qwe" + "</p>\n"); free(html); html = blogc_content_parse( "1. asd\n" @@ -1258,7 +1678,8 @@ test_content_parse_invalid_ordered_list(void **state) assert_non_null(html); assert_string_equal(html, "<p>1. asd\n" - "<em> qwe</p>\n"); + "<em> qwe" + "</p>\n"); free(html); html = blogc_content_parse( "chunda\n" @@ -1303,6 +1724,195 @@ test_content_parse_invalid_ordered_list(void **state) assert_non_null(html); assert_string_equal(html, "<p>1.</p>\n"); free(html); + html = blogc_content_parse("1 ", NULL); + assert_non_null(html); + assert_string_equal(html, "<p>1 </p>\n"); + free(html); +} + + +static void +test_content_parse_invalid_directive(void **state) +{ + char *html = blogc_content_parse( + ".. ", + NULL); + assert_non_null(html); + assert_string_equal(html, + "<p>.. </p>\n"); + free(html); + + html = blogc_content_parse( + ".. \n", + NULL); + assert_non_null(html); + assert_string_equal(html, + "<p>.. </p>\n"); + free(html); + + html = blogc_content_parse( + ".. ", + NULL); + assert_non_null(html); + assert_string_equal(html, + "<p>.. <br /></p>\n"); + free(html); + + html = blogc_content_parse( + ".. \n", + NULL); + assert_non_null(html); + assert_string_equal(html, + "<p>.. <br /></p>\n"); + free(html); + + html = blogc_content_parse( + ".. a", + NULL); + assert_non_null(html); + assert_string_equal(html, + "<p>.. a</p>\n"); + free(html); + + html = blogc_content_parse( + ".. a\n", + NULL); + assert_non_null(html); + assert_string_equal(html, + "<p>.. a</p>\n"); + free(html); + + html = blogc_content_parse( + ".. asd", + NULL); + assert_non_null(html); + assert_string_equal(html, + "<p>.. asd</p>\n"); + free(html); + + html = blogc_content_parse( + ".. asd\n", + NULL); + assert_non_null(html); + assert_string_equal(html, + "<p>.. asd</p>\n"); + free(html); + + html = blogc_content_parse( + ".. asd:", + NULL); + assert_non_null(html); + assert_string_equal(html, + "<p>.. asd:</p>\n"); + free(html); + + html = blogc_content_parse( + ".. asd:\n", + NULL); + assert_non_null(html); + assert_string_equal(html, + "<p>.. asd:</p>\n"); + free(html); + + html = blogc_content_parse( + ".. asd::\n" + " :", + NULL); + assert_non_null(html); + assert_string_equal(html, + "<p>.. asd::\n" + " :</p>\n"); + free(html); + + html = blogc_content_parse( + ".. asd::\n" + " :\n", + NULL); + assert_non_null(html); + assert_string_equal(html, + "<p>.. asd::\n" + " :</p>\n"); + free(html); + + html = blogc_content_parse( + ".. asd::\n" + " :a", + NULL); + assert_non_null(html); + assert_string_equal(html, + "<p>.. asd::\n" + " :a</p>\n"); + free(html); + + html = blogc_content_parse( + ".. asd::\n" + " :a\n", + NULL); + assert_non_null(html); + assert_string_equal(html, + "<p>.. asd::\n" + " :a</p>\n"); + free(html); + + html = blogc_content_parse( + ".. asd::\n" + " :as", + NULL); + assert_non_null(html); + assert_string_equal(html, + "<p>.. asd::\n" + " :as</p>\n"); + free(html); + + html = blogc_content_parse( + ".. asd::\n" + " :as\n", + NULL); + assert_non_null(html); + assert_string_equal(html, + "<p>.. asd::\n" + " :as</p>\n"); + free(html); + + html = blogc_content_parse( + ".. asd::\n" + " :as:", + NULL); + assert_non_null(html); + assert_string_equal(html, + "<p>.. asd::\n" + " :as:</p>\n"); + free(html); + + html = blogc_content_parse( + ".. asd::\n" + " :as:\n", + NULL); + assert_non_null(html); + assert_string_equal(html, + "<p>.. asd::\n" + " :as:</p>\n"); + free(html); + + html = blogc_content_parse( + ".. asd::\n" + " :as: ", + NULL); + assert_non_null(html); + assert_string_equal(html, + "<p>.. asd::\n" + " :as: </p>\n"); + free(html); + + html = blogc_content_parse( + ".. asd::\n" + " :as: \n", + NULL); + assert_non_null(html); + assert_string_equal(html, + "<p>.. asd::\n" + " :as: </p>\n"); + free(html); } @@ -1656,6 +2266,7 @@ main(void) 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_directive), unit_test(test_content_parse_invalid_excerpt), unit_test(test_content_parse_invalid_header), unit_test(test_content_parse_invalid_header_empty), @@ -1664,6 +2275,7 @@ main(void) 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_invalid_directive), unit_test(test_content_parse_inline), unit_test(test_content_parse_inline_em), unit_test(test_content_parse_inline_strong), |