diff options
author | Rafael G. Martins <rafael@rafaelmartins.eng.br> | 2015-05-18 19:12:00 -0300 |
---|---|---|
committer | Rafael G. Martins <rafael@rafaelmartins.eng.br> | 2015-05-18 19:12:00 -0300 |
commit | cbefb0ffb583a877a082bc336f2d61be7e773a5d (patch) | |
tree | b1df898f575c32d77a0939eda0af02d336143802 | |
parent | ae19d4d1d14efee57afe85ba90048e81120ec68a (diff) | |
download | blogc-cbefb0ffb583a877a082bc336f2d61be7e773a5d.tar.gz blogc-cbefb0ffb583a877a082bc336f2d61be7e773a5d.tar.bz2 blogc-cbefb0ffb583a877a082bc336f2d61be7e773a5d.zip |
content-parser: fix and test horizontal rules
-rw-r--r-- | src/content-parser.c | 5 | ||||
-rw-r--r-- | tests/check_content_parser.c | 59 |
2 files changed, 63 insertions, 1 deletions
diff --git a/src/content-parser.c b/src/content-parser.c index aa4db79..f412810 100644 --- a/src/content-parser.c +++ b/src/content-parser.c @@ -548,6 +548,8 @@ blogc_content_parse(const char *src) case CONTENT_UNORDERED_LIST_OR_HORIZONTAL_RULE: if (c == d) { + if (is_last) + goto hr; state = CONTENT_HORIZONTAL_RULE; break; } @@ -558,9 +560,10 @@ blogc_content_parse(const char *src) break; case CONTENT_HORIZONTAL_RULE: - if (c == d) { + if (c == d && !is_last) { break; } +hr: if (c == '\n' || c == '\r' || is_last) { b_string_append(rv, "<hr />\n"); state = CONTENT_START_LINE; diff --git a/tests/check_content_parser.c b/tests/check_content_parser.c index 0053051..390d516 100644 --- a/tests/check_content_parser.c +++ b/tests/check_content_parser.c @@ -216,6 +216,64 @@ test_content_parse_code(void **state) void +test_content_parse_horizontal_rule(void **state) +{ + char *html = blogc_content_parse("bola\nguda\n\n**"); + 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++++"); + 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"); + 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"); + assert_non_null(html); + assert_string_equal(html, + "<p>bola\n" + "guda</p>\n" + "<hr />\n"); + free(html); + html = blogc_content_parse( + "bola\n" + "\n" + "**\n" + "\n" + "chunda\n"); + assert_non_null(html); + assert_string_equal(html, + "<p>bola</p>\n" + "<hr />\n" + "<p>chunda</p>\n"); + free(html); + html = blogc_content_parse( + "bola\n" + "\n" + "----\n" + "\n" + "chunda\n"); + assert_non_null(html); + assert_string_equal(html, + "<p>bola</p>\n" + "<hr />\n" + "<p>chunda</p>\n"); + free(html); +} + + +void test_content_parse_invalid_header(void **state) { char *html = blogc_content_parse( @@ -308,6 +366,7 @@ main(void) unit_test(test_content_parse_html), unit_test(test_content_parse_blockquote), unit_test(test_content_parse_code), + unit_test(test_content_parse_horizontal_rule), unit_test(test_content_parse_invalid_header), unit_test(test_content_parse_invalid_header_empty), unit_test(test_content_parse_invalid_blockquote), |