diff options
-rw-r--r-- | api_test/main.c | 198 |
1 files changed, 198 insertions, 0 deletions
diff --git a/api_test/main.c b/api_test/main.c index 9f1059f..82a0dfb 100644 --- a/api_test/main.c +++ b/api_test/main.c @@ -8,6 +8,203 @@ #include "harness.h" static void +accessors(test_batch_runner *runner) +{ + static const unsigned char markdown[] = + "## Header\n" + "\n" + "* Item 1\n" + "* Item 2\n" + "\n" + "2. Item 1\n" + "\n" + "3. Item 2\n" + "\n" + "\n" + " code\n" + "\n" + "``` lang\n" + "fenced\n" + "```\n" + "\n" + "<div>html</div>\n" + "\n" + "[link](url 'title')\n"; + + cmark_node *doc = cmark_parse_document(markdown, sizeof(markdown) - 1); + + // Getters + + cmark_node *header = cmark_node_first_child(doc); + INT_EQ(runner, cmark_node_get_type(header), CMARK_NODE_ATX_HEADER, + "get_type header"); + INT_EQ(runner, cmark_node_get_header_level(header), 2, + "get_header_level"); + + cmark_node *bullet_list = cmark_node_next(header); + INT_EQ(runner, cmark_node_get_type(bullet_list), CMARK_NODE_LIST, + "get_type bullet list"); + INT_EQ(runner, cmark_node_get_list_type(bullet_list), + CMARK_BULLET_LIST, "get_list_type bullet"); + INT_EQ(runner, cmark_node_get_list_tight(bullet_list), 1, + "get_list_tight tight"); + + cmark_node *ordered_list = cmark_node_next(bullet_list); + INT_EQ(runner, cmark_node_get_type(ordered_list), CMARK_NODE_LIST, + "get_type ordered list"); + INT_EQ(runner, cmark_node_get_list_type(ordered_list), + CMARK_ORDERED_LIST, "get_list_type ordered"); + INT_EQ(runner, cmark_node_get_list_start(ordered_list), 2, + "get_list_start"); + INT_EQ(runner, cmark_node_get_list_tight(ordered_list), 0, + "get_list_tight loose"); + + cmark_node *code = cmark_node_next(ordered_list); + INT_EQ(runner, cmark_node_get_type(code), CMARK_NODE_INDENTED_CODE, + "get_type indented code"); + STR_EQ(runner, cmark_node_get_string_content(code), "code\n", + "get_string_content indented code"); + + cmark_node *fenced = cmark_node_next(code); + INT_EQ(runner, cmark_node_get_type(fenced), CMARK_NODE_FENCED_CODE, + "get_type fenced code"); + STR_EQ(runner, cmark_node_get_string_content(fenced), "fenced\n", + "get_string_content fenced code"); + STR_EQ(runner, cmark_node_get_fence_info(fenced), "lang", + "get_fence_info"); + + cmark_node *html = cmark_node_next(fenced); + INT_EQ(runner, cmark_node_get_type(html), CMARK_NODE_HTML, + "get_type html"); + STR_EQ(runner, cmark_node_get_string_content(html), + "<div>html</div>\n", "get_string_content html"); + + cmark_node *paragraph = cmark_node_next(html); + INT_EQ(runner, cmark_node_get_type(paragraph), CMARK_NODE_PARAGRAPH, + "get_type paragraph"); + INT_EQ(runner, cmark_node_get_start_line(paragraph), 19, + "get_start_line"); + INT_EQ(runner, cmark_node_get_start_column(paragraph), 1, + "get_start_column"); + INT_EQ(runner, cmark_node_get_end_line(paragraph), 19, + "get_end_line"); + + cmark_node *link = cmark_node_first_child(paragraph); + INT_EQ(runner, cmark_node_get_type(link), CMARK_NODE_LINK, + "get_type link"); + STR_EQ(runner, cmark_node_get_url(link), "url", + "get_url"); + STR_EQ(runner, cmark_node_get_title(link), "title", + "get_title"); + + cmark_node *string = cmark_node_first_child(link); + INT_EQ(runner, cmark_node_get_type(string), CMARK_NODE_STRING, + "get_type string"); + STR_EQ(runner, cmark_node_get_string_content(string), "link", + "get_string_content string"); + + // Setters + + OK(runner, cmark_node_set_header_level(header, 3), + "set_header_level"); + + OK(runner, cmark_node_set_list_type(bullet_list, CMARK_ORDERED_LIST), + "set_list_type ordered"); + OK(runner, cmark_node_set_list_start(bullet_list, 3), + "set_list_start"); + OK(runner, cmark_node_set_list_tight(bullet_list, 0), + "set_list_tight loose"); + + OK(runner, cmark_node_set_list_type(ordered_list, CMARK_BULLET_LIST), + "set_list_type bullet"); + OK(runner, cmark_node_set_list_tight(ordered_list, 1), + "set_list_tight tight"); + + OK(runner, cmark_node_set_string_content(code, "CODE\n"), + "set_string_content indented code"); + + OK(runner, cmark_node_set_string_content(fenced, "FENCED\n"), + "set_string_content fenced code"); + OK(runner, cmark_node_set_fence_info(fenced, "LANG"), + "set_fence_info"); + + OK(runner, cmark_node_set_string_content(html, "<div>HTML</div>\n"), + "set_string_content html"); + + OK(runner, cmark_node_set_url(link, "URL"), + "set_url"); + OK(runner, cmark_node_set_title(link, "TITLE"), + "set_title"); + + OK(runner, cmark_node_set_string_content(string, "LINK"), + "set_string_content string"); + + char *rendered_html = (char *)cmark_render_html(doc); + static const char expected_html[] = + "<h3>Header</h3>\n" + "<ol start=\"3\">\n" + "<li>\n" + "<p>Item 1</p>\n" + "</li>\n" + "<li>\n" + "<p>Item 2</p>\n" + "</li>\n" + "</ol>\n" + "<ul start=\"2\">\n" + "<li>Item 1</li>\n" + "<li>Item 2</li>\n" + "</ul>\n" + "<pre><code>CODE\n" + "</code></pre>\n" + "<pre><code class=\"language-LANG\">FENCED\n" + "</code></pre>\n" + "<div>HTML</div>\n" + "<p><a href=\"URL\" title=\"TITLE\">LINK</a></p>\n"; + STR_EQ(runner, rendered_html, expected_html, "setters work"); + free(rendered_html); + + // Getter errors + + INT_EQ(runner, cmark_node_get_header_level(bullet_list), 0, + "get_header_level error"); + INT_EQ(runner, cmark_node_get_list_type(header), CMARK_NO_LIST, + "get_list_type error"); + INT_EQ(runner, cmark_node_get_list_start(code), 0, + "get_list_start error"); + INT_EQ(runner, cmark_node_get_list_tight(fenced), 0, + "get_list_tight error"); + OK(runner, cmark_node_get_string_content(ordered_list) == NULL, + "get_string_content error"); + OK(runner, cmark_node_get_fence_info(paragraph) == NULL, + "get_fence_info error"); + OK(runner, cmark_node_get_url(html) == NULL, + "get_url error"); + OK(runner, cmark_node_get_title(header) == NULL, + "get_title error"); + + // Setter errors + + OK(runner, !cmark_node_set_header_level(bullet_list, 3), + "set_header_level error"); + OK(runner, !cmark_node_set_list_type(header, CMARK_ORDERED_LIST), + "set_list_type error"); + OK(runner, !cmark_node_set_list_start(code, 3), + "set_list_start error"); + OK(runner, !cmark_node_set_list_tight(fenced, 0), + "set_list_tight error"); + OK(runner, !cmark_node_set_string_content(ordered_list, "content\n"), + "set_string_content error"); + OK(runner, !cmark_node_set_fence_info(paragraph, "lang"), + "set_fence_info error"); + OK(runner, !cmark_node_set_url(html, "url"), + "set_url error"); + OK(runner, !cmark_node_set_title(header, "title"), + "set_title error"); + + cmark_node_destroy(doc); +} + +static void create_tree(test_batch_runner *runner) { char *html; @@ -73,6 +270,7 @@ int main() { int retval; test_batch_runner *runner = test_batch_runner_new(); + accessors(runner); create_tree(runner); test_print_summary(runner); |