#include "unity/unity.h"
#include
#include
#include
/* Wrapper for the static function provided in the module */
extern int test_htmlCharEncCheckAsciiCompatible(htmlParserCtxt *ctxt, const xmlChar *encoding);
static htmlParserCtxtPtr make_ctxt(void) {
htmlParserCtxtPtr ctxt = htmlNewParserCtxt();
TEST_ASSERT_NOT_NULL_MESSAGE(ctxt, "Failed to create HTML parser context");
return ctxt;
}
void setUp(void) {
/* Optional per-test initialization */
}
void tearDown(void) {
/* Optional per-test cleanup */
}
void test_htmlCharEncCheckAsciiCompatible_utf8_returns_0(void) {
htmlParserCtxtPtr ctxt = make_ctxt();
int ret = test_htmlCharEncCheckAsciiCompatible(ctxt, (const xmlChar *)"UTF-8");
TEST_ASSERT_EQUAL_INT_MESSAGE(0, ret, "UTF-8 must be treated as ASCII-compatible");
htmlFreeParserCtxt(ctxt);
}
void test_htmlCharEncCheckAsciiCompatible_utf8_mixed_case_returns_0(void) {
htmlParserCtxtPtr ctxt = make_ctxt();
int ret = test_htmlCharEncCheckAsciiCompatible(ctxt, (const xmlChar *)"uTf-8");
TEST_ASSERT_EQUAL_INT_MESSAGE(0, ret, "Case-insensitive UTF-8 must be ASCII-compatible");
htmlFreeParserCtxt(ctxt);
}
void test_htmlCharEncCheckAsciiCompatible_us_ascii_returns_0(void) {
htmlParserCtxtPtr ctxt = make_ctxt();
int ret = test_htmlCharEncCheckAsciiCompatible(ctxt, (const xmlChar *)"US-ASCII");
/* US-ASCII should be ASCII-compatible */
TEST_ASSERT_EQUAL_INT_MESSAGE(0, ret, "US-ASCII must be ASCII-compatible");
htmlFreeParserCtxt(ctxt);
}
void test_htmlCharEncCheckAsciiCompatible_utf16_returns_minus1(void) {
htmlParserCtxtPtr ctxt = make_ctxt();
int ret = test_htmlCharEncCheckAsciiCompatible(ctxt, (const xmlChar *)"UTF-16");
TEST_ASSERT_EQUAL_INT_MESSAGE(-1, ret, "UTF-16 is not ASCII-compatible and should be rejected");
htmlFreeParserCtxt(ctxt);
}
void test_htmlCharEncCheckAsciiCompatible_unknown_encoding_returns_minus1(void) {
htmlParserCtxtPtr ctxt = make_ctxt();
int ret = test_htmlCharEncCheckAsciiCompatible(ctxt, (const xmlChar *)"X-DOES-NOT-EXIST");
TEST_ASSERT_EQUAL_INT_MESSAGE(-1, ret, "Unknown encodings should be rejected");
htmlFreeParserCtxt(ctxt);
}
int main(void) {
/* Initialize libxml2 globally for safety */
xmlInitParser();
UNITY_BEGIN();
RUN_TEST(test_htmlCharEncCheckAsciiCompatible_utf8_returns_0);
RUN_TEST(test_htmlCharEncCheckAsciiCompatible_utf8_mixed_case_returns_0);
RUN_TEST(test_htmlCharEncCheckAsciiCompatible_us_ascii_returns_0);
RUN_TEST(test_htmlCharEncCheckAsciiCompatible_utf16_returns_minus1);
RUN_TEST(test_htmlCharEncCheckAsciiCompatible_unknown_encoding_returns_minus1);
int rc = UNITY_END();
xmlCleanupParser();
return rc;
}