| 310 | } |
| 311 | |
| 312 | static void iterator_delete(test_batch_runner *runner) { |
| 313 | static const char md[] = "a *b* c\n" |
| 314 | "\n" |
| 315 | "* item1\n" |
| 316 | "* item2\n" |
| 317 | "\n" |
| 318 | "a `b` c\n" |
| 319 | "\n" |
| 320 | "* item1\n" |
| 321 | "* item2\n"; |
| 322 | cmark_node *doc = cmark_parse_document(md, sizeof(md) - 1, CMARK_OPT_DEFAULT); |
| 323 | cmark_iter *iter = cmark_iter_new(doc); |
| 324 | cmark_event_type ev_type; |
| 325 | |
| 326 | while ((ev_type = cmark_iter_next(iter)) != CMARK_EVENT_DONE) { |
| 327 | cmark_node *node = cmark_iter_get_node(iter); |
| 328 | // Delete list, emph, and code nodes. |
| 329 | if ((ev_type == CMARK_EVENT_EXIT && node->type == CMARK_NODE_LIST) || |
| 330 | (ev_type == CMARK_EVENT_EXIT && node->type == CMARK_NODE_EMPH) || |
| 331 | (ev_type == CMARK_EVENT_ENTER && node->type == CMARK_NODE_CODE)) { |
| 332 | cmark_node_free(node); |
| 333 | } |
| 334 | } |
| 335 | |
| 336 | char *html = cmark_render_html(doc, CMARK_OPT_DEFAULT); |
| 337 | static const char expected[] = "<p>a c</p>\n" |
| 338 | "<p>a c</p>\n"; |
| 339 | STR_EQ(runner, html, expected, "iterate and delete nodes"); |
| 340 | |
| 341 | cmark_mem *allocator = cmark_get_default_mem_allocator(); |
| 342 | |
| 343 | allocator->free(html); |
| 344 | cmark_iter_free(iter); |
| 345 | cmark_node_free(doc); |
| 346 | } |
| 347 | |
| 348 | static void create_tree(test_batch_runner *runner) { |
| 349 | char *html; |
no test coverage detected