/* * 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. */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include #include #include #include #include #include "../src/content-parser.h" #include "../src/directives.h" #include "../src/utils/utils.h" static void test_slugify(void **state) { char *s = blogc_slugify(NULL); assert_null(s); s = blogc_slugify("bola"); assert_string_equal(s, "bola"); free(s); s = blogc_slugify("bola o"); assert_string_equal(s, "bola-o"); free(s); s = blogc_slugify("Bola O"); assert_string_equal(s, "bola-o"); free(s); s = blogc_slugify("bola 0"); assert_string_equal(s, "bola-0"); free(s); s = blogc_slugify("bola () o"); assert_string_equal(s, "bola-----o"); free(s); s = blogc_slugify("Bola O"); assert_string_equal(s, "bola-o"); free(s); s = blogc_slugify("bolaço"); assert_string_equal(s, "bola--o"); free(s); } static void test_htmlentities(void **state) { char *s = blogc_htmlentities(NULL); assert_null(s); s = blogc_htmlentities("asdxcv & < > \" 'sfd/gf"); assert_string_equal(s, "asdxcv & < > " 'sfd/gf"); free(s); } static void test_is_ordered_list_item(void **state) { assert_true(blogc_is_ordered_list_item("1.bola", 2)); assert_true(blogc_is_ordered_list_item("1. bola", 3)); assert_true(blogc_is_ordered_list_item("12. bola", 4)); assert_true(blogc_is_ordered_list_item("123. bola", 5)); assert_true(blogc_is_ordered_list_item("1. bola", 6)); assert_true(blogc_is_ordered_list_item("1. bola", 5)); assert_false(blogc_is_ordered_list_item("1bola", 1)); assert_false(blogc_is_ordered_list_item("12bola", 2)); assert_false(blogc_is_ordered_list_item("1 . bola", 6)); assert_false(blogc_is_ordered_list_item("1. bola", 6)); assert_false(blogc_is_ordered_list_item("1.", 2)); assert_false(blogc_is_ordered_list_item(NULL, 2)); } static void test_content_parse(void **state) { size_t l = 0; char *html = blogc_content_parse( "# um\n" "## dois\n" "### tres\n" "#### quatro\n" "##### cinco\n" "###### seis\n" "\n" "bola\n" "chunda\n" "\n" "> bola \n" "> guda\n" "> buga\n" "> \n" "> asd\n" "\n" " bola\n" " asd\n" " qwewer\n" "\n" "+++\n" "1. chunda\n" "3. fuuuu\n" "\n" "+ chunda2\n" "+ fuuuu2\n" "\n" "\n" "\n" "guda\n" "yay\n" "\n" "**bola**\n", &l); assert_non_null(html); assert_int_equal(l, 0); assert_string_equal(html, "

um

\n" "

dois

\n" "

tres

\n" "

quatro

\n" "
cinco
\n" "
seis
\n" "

bola\n" "chunda

\n" "

bola
\n" "guda\n" "buga

\n" "
asd
\n" "
\n" "
<asd>bola</asd>\n"
        " asd\n"
        "qwewer
\n" "
\n" "
    \n" "
  1. chunda
  2. \n" "
  3. fuuuu
  4. \n" "
\n" "
    \n" "
  • chunda2
  • \n" "
  • fuuuu2
  • \n" "
\n" "\n" "

guda\n" "yay

\n" "

bola

\n"); free(html); } static void test_content_parse_crlf(void **state) { size_t l = 0; char *html = blogc_content_parse( "# um\r\n" "## dois\r\n" "### tres\r\n" "#### quatro\r\n" "##### cinco\r\n" "###### seis\r\n" "\r\n" "bola\r\n" "chunda\r\n" "\r\n" "> bola \r\n" "> guda\r\n" "> buga\r\n" "> \r\n" "> asd\r\n" "\r\n" " bola\r\n" " asd\r\n" " qwewer\r\n" "\r\n" "+++\r\n" "1. chunda\r\n" "3. fuuuu\r\n" "\r\n" "+ chunda2\r\n" "+ fuuuu2\r\n" "\r\n" "\r\n" "\r\n" "guda\r\n" "yay\r\n" "\r\n" "**bola**\r\n", &l); assert_non_null(html); assert_int_equal(l, 0); assert_string_equal(html, "

um

\r\n" "

dois

\r\n" "

tres

\r\n" "

quatro

\r\n" "
cinco
\r\n" "
seis
\r\n" "

bola\r\n" "chunda

\r\n" "

bola
\r\n" "guda\r\n" "buga

\r\n" "
asd
\r\n" "
\r\n" "
<asd>bola</asd>\r\n"
        " asd\r\n"
        "qwewer
\r\n" "
\r\n" "
    \r\n" "
  1. chunda
  2. \r\n" "
  3. fuuuu
  4. \r\n" "
\r\n" "
    \r\n" "
  • chunda2
  • \r\n" "
  • fuuuu2
  • \r\n" "
\r\n" "\r\n" "

guda\r\n" "yay

\r\n" "

bola

\r\n"); free(html); } 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, 38); assert_string_equal(html, "

test

\n" "

chunda

\n" "

guda\n" "lol

