libxml / tests /tests_HTMLparser_htmlParseLookupCommentEnd.c
AryaWu's picture
Upload folder using huggingface_hub
6baed57 verified
#include "unity/unity.h"
#include <libxml/HTMLparser.h>
#include <libxml/parserInternals.h>
#include <stdlib.h>
#include <string.h>
/* Wrapper provided in the module for the static function */
extern int test_htmlParseLookupCommentEnd(htmlParserCtxtPtr ctxt);
static htmlParserCtxtPtr makeCtxtFromString(const char *s) {
htmlParserCtxtPtr ctxt = htmlNewParserCtxt();
TEST_ASSERT_NOT_NULL_MESSAGE(ctxt, "htmlNewParserCtxt failed");
xmlParserInputPtr in = xmlNewStringInputStream((xmlParserCtxtPtr)ctxt, (const xmlChar *)s);
TEST_ASSERT_NOT_NULL_MESSAGE(in, "xmlNewStringInputStream failed");
int pushed = inputPush((xmlParserCtxtPtr)ctxt, in);
TEST_ASSERT_TRUE_MESSAGE(pushed >= 1, "inputPush failed");
/* Start fresh for each test */
ctxt->checkIndex = 0;
return ctxt;
}
void setUp(void) {
/* No global init required here; contexts are created per-test */
}
void tearDown(void) {
/* No global teardown needed */
}
/* Minimal valid comment end: <!--> */
void test_htmlParseLookupCommentEnd_simple_end_arrow(void) {
const char *s = "<!-->";
htmlParserCtxtPtr ctxt = makeCtxtFromString(s);
int ret = test_htmlParseLookupCommentEnd(ctxt);
TEST_ASSERT_EQUAL_INT(2, ret);
TEST_ASSERT_EQUAL_INT(0, ctxt->checkIndex);
htmlFreeParserCtxt(ctxt);
}
/* Invalid: <!--!> should not terminate */
void test_htmlParseLookupCommentEnd_bang_invalid(void) {
const char *s = "<!--!>";
htmlParserCtxtPtr ctxt = makeCtxtFromString(s);
int ret = test_htmlParseLookupCommentEnd(ctxt);
TEST_ASSERT_EQUAL_INT(-1, ret);
/* The function will have searched and not found a valid end */
htmlFreeParserCtxt(ctxt);
}
/* Invalid: <!---!> should not terminate */
void test_htmlParseLookupCommentEnd_dash_bang_invalid(void) {
const char *s = "<!---!>";
htmlParserCtxtPtr ctxt = makeCtxtFromString(s);
int ret = test_htmlParseLookupCommentEnd(ctxt);
TEST_ASSERT_EQUAL_INT(-1, ret);
htmlFreeParserCtxt(ctxt);
}
/* Valid: <!----!> should terminate at the --!> (offset 4) */
void test_htmlParseLookupCommentEnd_dash_dash_bang_valid(void) {
const char *s = "<!----!>";
htmlParserCtxtPtr ctxt = makeCtxtFromString(s);
int ret = test_htmlParseLookupCommentEnd(ctxt);
TEST_ASSERT_EQUAL_INT(4, ret);
TEST_ASSERT_EQUAL_INT(0, ctxt->checkIndex);
htmlFreeParserCtxt(ctxt);
}
/* Incomplete buffer: "<!--" requires more data, should return -1 and set checkIndex to 2 */
void test_htmlParseLookupCommentEnd_incomplete_needs_more_offset2(void) {
const char *s = "<!--";
htmlParserCtxtPtr ctxt = makeCtxtFromString(s);
int ret = test_htmlParseLookupCommentEnd(ctxt);
TEST_ASSERT_EQUAL_INT(-1, ret);
TEST_ASSERT_EQUAL_INT(2, ctxt->checkIndex);
htmlFreeParserCtxt(ctxt);
}
/* Incomplete buffer after '!': "<!--!" requires more data, should return -1 and set checkIndex to 2 */
void test_htmlParseLookupCommentEnd_incomplete_after_bang(void) {
const char *s = "<!--!";
htmlParserCtxtPtr ctxt = makeCtxtFromString(s);
int ret = test_htmlParseLookupCommentEnd(ctxt);
TEST_ASSERT_EQUAL_INT(-1, ret);
TEST_ASSERT_EQUAL_INT(2, ctxt->checkIndex);
htmlFreeParserCtxt(ctxt);
}
/* Skip non-terminators until a valid "-->" is found: "<!---a-->" should return 6 */
void test_htmlParseLookupCommentEnd_skip_non_terminators_then_close(void) {
const char *s = "<!---a-->";
htmlParserCtxtPtr ctxt = makeCtxtFromString(s);
int ret = test_htmlParseLookupCommentEnd(ctxt);
TEST_ASSERT_EQUAL_INT(6, ret);
TEST_ASSERT_EQUAL_INT(0, ctxt->checkIndex);
htmlFreeParserCtxt(ctxt);
}
/* Skip past a false '!'-sequence, then close: "<!--!x-->" should return 6 */
void test_htmlParseLookupCommentEnd_skip_false_bang_then_close(void) {
const char *s = "<!--!x-->";
htmlParserCtxtPtr ctxt = makeCtxtFromString(s);
int ret = test_htmlParseLookupCommentEnd(ctxt);
TEST_ASSERT_EQUAL_INT(6, ret);
TEST_ASSERT_EQUAL_INT(0, ctxt->checkIndex);
htmlFreeParserCtxt(ctxt);
}
/* No "--" present at all: "<!>" should return -1 */
void test_htmlParseLookupCommentEnd_no_hyphens(void) {
const char *s = "<!>";
htmlParserCtxtPtr ctxt = makeCtxtFromString(s);
int ret = test_htmlParseLookupCommentEnd(ctxt);
TEST_ASSERT_EQUAL_INT(-1, ret);
htmlFreeParserCtxt(ctxt);
}
int main(void) {
UNITY_BEGIN();
RUN_TEST(test_htmlParseLookupCommentEnd_simple_end_arrow);
RUN_TEST(test_htmlParseLookupCommentEnd_bang_invalid);
RUN_TEST(test_htmlParseLookupCommentEnd_dash_bang_invalid);
RUN_TEST(test_htmlParseLookupCommentEnd_dash_dash_bang_valid);
RUN_TEST(test_htmlParseLookupCommentEnd_incomplete_needs_more_offset2);
RUN_TEST(test_htmlParseLookupCommentEnd_incomplete_after_bang);
RUN_TEST(test_htmlParseLookupCommentEnd_skip_non_terminators_then_close);
RUN_TEST(test_htmlParseLookupCommentEnd_skip_false_bang_then_close);
RUN_TEST(test_htmlParseLookupCommentEnd_no_hyphens);
return UNITY_END();
}