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),  | 
