| | #include "unity/unity.h" |
| | #include <libxml/HTMLparser.h> |
| |
|
| | #include <libxml/tree.h> |
| | #include <libxml/parser.h> |
| | #include <stdlib.h> |
| | #include <string.h> |
| |
|
| | |
| | void setUp(void) { |
| | |
| | } |
| |
|
| | void tearDown(void) { |
| | |
| | } |
| |
|
| | |
| | static xmlDocPtr make_doc_with_root(const char *root_name, xmlNodePtr *out_root) { |
| | xmlDocPtr doc = xmlNewDoc(BAD_CAST "1.0"); |
| | TEST_ASSERT_NOT_NULL_MESSAGE(doc, "Failed to create xmlDoc"); |
| |
|
| | xmlNodePtr root = xmlNewNode(NULL, BAD_CAST root_name); |
| | TEST_ASSERT_NOT_NULL_MESSAGE(root, "Failed to create root node"); |
| |
|
| | xmlDocSetRootElement(doc, root); |
| | if (out_root) *out_root = root; |
| | return doc; |
| | } |
| |
|
| | void test_htmlIsAutoClosed_null_elem_with_null_doc(void) { |
| | int res = htmlIsAutoClosed(NULL, NULL); |
| | TEST_ASSERT_EQUAL_INT(1, res); |
| | } |
| |
|
| | void test_htmlIsAutoClosed_null_elem_with_real_doc(void) { |
| | xmlNodePtr root = NULL; |
| | xmlDocPtr doc = make_doc_with_root("p", &root); |
| |
|
| | int res = htmlIsAutoClosed(doc, NULL); |
| | TEST_ASSERT_EQUAL_INT(1, res); |
| |
|
| | xmlFreeDoc(doc); |
| | } |
| |
|
| | void test_htmlIsAutoClosed_no_children_returns_0(void) { |
| | xmlNodePtr root = NULL; |
| | xmlDocPtr doc = make_doc_with_root("p", &root); |
| |
|
| | int res = htmlIsAutoClosed(doc, root); |
| | TEST_ASSERT_EQUAL_INT(0, res); |
| |
|
| | xmlFreeDoc(doc); |
| | } |
| |
|
| | void test_htmlIsAutoClosed_immediate_same_name_child_ignored_returns_0(void) { |
| | xmlNodePtr root = NULL; |
| | xmlDocPtr doc = make_doc_with_root("p", &root); |
| |
|
| | |
| | xmlNodePtr child = xmlNewChild(root, NULL, BAD_CAST "p", NULL); |
| | TEST_ASSERT_NOT_NULL(child); |
| |
|
| | int res = htmlIsAutoClosed(doc, root); |
| | TEST_ASSERT_EQUAL_INT(0, res); |
| |
|
| | xmlFreeDoc(doc); |
| | } |
| |
|
| | void test_htmlIsAutoClosed_child_non_trigger_returns_0(void) { |
| | xmlNodePtr root = NULL; |
| | xmlDocPtr doc = make_doc_with_root("p", &root); |
| |
|
| | |
| | xmlNodePtr child = xmlNewChild(root, NULL, BAD_CAST "span", NULL); |
| | TEST_ASSERT_NOT_NULL(child); |
| |
|
| | int res = htmlIsAutoClosed(doc, root); |
| | TEST_ASSERT_EQUAL_INT(0, res); |
| |
|
| | xmlFreeDoc(doc); |
| | } |
| |
|
| | void test_htmlIsAutoClosed_child_triggers_autoclose_returns_1(void) { |
| | xmlNodePtr root = NULL; |
| | xmlDocPtr doc = make_doc_with_root("p", &root); |
| |
|
| | |
| | xmlNodePtr child = xmlNewChild(root, NULL, BAD_CAST "div", NULL); |
| | TEST_ASSERT_NOT_NULL(child); |
| |
|
| | int res = htmlIsAutoClosed(doc, root); |
| | TEST_ASSERT_EQUAL_INT(1, res); |
| |
|
| | xmlFreeDoc(doc); |
| | } |
| |
|
| | void test_htmlIsAutoClosed_descendant_triggers_autoclose_returns_1(void) { |
| | xmlNodePtr root = NULL; |
| | xmlDocPtr doc = make_doc_with_root("p", &root); |
| |
|
| | |
| | xmlNodePtr span = xmlNewChild(root, NULL, BAD_CAST "span", NULL); |
| | TEST_ASSERT_NOT_NULL(span); |
| | xmlNodePtr div = xmlNewChild(span, NULL, BAD_CAST "div", NULL); |
| | TEST_ASSERT_NOT_NULL(div); |
| |
|
| | int res = htmlIsAutoClosed(doc, root); |
| | TEST_ASSERT_EQUAL_INT(1, res); |
| |
|
| | xmlFreeDoc(doc); |
| | } |
| |
|
| | void test_htmlIsAutoClosed_multiple_children_only_one_triggers_returns_1(void) { |
| | xmlNodePtr root = NULL; |
| | xmlDocPtr doc = make_doc_with_root("p", &root); |
| |
|
| | xmlNodePtr c1 = xmlNewChild(root, NULL, BAD_CAST "span", NULL); |
| | xmlNodePtr c2 = xmlNewChild(root, NULL, BAD_CAST "em", NULL); |
| | xmlNodePtr c3 = xmlNewChild(root, NULL, BAD_CAST "div", NULL); |
| | TEST_ASSERT_NOT_NULL(c1); |
| | TEST_ASSERT_NOT_NULL(c2); |
| | TEST_ASSERT_NOT_NULL(c3); |
| |
|
| | int res = htmlIsAutoClosed(doc, root); |
| | TEST_ASSERT_EQUAL_INT(1, res); |
| |
|
| | xmlFreeDoc(doc); |
| | } |
| |
|
| | void test_htmlIsAutoClosed_null_doc_parameter_works_with_valid_tree(void) { |
| | xmlNodePtr root = NULL; |
| | xmlDocPtr doc = make_doc_with_root("p", &root); |
| |
|
| | |
| | xmlNodePtr div = xmlNewChild(root, NULL, BAD_CAST "div", NULL); |
| | TEST_ASSERT_NOT_NULL(div); |
| |
|
| | int res = htmlIsAutoClosed(NULL, root); |
| | TEST_ASSERT_EQUAL_INT(1, res); |
| |
|
| | xmlFreeDoc(doc); |
| | } |
| |
|
| | int main(void) { |
| | xmlInitParser(); |
| |
|
| | UNITY_BEGIN(); |
| | RUN_TEST(test_htmlIsAutoClosed_null_elem_with_null_doc); |
| | RUN_TEST(test_htmlIsAutoClosed_null_elem_with_real_doc); |
| | RUN_TEST(test_htmlIsAutoClosed_no_children_returns_0); |
| | RUN_TEST(test_htmlIsAutoClosed_immediate_same_name_child_ignored_returns_0); |
| | RUN_TEST(test_htmlIsAutoClosed_child_non_trigger_returns_0); |
| | RUN_TEST(test_htmlIsAutoClosed_child_triggers_autoclose_returns_1); |
| | RUN_TEST(test_htmlIsAutoClosed_descendant_triggers_autoclose_returns_1); |
| | RUN_TEST(test_htmlIsAutoClosed_multiple_children_only_one_triggers_returns_1); |
| | RUN_TEST(test_htmlIsAutoClosed_null_doc_parameter_works_with_valid_tree); |
| | int ret = UNITY_END(); |
| |
|
| | xmlCleanupParser(); |
| | return ret; |
| | } |