\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, 38); assert_string_equal(html, "

test

\n" "

chunda

\n" "

guda\n" "lol

\n"); free(html); } static void test_content_parse_with_excerpt_crlf(void **state) { size_t l = 0; char *html = blogc_content_parse( "# test\r\n" "\r\n" "chunda\r\n" "\r\n" "..\r\n" "\r\n" "guda\r\n" "lol", &l); assert_non_null(html); assert_int_equal(l, 40); assert_string_equal(html, "

test

\r\n" "

chunda

\r\n" "

guda\r\n" "lol

\r\n"); free(html); l = 0; html = blogc_content_parse( "# test\r\n" "\r\n" "chunda\r\n" "\r\n" "...\r\n" "\r\n" "guda\r\n" "lol", &l); assert_non_null(html); assert_int_equal(l, 40); assert_string_equal(html, "

test

\r\n" "

chunda

\r\n" "

guda\r\n" "lol

\r\n"); free(html); } static void test_content_parse_header(void **state) { char *html = blogc_content_parse("## bola", NULL); assert_non_null(html); assert_string_equal(html, "

bola

\n"); free(html); html = blogc_content_parse("## bola\n", NULL); assert_non_null(html); assert_string_equal(html, "

bola

\n"); free(html); html = blogc_content_parse( "bola\n" "\n" "## bola\n" "\n" "guda\n", NULL); assert_non_null(html); assert_string_equal(html, "

bola

\n" "

bola

\n" "

guda

\n"); free(html); } static void test_content_parse_header_crlf(void **state) { char *html = blogc_content_parse("## bola", NULL); assert_non_null(html); assert_string_equal(html, "

bola

\n"); free(html); html = blogc_content_parse("## bola\r\n", NULL); assert_non_null(html); assert_string_equal(html, "

bola

\r\n"); free(html); html = blogc_content_parse( "bola\r\n" "\r\n" "## bola\r\n" "\r\n" "guda\r\n", NULL); assert_non_null(html); assert_string_equal(html, "

bola

\r\n" "

bola

\r\n" "

guda

\r\n"); free(html); } static void test_content_parse_html(void **state) { char *html = blogc_content_parse("
\n
", NULL); assert_non_null(html); assert_string_equal(html, "
\n
\n"); free(html); html = blogc_content_parse("
\n
\n", NULL); assert_non_null(html); assert_string_equal(html, "
\n
\n"); free(html); html = blogc_content_parse( "bola\n" "\n" "
\n" "
\n" "\n" "chunda\n", NULL); assert_non_null(html); assert_string_equal(html, "

bola

\n" "
\n
\n" "

chunda

\n"); free(html); } static void test_content_parse_html_crlf(void **state) { char *html = blogc_content_parse("
\r\n
", NULL); assert_non_null(html); assert_string_equal(html, "
\r\n
\r\n"); free(html); html = blogc_content_parse("
\r\n
\r\n", NULL); assert_non_null(html); assert_string_equal(html, "
\r\n
\r\n"); free(html); html = blogc_content_parse( "bola\r\n" "\r\n" "
\r\n" "
\r\n" "\r\n" "chunda\r\n", NULL); assert_non_null(html); assert_string_equal(html, "

bola

\r\n" "
\r\n
\r\n" "

chunda

\r\n"); free(html); } static void test_content_parse_blockquote(void **state) { char *html = blogc_content_parse("> bola\n> guda", NULL); assert_non_null(html); assert_string_equal(html, "

bola\n" "guda

\n" "
\n"); free(html); html = blogc_content_parse("> bola\n> guda\n", NULL); assert_non_null(html); assert_string_equal(html, "

bola\n" "guda

\n" "
\n"); free(html); html = blogc_content_parse( "bola\n" "\n" "> bola\n" "> guda\n" "\n" "chunda\n", NULL); assert_non_null(html); assert_string_equal(html, "

bola

\n" "

bola\n" "guda

\n" "
\n" "

chunda

\n"); free(html); } static void test_content_parse_blockquote_crlf(void **state) { char *html = blogc_content_parse("> bola\r\n> guda", NULL); assert_non_null(html); assert_string_equal(html, "

bola\r\n" "guda

\r\n" "
\r\n"); free(html); html = blogc_content_parse("> bola\r\n> guda\r\n", NULL); assert_non_null(html); assert_string_equal(html, "

bola\r\n" "guda

\r\n" "
\r\n"); free(html); html = blogc_content_parse( "bola\r\n" "\r\n" "> bola\r\n" "> guda\r\n" "\r\n" "chunda\r\n", NULL); assert_non_null(html); assert_string_equal(html, "

bola

\r\n" "

bola\r\n" "guda

\r\n" "
\r\n" "

chunda

\r\n"); free(html); } static void test_content_parse_code(void **state) { char *html = blogc_content_parse(" bola\n guda", NULL); assert_non_null(html); assert_string_equal(html, "
bola\n"
        "guda
\n"); free(html); html = blogc_content_parse(" bola\n guda\n", NULL); assert_non_null(html); assert_string_equal(html, "
bola\n"
        "guda
\n"); free(html); html = blogc_content_parse( "bola\n" "\n" " bola\n" " guda\n" "\n" "chunda\n", NULL); assert_non_null(html); assert_string_equal(html, "

bola

\n" "
bola\n"
        "guda
\n" "

chunda

\n"); free(html); } static void test_content_parse_code_crlf(void **state) { char *html = blogc_content_parse(" bola\r\n guda", NULL); assert_non_null(html); assert_string_equal(html, "
bola\r\n"
        "guda
\r\n"); free(html); html = blogc_content_parse(" bola\r\n guda\r\n", NULL); assert_non_null(html); assert_string_equal(html, "
bola\r\n"
        "guda
\r\n"); free(html); html = blogc_content_parse( "bola\r\n" "\r\n" " bola\r\n" " guda\r\n" "\r\n" "chunda\r\n", NULL); assert_non_null(html); assert_string_equal(html, "

bola

\r\n" "
bola\r\n"
        "guda
\r\n" "

chunda

\r\n"); free(html); } static void test_content_parse_horizontal_rule(void **state) { char *html = blogc_content_parse("bola\nguda\n\n**", NULL); assert_non_null(html); assert_string_equal(html, "

bola\n" "guda

\n" "
\n"); free(html); html = blogc_content_parse("bola\nguda\n\n++++", NULL); assert_non_null(html); assert_string_equal(html, "

bola\n" "guda

\n" "
\n"); free(html); html = blogc_content_parse("bola\nguda\n\n--\n", NULL); assert_non_null(html); assert_string_equal(html, "

bola\n" "guda

\n" "
\n"); free(html); html = blogc_content_parse("bola\nguda\n\n****\n", NULL); assert_non_null(html); assert_string_equal(html, "

bola\n" "guda

\n" "
\n"); free(html); html = blogc_content_parse( "bola\n" "\n" "**\n" "\n" "chunda\n", NULL); assert_non_null(html); assert_string_equal(html, "

bola

\n" "
\n" "

chunda

\n"); free(html); html = blogc_content_parse( "bola\n" "\n" "----\n" "\n" "chunda\n", NULL); assert_non_null(html); assert_string_equal(html, "

bola

\n" "
\n" "

chunda

\n"); free(html); } static void test_content_parse_horizontal_rule_crlf(void **state) { char *html = blogc_content_parse("bola\r\nguda\r\n\r\n**", NULL); assert_non_null(html); assert_string_equal(html, "

bola\r\n" "guda

\r\n" "
\r\n"); free(html); html = blogc_content_parse("bola\r\nguda\r\n\r\n++++", NULL); assert_non_null(html); assert_string_equal(html, "

bola\r\n" "guda

\r\n" "
\r\n"); free(html); html = blogc_content_parse("bola\r\nguda\r\n\r\n--\r\n", NULL); assert_non_null(html); assert_string_equal(html, "

bola\r\n" "guda

\r\n" "
\r\n"); free(html); html = blogc_content_parse("bola\r\nguda\r\n\r\n****\r\n", NULL); assert_non_null(html); assert_string_equal(html, "

bola\r\n" "guda

\r\n" "
\r\n"); free(html); html = blogc_content_parse( "bola\r\n" "\r\n" "**\r\n" "\r\n" "chunda\r\n", NULL); assert_non_null(html); assert_string_equal(html, "

bola

\r\n" "
\r\n" "

chunda

\r\n"); free(html); html = blogc_content_parse( "bola\r\n" "\r\n" "----\r\n" "\r\n" "chunda\r\n", NULL); assert_non_null(html); assert_string_equal(html, "

bola

\r\n" "
\r\n" "

chunda

\r\n"); free(html); } static void test_content_parse_unordered_list(void **state) { char *html = blogc_content_parse( "lol\n" "\n" "* asd\n" "* qwe\n" "* zxc", NULL); assert_non_null(html); assert_string_equal(html, "

lol

\n" "
    \n" "
  • asd
  • \n" "
  • qwe
  • \n" "
  • zxc
  • \n" "
\n"); free(html); html = blogc_content_parse( "lol\n" "\n" "* asd\n" "* qwe\n" "* zxc\n", NULL); assert_non_null(html); assert_string_equal(html, "

lol

\n" "
    \n" "
  • asd
  • \n" "
  • qwe
  • \n" "
  • zxc
  • \n" "
\n"); free(html); html = blogc_content_parse( "lol\n" "\n" "* asd\n" "* qwe\n" "* zxc\n" "\n" "fuuuu\n", NULL); assert_non_null(html); assert_string_equal(html, "

lol

\n" "
    \n" "
  • asd
  • \n" "
  • qwe
  • \n" "
  • zxc
  • \n" "
\n" "

fuuuu

\n"); free(html); html = blogc_content_parse( "lol\n" "\n" "* asd\n" " cvb\n" "* qwe\n" "* zxc\n" " 1234\n" "\n" "fuuuu\n", NULL); assert_non_null(html); assert_string_equal(html, "

lol

\n" "
    \n" "
  • asd\n" "cvb
  • \n" "
  • qwe
  • \n" "
  • zxc\n" "1234
  • \n" "
\n" "

fuuuu

\n"); free(html); html = blogc_content_parse( "* asd\n" "* qwe\n" "* zxc", NULL); assert_non_null(html); assert_string_equal(html, "
    \n" "
  • asd
  • \n" "
  • qwe
  • \n" "
  • zxc
  • \n" "
\n"); free(html); } static void test_content_parse_unordered_list_crlf(void **state) { char *html = blogc_content_parse( "lol\r\n" "\r\n" "* asd\r\n" "* qwe\r\n" "* zxc", NULL); assert_non_null(html); assert_string_equal(html, "

lol

\r\n" "
    \r\n" "
  • asd
  • \r\n" "
  • qwe
  • \r\n" "
  • zxc
  • \r\n" "
\r\n"); free(html); html = blogc_content_parse( "lol\r\n" "\r\n" "* asd\r\n" "* qwe\r\n" "* zxc\r\n", NULL); assert_non_null(html); assert_string_equal(html, "

lol

\r\n" "
    \r\n" "
  • asd
  • \r\n" "
  • qwe
  • \r\n" "
  • zxc
  • \r\n" "
\r\n"); free(html); html = blogc_content_parse( "lol\r\n" "\r\n" "* asd\r\n" "* qwe\r\n" "* zxc\r\n" "\r\n" "fuuuu\r\n", NULL); assert_non_null(html); assert_string_equal(html, "

lol

\r\n" "
    \r\n" "
  • asd
  • \r\n" "
  • qwe
  • \r\n" "
  • zxc
  • \r\n" "
\r\n" "

fuuuu

\r\n"); free(html); html = blogc_content_parse( "lol\r\n" "\r\n" "* asd\r\n" " cvb\r\n" "* qwe\r\n" "* zxc\r\n" " 1234\r\n" "\r\n" "fuuuu\r\n", NULL); assert_non_null(html); assert_string_equal(html, "

lol

\r\n" "
    \r\n" "
  • asd\r\n" "cvb
  • \r\n" "
  • qwe
  • \r\n" "
  • zxc\r\n" "1234
  • \r\n" "
\r\n" "

fuuuu

\r\n"); free(html); html = blogc_content_parse( "* asd\r\n" "* qwe\r\n" "* zxc", NULL); assert_non_null(html); assert_string_equal(html, "
    \r\n" "
  • asd
  • \r\n" "
  • qwe
  • \r\n" "
  • zxc
  • \r\n" "
\r\n"); free(html); } static void test_content_parse_ordered_list(void **state) { char *html = blogc_content_parse( "lol\n" "\n" "1. asd\n" "2. qwe\n" "3. zxc", NULL); assert_non_null(html); assert_string_equal(html, "

lol

\n" "
    \n" "
  1. asd
  2. \n" "
  3. qwe
  4. \n" "
  5. zxc
  6. \n" "
\n"); free(html); html = blogc_content_parse( "lol\n" "\n" "1. asd\n" "2. qwe\n" "3. zxc\n", NULL); assert_non_null(html); assert_string_equal(html, "

lol

\n" "
    \n" "
  1. asd
  2. \n" "
  3. qwe
  4. \n" "
  5. zxc
  6. \n" "
\n"); free(html); html = blogc_content_parse( "lol\n" "\n" "1. asd\n" "2. qwe\n" "3. zxc\n" "\n" "fuuuu\n", NULL); assert_non_null(html); assert_string_equal(html, "

lol

\n" "
    \n" "
  1. asd
  2. \n" "
  3. qwe
  4. \n" "
  5. zxc
  6. \n" "
\n" "

fuuuu

\n"); free(html); html = blogc_content_parse( "lol\n" "\n" "1. asd\n" " cvb\n" "2. qwe\n" "3. zxc\n" " 1234\n" "\n" "fuuuu\n", NULL); assert_non_null(html); assert_string_equal(html, "

lol

\n" "
    \n" "
  1. asd\n" "cvb
  2. \n" "
  3. qwe
  4. \n" "
  5. zxc\n" "1234
  6. \n" "
\n" "

fuuuu

\n"); free(html); html = blogc_content_parse( "1. asd\n" "2. qwe\n" "3. zxc", NULL); assert_non_null(html); assert_string_equal(html, "
    \n" "
  1. asd
  2. \n" "
  3. qwe
  4. \n" "
  5. zxc
  6. \n" "
\n"); free(html); } static void test_content_parse_ordered_list_crlf(void **state) { char *html = blogc_content_parse( "lol\r\n" "\r\n" "1. asd\r\n" "2. qwe\r\n" "3. zxc", NULL); assert_non_null(html); assert_string_equal(html, "

lol

\r\n" "
    \r\n" "
  1. asd
  2. \r\n" "
  3. qwe
  4. \r\n" "
  5. zxc
  6. \r\n" "
\r\n"); free(html); html = blogc_content_parse( "lol\r\n" "\r\n" "1. asd\r\n" "2. qwe\r\n" "3. zxc\r\n", NULL); assert_non_null(html); assert_string_equal(html, "

lol

\r\n" "
    \r\n" "
  1. asd
  2. \r\n" "
  3. qwe
  4. \r\n" "
  5. zxc
  6. \r\n" "
\r\n"); free(html); html = blogc_content_parse( "lol\r\n" "\r\n" "1. asd\r\n" "2. qwe\r\n" "3. zxc\r\n" "\r\n" "fuuuu\r\n", NULL); assert_non_null(html); assert_string_equal(html, "

lol

\r\n" "
    \r\n" "
  1. asd
  2. \r\n" "
  3. qwe
  4. \r\n" "
  5. zxc
  6. \r\n" "
\r\n" "

fuuuu

\r\n"); free(html); html = blogc_content_parse( "lol\r\n" "\r\n" "1. asd\r\n" " cvb\r\n" "2. qwe\r\n" "3. zxc\r\n" " 1234\r\n" "\r\n" "fuuuu\r\n", NULL); assert_non_null(html); assert_string_equal(html, "

lol

\r\n" "
    \r\n" "
  1. asd\r\n" "cvb
  2. \r\n" "
  3. qwe
  4. \r\n" "
  5. zxc\r\n" "1234
  6. \r\n" "
\r\n" "

fuuuu

\r\n"); free(html); html = blogc_content_parse( "1. asd\r\n" "2. qwe\r\n" "3. zxc", NULL); assert_non_null(html); assert_string_equal(html, "
    \r\n" "
  1. asd
  2. \r\n" "
  3. qwe
  4. \r\n" "
  5. zxc
  6. \r\n" "
\r\n"); free(html); } char* __wrap_blogc_directive_loader(blogc_directive_ctx_t *ctx, blogc_error_t **err) { assert_non_null(err); assert_null(*err); assert_string_equal(ctx->name, mock_type(const char*)); const char *arg = mock_type(const char*); if (arg == NULL) assert_null(ctx->argument); else assert_string_equal(ctx->argument, arg); assert_int_equal(b_trie_size(ctx->params), mock_type(unsigned int)); for (unsigned int i = 0; i < b_trie_size(ctx->params); i++) { const char *key = mock_type(const char*); const char *value = mock_type(const char*); assert_string_equal(b_trie_lookup(ctx->params, key), value); } 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" "\t: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" "\t\t:asd: qwe\n" "\t\t: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, "

foo

\n" "CHUNDA\n" "

bola

\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, "

foo

\r\n" "CHUNDA\n" "

bola

\r\n"); free(html); will_return(__wrap_blogc_directive_loader, "bola"); will_return(__wrap_blogc_directive_loader, NULL); will_return(__wrap_blogc_directive_loader, 0); 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( "# foo\n" "\n" ".. bola::\n" "\n" ".. bola::", NULL); assert_non_null(html); assert_string_equal(html, "

foo

\n" "CHUNDA\n" "CHUNDA\n"); free(html); will_return(__wrap_blogc_directive_loader, "bola"); will_return(__wrap_blogc_directive_loader, "asd"); will_return(__wrap_blogc_directive_loader, 0); will_return(__wrap_blogc_directive_loader, "bola"); will_return(__wrap_blogc_directive_loader, "asd"); will_return(__wrap_blogc_directive_loader, 0); html = blogc_content_parse( "# foo\n" "\n" ".. bola:: asd\n" "\n" ".. bola:: asd\n", NULL); assert_non_null(html); assert_string_equal(html, "

foo

\n" "CHUNDA\n" "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); 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( "# foo\r\n" "\r\n" ".. bola::\r\n" "\r\n" ".. bola::\r\n", NULL); assert_non_null(html); assert_string_equal(html, "

foo

\r\n" "CHUNDA\n" "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"); 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( "# foo\n" "\n" ".. bola::\n" " :asd: qwe\n" "\n" ".. bola::", NULL); assert_non_null(html); assert_string_equal(html, "

foo

\n" "CHUNDA\n" "CHUNDA\n"); free(html); will_return(__wrap_blogc_directive_loader, "bola"); will_return(__wrap_blogc_directive_loader, "asd"); will_return(__wrap_blogc_directive_loader, 1); will_return(__wrap_blogc_directive_loader, "asd"); will_return(__wrap_blogc_directive_loader, "qwe"); will_return(__wrap_blogc_directive_loader, "bola"); will_return(__wrap_blogc_directive_loader, "asd"); will_return(__wrap_blogc_directive_loader, 0); html = blogc_content_parse( "# foo\n" "\n" ".. bola:: asd\n" " :asd: qwe\n" "\n" ".. bola:: asd\n", NULL); assert_non_null(html); assert_string_equal(html, "

foo

\n" "CHUNDA\n" "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"); 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( "# foo\n" "\n" ".. bola::\n" " :asd: qwe\n" "\n" ".. bola::\n", NULL); assert_non_null(html); assert_string_equal(html, "

foo

\n" "CHUNDA\n" "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"); 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( "# foo\r\n" "\r\n" ".. bola::\r\n" " :asd: qwe\r\n" "\r\n" ".. bola::\r\n", NULL); assert_non_null(html); assert_string_equal(html, "

foo

\r\n" "CHUNDA\n" "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"); 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, "zxc"); html = blogc_content_parse( "# foo\n" "\n" ".. bola::\n" " :asd: qwe\n" "\n" ".. bola::\n" " :asd: zxc\n", NULL); assert_non_null(html); assert_string_equal(html, "

foo

\n" "CHUNDA\n" "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"); 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, "zxc"); html = blogc_content_parse( "# foo\r\n" "\r\n" ".. bola::\r\n" " :asd: qwe\r\n" "\r\n" ".. bola::\r\n" " :asd: zxc\r\n", NULL); assert_non_null(html); assert_string_equal(html, "

foo

\r\n" "CHUNDA\n" "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, "qwe"); will_return(__wrap_blogc_directive_loader, "123"); 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, "qwe"); will_return(__wrap_blogc_directive_loader, "456"); html = blogc_content_parse( "# foo\n" "\n" ".. bola::\n" " :asd: qwe\n" " :qwe: 123\n" "\n" ".. bola::\n" " :asd: qwe\n" " :qwe: 456", NULL); assert_non_null(html); assert_string_equal(html, "

foo

\n" "CHUNDA\n" "CHUNDA\n"); free(html); will_return(__wrap_blogc_directive_loader, "bola"); will_return(__wrap_blogc_directive_loader, "asd"); 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, "qwe"); will_return(__wrap_blogc_directive_loader, "123"); will_return(__wrap_blogc_directive_loader, "bola"); will_return(__wrap_blogc_directive_loader, "asd"); 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, "qwe"); will_return(__wrap_blogc_directive_loader, "456"); html = blogc_content_parse( "# foo\n" "\n" ".. bola:: asd\n" " :asd: qwe\n" " :qwe: 123\n" "\n" ".. bola:: asd\n" " :asd: qwe\n" " :qwe: 456\n", NULL); assert_non_null(html); assert_string_equal(html, "

foo

\n" "CHUNDA\n" "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, "qwe"); will_return(__wrap_blogc_directive_loader, "123"); 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, "qwe"); will_return(__wrap_blogc_directive_loader, "456"); html = blogc_content_parse( "# foo\n" "\n" ".. bola::\n" " :asd: qwe\n" " :qwe: 123\n" "\n" ".. bola::\n" " :asd: qwe\n" " :qwe: 456\n", NULL); assert_non_null(html); assert_string_equal(html, "

foo

\n" "CHUNDA\n" "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, "qwe"); will_return(__wrap_blogc_directive_loader, "123"); 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, "qwe"); will_return(__wrap_blogc_directive_loader, "456"); html = blogc_content_parse( "# foo\r\n" "\r\n" ".. bola::\r\n" " :asd: qwe\r\n" " :qwe: 123\r\n" "\r\n" ".. bola::\r\n" " :asd: qwe\r\n" " :qwe: 456\r\n", NULL); assert_non_null(html); assert_string_equal(html, "

foo

\r\n" "CHUNDA\n" "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", 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, "

foo

\n" "CHUNDA\n" "

bola

\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, "

foo

\r\n" "CHUNDA\n" "

bola

\r\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"); will_return(__wrap_blogc_directive_loader, "bolao"); will_return(__wrap_blogc_directive_loader, "chund"); 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, "ert"); will_return(__wrap_blogc_directive_loader, "zxvc"); 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" ".. bolao:: chund\r\n" " :asd: qwe\r\n" " :ert: zxvc\r\n" "\r\n" "bola", NULL); assert_non_null(html); assert_string_equal(html, "

foo

\r\n" "CHUNDA\n" "CHUNDA\n" "

bola

\r\n"); free(html); } 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, "

test

\n" "

chunda\n" "..

\n" "

guda\n" "lol

\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, "

test

\n" "

chunda

\n" "

...\n" "guda\n" "lol

\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, "

test

\n" "

chunda..

\n" "

guda\n" "lol

\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, "

test

\n" "

chunda

\n" "

...guda\n" "lol

\n"); free(html); } static void test_content_parse_invalid_header(void **state) { char *html = blogc_content_parse( "asd\n" "\n" "##bola\n", NULL); assert_non_null(html); assert_string_equal(html, "

asd

\n" "

##bola

\n"); free(html); } static void test_content_parse_invalid_header_empty(void **state) { char *html = blogc_content_parse( "asd\n" "\n" "##\n" "\n" "qwe\n", NULL); assert_non_null(html); assert_string_equal(html, "

asd

\n" "

##\n" "\n" "qwe

\n"); free(html); } static void test_content_parse_invalid_blockquote(void **state) { char *html = blogc_content_parse( "> asd\n" "> bola\n" "> foo\n", NULL); assert_non_null(html); assert_string_equal(html, "

> asd\n" "> bola\n" "> foo

\n"); free(html); html = blogc_content_parse( "> asd\n" "> bola", NULL); assert_non_null(html); assert_string_equal(html, "

> asd\n" "> bola

\n"); free(html); } static void test_content_parse_invalid_code(void **state) { char *html = blogc_content_parse( " asd\n" " bola\n" " foo\n", NULL); assert_non_null(html); assert_string_equal(html, "

asd\n" " bola\n" " foo

\n"); free(html); html = blogc_content_parse( " asd\n" " bola\n" " foo", NULL); assert_non_null(html); assert_string_equal(html, "

asd\n" " bola\n" " foo

\n"); free(html); } static void test_content_parse_invalid_horizontal_rule(void **state) { // this generates invalid html, but... char *html = blogc_content_parse("** asd", NULL); assert_non_null(html); assert_string_equal(html, "

asd

\n"); free(html); html = blogc_content_parse("** asd\n", NULL); assert_non_null(html); assert_string_equal(html, "

asd

\n"); free(html); } static void test_content_parse_invalid_unordered_list(void **state) { // more invalid html char *html = blogc_content_parse( "* asd\n" "1. qwe", NULL); assert_non_null(html); assert_string_equal(html, "

asd\n" "1. qwe

\n"); free(html); html = blogc_content_parse( "* asd\n" "1. qwe\n" "\n", NULL); assert_non_null(html); assert_string_equal(html, "

asd\n" "1. qwe

\n"); free(html); html = blogc_content_parse( "* asd\n" "1. qwe\n", NULL); assert_non_null(html); assert_string_equal(html, "

asd\n" "1. qwe" "

\n"); free(html); html = blogc_content_parse( "* asd\n" "1. qwe\n", NULL); assert_non_null(html); assert_string_equal(html, "

asd\n" "1. qwe" "

\n"); free(html); html = blogc_content_parse( "chunda\n" "\n" "* asd\n" "1. qwe\n" "\n" "poi\n", NULL); assert_non_null(html); assert_string_equal(html, "

chunda

\n" "

asd\n" "1. qwe

\n" "

poi

\n"); free(html); } static void test_content_parse_invalid_ordered_list(void **state) { // more invalid html char *html = blogc_content_parse( "1. asd\n" "* qwe", NULL); assert_non_null(html); assert_string_equal(html, "

1. asd\n" " qwe

\n"); free(html); html = blogc_content_parse( "1. asd\n" "* qwe\n" "\n", NULL); assert_non_null(html); assert_string_equal(html, "

1. asd\n" " qwe

\n"); free(html); html = blogc_content_parse( "1. asd\n" "* qwe\n", NULL); assert_non_null(html); assert_string_equal(html, "

1. asd\n" " qwe" "

\n"); free(html); html = blogc_content_parse( "1. asd\n" "* qwe\n", NULL); assert_non_null(html); assert_string_equal(html, "

1. asd\n" " qwe" "

\n"); free(html); html = blogc_content_parse( "chunda\n" "\n" "1. asd\n" "* qwe\n" "\n" "poi\n", NULL); assert_non_null(html); assert_string_equal(html, "

chunda

\n" "

1. asd\n" " qwe

\n" "

poi

\n"); free(html); html = blogc_content_parse( "1 asd\n" "* qwe\n", NULL); assert_non_null(html); assert_string_equal(html, "

1 asd\n" " qwe

\n"); free(html); html = blogc_content_parse( "a. asd\n" "2. qwe\n", NULL); assert_non_null(html); assert_string_equal(html, "

a. asd\n" "2. qwe

\n"); free(html); html = blogc_content_parse( "1.\nasd\n" "2. qwe\n", NULL); assert_non_null(html); assert_string_equal(html, "

1.\n" "asd\n" "2. qwe

\n"); free(html); html = blogc_content_parse("1.\n", NULL); assert_non_null(html); assert_string_equal(html, "

1.

\n"); free(html); html = blogc_content_parse("1 ", NULL); assert_non_null(html); assert_string_equal(html, "

1

\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, "

..

\n"); free(html); html = blogc_content_parse( ".. \n", NULL); assert_non_null(html); assert_string_equal(html, "

..

\n"); free(html); html = blogc_content_parse( ".. ", NULL); assert_non_null(html); assert_string_equal(html, "

..

\n"); free(html); html = blogc_content_parse( ".. \n", NULL); assert_non_null(html); assert_string_equal(html, "

..

\n"); free(html); html = blogc_content_parse( ".. a", NULL); assert_non_null(html); assert_string_equal(html, "

.. a

\n"); free(html); html = blogc_content_parse( ".. a\n", NULL); assert_non_null(html); assert_string_equal(html, "

.. a

\n"); free(html); html = blogc_content_parse( ".. asd", NULL); assert_non_null(html); assert_string_equal(html, "

.. asd

\n"); free(html); html = blogc_content_parse( ".. asd\n", NULL); assert_non_null(html); assert_string_equal(html, "

.. asd

\n"); free(html); html = blogc_content_parse( ".. asd:", NULL); assert_non_null(html); assert_string_equal(html, "

.. asd:

\n"); free(html); html = blogc_content_parse( ".. asd:\n", NULL); assert_non_null(html); assert_string_equal(html, "

.. asd:

\n"); free(html); html = blogc_content_parse( ".. asd::\n" " :", NULL); assert_non_null(html); assert_string_equal(html, "

.. asd::\n" " :

\n"); free(html); html = blogc_content_parse( ".. asd::\n" " :\n", NULL); assert_non_null(html); assert_string_equal(html, "

.. asd::\n" " :

\n"); free(html); html = blogc_content_parse( ".. asd::\n" " :a", NULL); assert_non_null(html); assert_string_equal(html, "

.. asd::\n" " :a

\n"); free(html); html = blogc_content_parse( ".. asd::\n" " :a\n", NULL); assert_non_null(html); assert_string_equal(html, "

.. asd::\n" " :a

\n"); free(html); html = blogc_content_parse( ".. asd::\n" " :as", NULL); assert_non_null(html); assert_string_equal(html, "

.. asd::\n" " :as

\n"); free(html); html = blogc_content_parse( ".. asd::\n" " :as\n", NULL); assert_non_null(html); assert_string_equal(html, "

.. asd::\n" " :as

\n"); free(html); html = blogc_content_parse( ".. asd::\n" " :as:", NULL); assert_non_null(html); assert_string_equal(html, "

.. asd::\n" " :as:

\n"); free(html); html = blogc_content_parse( ".. asd::\n" " :as:\n", NULL); assert_non_null(html); assert_string_equal(html, "

.. asd::\n" " :as:

\n"); free(html); html = blogc_content_parse( ".. asd::\n" " :as: ", NULL); assert_non_null(html); assert_string_equal(html, "

.. asd::\n" " :as:

\n"); free(html); html = blogc_content_parse( ".. asd::\n" " :as: \n", NULL); assert_non_null(html); assert_string_equal(html, "

.. asd::\n" " :as:

\n"); free(html); } static void test_content_parse_inline(void **state) { char *html = blogc_content_parse_inline( "**bola***asd* [![lol](http://google.com/lol.png) **lol** " "\\[asd\\]\\(qwe\\)](http://google.com) ``chunda`` [[bola]] chunda[9]"); assert_non_null(html); assert_string_equal(html, "bolaasd " " lol [asd](qwe) " "chunda bola chunda[9]"); free(html); html = blogc_content_parse_inline("*bola*"); assert_non_null(html); assert_string_equal(html, "bola"); free(html); } static void test_content_parse_inline_em(void **state) { char *html = blogc_content_parse_inline("*bola*"); assert_non_null(html); assert_string_equal(html, "bola"); free(html); html = blogc_content_parse_inline("*bola*\n"); assert_non_null(html); assert_string_equal(html, "bola\n"); free(html); html = blogc_content_parse_inline("_bola_"); assert_non_null(html); assert_string_equal(html, "bola"); free(html); html = blogc_content_parse_inline("_bola_\n"); assert_non_null(html); assert_string_equal(html, "bola\n"); free(html); html = blogc_content_parse_inline("_**bola**_\n"); assert_non_null(html); assert_string_equal(html, "bola\n"); free(html); // this is not really valid html = blogc_content_parse_inline("_**bola\n"); assert_non_null(html); assert_string_equal(html, "bola\n"); free(html); } static void test_content_parse_inline_strong(void **state) { char *html = blogc_content_parse_inline("**bola**"); assert_non_null(html); assert_string_equal(html, "bola"); free(html); html = blogc_content_parse_inline("**bola**\n"); assert_non_null(html); assert_string_equal(html, "bola\n"); free(html); html = blogc_content_parse_inline("__bola__"); assert_non_null(html); assert_string_equal(html, "bola"); free(html); html = blogc_content_parse_inline("__bola__\n"); assert_non_null(html); assert_string_equal(html, "bola\n"); free(html); html = blogc_content_parse_inline("__*bola*__\n"); assert_non_null(html); assert_string_equal(html, "bola\n"); free(html); // this is not really valid html = blogc_content_parse_inline("__*bola\n"); assert_non_null(html); assert_string_equal(html, "bola\n"); free(html); } static void test_content_parse_inline_code(void **state) { char *html = blogc_content_parse_inline("``bola``"); assert_non_null(html); assert_string_equal(html, "bola"); free(html); html = blogc_content_parse_inline("``bola``\n"); assert_non_null(html); assert_string_equal(html, "bola\n"); free(html); html = blogc_content_parse_inline("`bola`"); assert_non_null(html); assert_string_equal(html, "bola"); free(html); html = blogc_content_parse_inline("`bola`\n"); assert_non_null(html); assert_string_equal(html, "bola\n"); free(html); html = blogc_content_parse_inline("``bo*la``\n"); assert_non_null(html); assert_string_equal(html, "bo*la\n"); free(html); // invalid html = blogc_content_parse_inline("``bola\n"); assert_non_null(html); assert_string_equal(html, "bola\n"); free(html); html = blogc_content_parse_inline("`bola\n"); assert_non_null(html); assert_string_equal(html, "bola\n"); free(html); html = blogc_content_parse_inline("``bola`\n"); assert_non_null(html); assert_string_equal(html, "bola\n"); free(html); } static void test_content_parse_inline_link(void **state) { char *html = blogc_content_parse_inline("[bola](http://example.org/)"); assert_non_null(html); assert_string_equal(html, "bola"); free(html); html = blogc_content_parse_inline("[bola](http://example.org/)\n"); assert_non_null(html); assert_string_equal(html, "bola\n"); free(html); html = blogc_content_parse_inline("[bola]\n(http://example.org/)\n"); assert_non_null(html); assert_string_equal(html, "bola\n"); free(html); html = blogc_content_parse_inline("[bo\nla](http://example.org/)\n"); assert_non_null(html); assert_string_equal(html, "bo\nla\n"); free(html); html = blogc_content_parse_inline("[``bola``](http://example.org/)\n"); assert_non_null(html); assert_string_equal(html, "bola\n"); free(html); html = blogc_content_parse_inline("[``bola(2)[3]**!\\``](http://example.org/)\n"); assert_non_null(html); assert_string_equal(html, "bola(2)[3]**!\\\n"); free(html); // "invalid" html = blogc_content_parse_inline("[bola](\nhttp://example.org/)\n"); assert_non_null(html); assert_string_equal(html, "bola\n"); free(html); html = blogc_content_parse_inline("[bola](http://example.org/\n"); assert_non_null(html); assert_string_equal(html, "[bola](http://example.org/\n"); free(html); html = blogc_content_parse_inline("["); assert_non_null(html); assert_string_equal(html, "["); free(html); html = blogc_content_parse_inline("[\n"); assert_non_null(html); assert_string_equal(html, "[\n"); free(html); html = blogc_content_parse_inline("[a"); assert_non_null(html); assert_string_equal(html, "[a"); free(html); html = blogc_content_parse_inline("[a\n"); assert_non_null(html); assert_string_equal(html, "[a\n"); free(html); html = blogc_content_parse_inline("[a]"); assert_non_null(html); assert_string_equal(html, "[a]"); free(html); html = blogc_content_parse_inline("[a]\n"); assert_non_null(html); assert_string_equal(html, "[a]\n"); free(html); } static void test_content_parse_inline_link_auto(void **state) { char *html = blogc_content_parse_inline("[[guda]]"); assert_non_null(html); assert_string_equal(html, "guda"); free(html); html = blogc_content_parse_inline("[[guda]]\n"); assert_non_null(html); assert_string_equal(html, "guda\n"); free(html); html = blogc_content_parse_inline("[[guda]asd]"); assert_non_null(html); assert_string_equal(html, "guda"); free(html); html = blogc_content_parse_inline("[[guda]asd]\n"); assert_non_null(html); assert_string_equal(html, "guda\n"); free(html); html = blogc_content_parse_inline("[[guda]asd"); assert_non_null(html); assert_string_equal(html, "[[guda]asd"); free(html); html = blogc_content_parse_inline("[[guda]asd\n"); assert_non_null(html); assert_string_equal(html, "[[guda]asd\n"); free(html); } static void test_content_parse_inline_image(void **state) { char *html = blogc_content_parse_inline("![bola](http://example.org/)"); assert_non_null(html); assert_string_equal(html, "\"bola\""); free(html); html = blogc_content_parse_inline("![bola](http://example.org/)\n"); assert_non_null(html); assert_string_equal(html, "\"bola\"\n"); free(html); html = blogc_content_parse_inline("![bola]\n(http://example.org/)\n"); assert_non_null(html); assert_string_equal(html, "\"bola\"\n"); free(html); // "invalid" html = blogc_content_parse_inline("![bo\nla](http://example.org/)\n"); assert_non_null(html); assert_string_equal(html, "\"bo\nla\"\n"); free(html); html = blogc_content_parse_inline("![bola](\nhttp://example.org/)\n"); assert_non_null(html); assert_string_equal(html, "\"bola\"\n"); free(html); html = blogc_content_parse_inline("![bola](http://example.org/\n"); assert_non_null(html); assert_string_equal(html, "![bola](http://example.org/\n"); free(html); html = blogc_content_parse_inline("!"); assert_non_null(html); assert_string_equal(html, "!"); free(html); html = blogc_content_parse_inline("!["); assert_non_null(html); assert_string_equal(html, "!["); free(html); html = blogc_content_parse_inline("!\n"); assert_non_null(html); assert_string_equal(html, "!\n"); free(html); html = blogc_content_parse_inline("![\n"); assert_non_null(html); assert_string_equal(html, "![\n"); free(html); html = blogc_content_parse_inline("![a"); assert_non_null(html); assert_string_equal(html, "![a"); free(html); html = blogc_content_parse_inline("!a\n"); assert_non_null(html); assert_string_equal(html, "!a\n"); free(html); html = blogc_content_parse_inline("![a\n"); assert_non_null(html); assert_string_equal(html, "![a\n"); free(html); html = blogc_content_parse_inline("![a]"); assert_non_null(html); assert_string_equal(html, "![a]"); free(html); html = blogc_content_parse_inline("!a]\n"); assert_non_null(html); assert_string_equal(html, "!a]\n"); free(html); html = blogc_content_parse_inline("![a]\n"); assert_non_null(html); assert_string_equal(html, "![a]\n"); free(html); } static void test_content_parse_inline_line_break(void **state) { char *html = blogc_content_parse_inline("asd \n"); assert_non_null(html); assert_string_equal(html, "asd
\n"); free(html); html = blogc_content_parse_inline("asd "); assert_non_null(html); assert_string_equal(html, "asd
"); free(html); html = blogc_content_parse_inline("asd "); assert_non_null(html); assert_string_equal(html, "asd
"); free(html); // invalid html = blogc_content_parse_inline("asd "); assert_non_null(html); assert_string_equal(html, "asd "); free(html); html = blogc_content_parse_inline("asd \n"); assert_non_null(html); assert_string_equal(html, "asd \n"); free(html); } static void test_content_parse_inline_line_break_crlf(void **state) { char *html = blogc_content_parse_inline("asd \r\n"); assert_non_null(html); assert_string_equal(html, "asd
\r\n"); free(html); html = blogc_content_parse_inline("asd \r\n"); assert_non_null(html); assert_string_equal(html, "asd \r\n"); free(html); } int main(void) { const UnitTest tests[] = { unit_test(test_slugify), unit_test(test_htmlentities), unit_test(test_is_ordered_list_item), unit_test(test_content_parse), unit_test(test_content_parse_crlf), unit_test(test_content_parse_with_excerpt), unit_test(test_content_parse_with_excerpt_crlf), unit_test(test_content_parse_header), unit_test(test_content_parse_header_crlf), unit_test(test_content_parse_html), unit_test(test_content_parse_html_crlf), unit_test(test_content_parse_blockquote), unit_test(test_content_parse_blockquote_crlf), unit_test(test_content_parse_code), unit_test(test_content_parse_code_crlf), unit_test(test_content_parse_horizontal_rule), unit_test(test_content_parse_horizontal_rule_crlf), unit_test(test_content_parse_unordered_list), 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), unit_test(test_content_parse_invalid_blockquote), unit_test(test_content_parse_invalid_code), 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), unit_test(test_content_parse_inline_code), unit_test(test_content_parse_inline_link), unit_test(test_content_parse_inline_link_auto), unit_test(test_content_parse_inline_image), unit_test(test_content_parse_inline_line_break), unit_test(test_content_parse_inline_line_break_crlf), }; return run_tests(tests); }