⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 runtests.c

📁 很牛的GUI源码wxWidgets-2.8.0.zip 可在多种平台下运行.
💻 C
字号:
#include <assert.h>#include <check.h>#include <stdlib.h>#include <stdio.h>#include <string.h>#include "expat.h"#include "chardata.h"static XML_Parser parser;static voidbasic_setup(void){    parser = XML_ParserCreate(NULL);    if (parser == NULL)        fail("Parser not created.");}static voidbasic_teardown(void){    if (parser != NULL)        XML_ParserFree(parser);}/* Generate a failure using the parser state to create an error message;   this should be used when the parser reports an error we weren't   expecting.*/static void_xml_failure(XML_Parser parser, const char *file, int line){    char buffer[1024];    sprintf(buffer,            "\n    %s (line %d, offset %d)\n    reported from %s, line %d",            XML_ErrorString(XML_GetErrorCode(parser)),            XML_GetCurrentLineNumber(parser),            XML_GetCurrentColumnNumber(parser),            file, line);    _fail_unless(0, file, line, buffer);}#define xml_failure(parser) _xml_failure((parser), __FILE__, __LINE__)static void_expect_failure(char *text, enum XML_Error errorCode, char *errorMessage,                char *file, int lineno){    if (XML_Parse(parser, text, strlen(text), XML_TRUE) == XML_STATUS_OK)        /* Hackish use of _fail_unless() macro, but let's us report           the right filename and line number. */        _fail_unless(0, file, lineno, errorMessage);    if (XML_GetErrorCode(parser) != errorCode)        _xml_failure(parser, file, lineno);}#define expect_failure(text, errorCode, errorMessage) \        _expect_failure((text), (errorCode), (errorMessage), \                        __FILE__, __LINE__)/* Dummy handlers for when we need to set a handler to tickle a bug,   but it doesn't need to do anything.*/static voiddummy_start_doctype_handler(void           *userData,                            const XML_Char *doctypeName,                            const XML_Char *sysid,                            const XML_Char *pubid,                            int            has_internal_subset){}static voiddummy_end_doctype_handler(void *userData){}static voiddummy_entity_decl_handler(void           *userData,                          const XML_Char *entityName,                          int            is_parameter_entity,                          const XML_Char *value,                          int            value_length,                          const XML_Char *base,                          const XML_Char *systemId,                          const XML_Char *publicId,                          const XML_Char *notationName){}static voiddummy_notation_decl_handler(void *userData,                            const XML_Char *notationName,                            const XML_Char *base,                            const XML_Char *systemId,                            const XML_Char *publicId){}static voiddummy_element_decl_handler(void *userData,                           const XML_Char *name,                           XML_Content *model){}static voiddummy_attlist_decl_handler(void           *userData,                           const XML_Char *elname,                           const XML_Char *attname,                           const XML_Char *att_type,                           const XML_Char *dflt,                           int            isrequired){}static voiddummy_comment_handler(void *userData, const XML_Char *data){}static voiddummy_pi_handler(void *userData, const XML_Char *target, const XML_Char *data){}static voiddummy_start_element(void *userData,                    const XML_Char *name, const XML_Char **atts){}/* * Character & encoding tests. */START_TEST(test_nul_byte){    char text[] = "<doc>\0</doc>";    /* test that a NUL byte (in US-ASCII data) is an error */    if (XML_Parse(parser, text, sizeof(text) - 1, XML_TRUE) == XML_STATUS_OK)        fail("Parser did not report error on NUL-byte.");    if (XML_GetErrorCode(parser) != XML_ERROR_INVALID_TOKEN)        xml_failure(parser);}END_TESTSTART_TEST(test_u0000_char){    /* test that a NUL byte (in US-ASCII data) is an error */    expect_failure("<doc>&#0;</doc>",                   XML_ERROR_BAD_CHAR_REF,                   "Parser did not report error on NUL-byte.");}END_TESTSTART_TEST(test_bom_utf8){    /* This test is really just making sure we don't core on a UTF-8 BOM. */    char *text = "\357\273\277<e/>";    if (XML_Parse(parser, text, strlen(text), XML_TRUE) == XML_STATUS_ERROR)        xml_failure(parser);}END_TESTSTART_TEST(test_bom_utf16_be){    char text[] = "\376\377\0<\0e\0/\0>";    if (XML_Parse(parser, text, sizeof(text)-1, XML_TRUE) == XML_STATUS_ERROR)        xml_failure(parser);}END_TESTSTART_TEST(test_bom_utf16_le){    char text[] = "\377\376<\0e\0/\0>\0";    if (XML_Parse(parser, text, sizeof(text)-1, XML_TRUE) == XML_STATUS_ERROR)        xml_failure(parser);}END_TESTstatic voidaccumulate_characters(void *userData, const XML_Char *s, int len){    CharData_AppendXMLChars((CharData *)userData, s, len);}static voidaccumulate_attribute(void *userData, const XML_Char *name,                     const XML_Char **atts){    CharData *storage = (CharData *)userData;    if (storage->count < 0 && atts != NULL && atts[0] != NULL) {        /* "accumulate" the value of the first attribute we see */        CharData_AppendXMLChars(storage, atts[1], -1);    }}static void_run_character_check(XML_Char *text, XML_Char *expected,                     const char *file, int line){    CharData storage;    CharData_Init(&storage);    XML_SetUserData(parser, &storage);    XML_SetCharacterDataHandler(parser, accumulate_characters);    if (XML_Parse(parser, text, strlen(text), XML_TRUE) == XML_STATUS_ERROR)        _xml_failure(parser, file, line);    CharData_CheckXMLChars(&storage, expected);}#define run_character_check(text, expected) \        _run_character_check(text, expected, __FILE__, __LINE__)static void_run_attribute_check(XML_Char *text, XML_Char *expected,                     const char *file, int line){    CharData storage;    CharData_Init(&storage);    XML_SetUserData(parser, &storage);    XML_SetStartElementHandler(parser, accumulate_attribute);    if (XML_Parse(parser, text, strlen(text), XML_TRUE) == XML_STATUS_ERROR)        _xml_failure(parser, file, line);    CharData_CheckXMLChars(&storage, expected);}#define run_attribute_check(text, expected) \        _run_attribute_check(text, expected, __FILE__, __LINE__)/* Regression test for SF bug #491986. */START_TEST(test_danish_latin1){    char *text =        "<?xml version='1.0' encoding='iso-8859-1'?>\n"        "<e>J鴕gen 骧迤嘏</e>";    run_character_check(text,             "J\xC3\xB8rgen \xC3\xA6\xC3\xB8\xC3\xA5\xC3\x86\xC3\x98\xC3\x85");}END_TEST/* Regression test for SF bug #514281. */START_TEST(test_french_charref_hexidecimal){    char *text =        "<?xml version='1.0' encoding='iso-8859-1'?>\n"        "<doc>&#xE9;&#xE8;&#xE0;&#xE7;&#xEA;&#xC8;</doc>";    run_character_check(text,                        "\xC3\xA9\xC3\xA8\xC3\xA0\xC3\xA7\xC3\xAA\xC3\x88");}END_TESTSTART_TEST(test_french_charref_decimal){    char *text =        "<?xml version='1.0' encoding='iso-8859-1'?>\n"        "<doc>&#233;&#232;&#224;&#231;&#234;&#200;</doc>";    run_character_check(text,                        "\xC3\xA9\xC3\xA8\xC3\xA0\xC3\xA7\xC3\xAA\xC3\x88");}END_TESTSTART_TEST(test_french_latin1){    char *text =        "<?xml version='1.0' encoding='iso-8859-1'?>\n"        "<doc>\xE9\xE8\xE0\xE7\xEa\xC8</doc>";    run_character_check(text,                        "\xC3\xA9\xC3\xA8\xC3\xA0\xC3\xA7\xC3\xAA\xC3\x88");}END_TESTSTART_TEST(test_french_utf8){    char *text =        "<?xml version='1.0' encoding='utf-8'?>\n"        "<doc>\xC3\xA9</doc>";    run_character_check(text, "\xC3\xA9");}END_TEST/* Regression test for SF bug #600479.   XXX There should be a test that exercises all legal XML Unicode   characters as PCDATA and attribute value content, and XML Name   characters as part of element and attribute names.*/START_TEST(test_utf8_false_rejection){    char *text = "<doc>\xEF\xBA\xBF</doc>";    run_character_check(text, "\xEF\xBA\xBF");}END_TEST/* Regression test for SF bug #477667.   This test assures that any 8-bit character followed by a 7-bit   character will not be mistakenly interpreted as a valid UTF-8   sequence.*/START_TEST(test_illegal_utf8){    char text[100];    int i;    for (i = 128; i <= 255; ++i) {        sprintf(text, "<e>%ccd</e>", i);        if (XML_Parse(parser, text, strlen(text), XML_TRUE) == XML_STATUS_OK) {            sprintf(text,                    "expected token error for '%c' (ordinal %d) in UTF-8 text",                    i, i);            fail(text);        }        else if (XML_GetErrorCode(parser) != XML_ERROR_INVALID_TOKEN)            xml_failure(parser);        /* Reset the parser since we use the same parser repeatedly. */        XML_ParserReset(parser, NULL);    }}END_TESTSTART_TEST(test_utf16){    /* <?xml version="1.0" encoding="UTF-16"?>       <doc a='123'>some text</doc>    */    char text[] =        "\000<\000?\000x\000m\000\154\000 \000v\000e\000r\000s\000i\000o"        "\000n\000=\000'\0001\000.\000\060\000'\000 \000e\000n\000c\000o"        "\000d\000i\000n\000g\000=\000'\000U\000T\000F\000-\0001\000\066"        "\000'\000?\000>\000\n"        "\000<\000d\000o\000c\000 \000a\000=\000'\0001\0002\0003\000'"        "\000>\000s\000o\000m\000e\000 \000t\000e\000x\000t\000<\000/"        "\000d\000o\000c\000>";    if (XML_Parse(parser, text, sizeof(text)-1, XML_TRUE) == XML_STATUS_ERROR)        xml_failure(parser);}END_TESTSTART_TEST(test_utf16_le_epilog_newline){    int first_chunk_bytes = 17;    char text[] =         "\xFF\xFE"                      /* BOM */        "<\000e\000/\000>\000"          /* document element */        "\r\000\n\000\r\000\n\000";     /* epilog */    if (first_chunk_bytes >= sizeof(text) - 1)        fail("bad value of first_chunk_bytes");    if (  XML_Parse(parser, text, first_chunk_bytes, XML_FALSE)          == XML_STATUS_ERROR)        xml_failure(parser);    else {        enum XML_Status rc;        rc = XML_Parse(parser, text + first_chunk_bytes,                       sizeof(text) - first_chunk_bytes - 1, XML_TRUE);        if (rc == XML_STATUS_ERROR)            xml_failure(parser);    }}END_TEST/* Regression test for SF bug #481609. */START_TEST(test_latin1_umlauts){    char *text =        "<?xml version='1.0' encoding='iso-8859-1'?>\n"        "<e a='

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -