xref: /freebsd/contrib/expat/tests/common.h (revision fe9278888fd4414abe2d922e469cf608005f4c65)
14543ef51SXin LI /* Commonly used functions for the Expat test suite
24543ef51SXin LI                             __  __            _
34543ef51SXin LI                          ___\ \/ /_ __   __ _| |_
44543ef51SXin LI                         / _ \\  /| '_ \ / _` | __|
54543ef51SXin LI                        |  __//  \| |_) | (_| | |_
64543ef51SXin LI                         \___/_/\_\ .__/ \__,_|\__|
74543ef51SXin LI                                  |_| XML parser
84543ef51SXin LI 
94543ef51SXin LI    Copyright (c) 2001-2006 Fred L. Drake, Jr. <fdrake@users.sourceforge.net>
104543ef51SXin LI    Copyright (c) 2003      Greg Stein <gstein@users.sourceforge.net>
114543ef51SXin LI    Copyright (c) 2005-2007 Steven Solie <steven@solie.ca>
124543ef51SXin LI    Copyright (c) 2005-2012 Karl Waclawek <karl@waclawek.net>
13*fe927888SPhilip Paeps    Copyright (c) 2016-2025 Sebastian Pipping <sebastian@pipping.org>
144543ef51SXin LI    Copyright (c) 2017-2022 Rhodri James <rhodri@wildebeest.org.uk>
154543ef51SXin LI    Copyright (c) 2017      Joe Orton <jorton@redhat.com>
164543ef51SXin LI    Copyright (c) 2017      José Gutiérrez de la Concha <jose@zeroc.com>
174543ef51SXin LI    Copyright (c) 2018      Marco Maggi <marco.maggi-ipsu@poste.it>
184543ef51SXin LI    Copyright (c) 2019      David Loffredo <loffredo@steptools.com>
194543ef51SXin LI    Copyright (c) 2020      Tim Gates <tim.gates@iress.com>
204543ef51SXin LI    Copyright (c) 2021      Donghee Na <donghee.na@python.org>
214543ef51SXin LI    Copyright (c) 2023      Sony Corporation / Snild Dolkow <snild@sony.com>
224543ef51SXin LI    Licensed under the MIT license:
234543ef51SXin LI 
244543ef51SXin LI    Permission is  hereby granted,  free of charge,  to any  person obtaining
254543ef51SXin LI    a  copy  of  this  software   and  associated  documentation  files  (the
264543ef51SXin LI    "Software"),  to  deal in  the  Software  without restriction,  including
274543ef51SXin LI    without  limitation the  rights  to use,  copy,  modify, merge,  publish,
284543ef51SXin LI    distribute, sublicense, and/or sell copies of the Software, and to permit
294543ef51SXin LI    persons  to whom  the Software  is  furnished to  do so,  subject to  the
304543ef51SXin LI    following conditions:
314543ef51SXin LI 
324543ef51SXin LI    The above copyright  notice and this permission notice  shall be included
334543ef51SXin LI    in all copies or substantial portions of the Software.
344543ef51SXin LI 
354543ef51SXin LI    THE  SOFTWARE  IS  PROVIDED  "AS  IS",  WITHOUT  WARRANTY  OF  ANY  KIND,
364543ef51SXin LI    EXPRESS  OR IMPLIED,  INCLUDING  BUT  NOT LIMITED  TO  THE WARRANTIES  OF
374543ef51SXin LI    MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
384543ef51SXin LI    NO EVENT SHALL THE AUTHORS OR  COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
394543ef51SXin LI    DAMAGES OR  OTHER LIABILITY, WHETHER  IN AN  ACTION OF CONTRACT,  TORT OR
404543ef51SXin LI    OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
414543ef51SXin LI    USE OR OTHER DEALINGS IN THE SOFTWARE.
424543ef51SXin LI */
434543ef51SXin LI 
444543ef51SXin LI #ifdef __cplusplus
454543ef51SXin LI extern "C" {
464543ef51SXin LI #endif
474543ef51SXin LI 
484543ef51SXin LI #ifndef XML_COMMON_H
494543ef51SXin LI #  define XML_COMMON_H
504543ef51SXin LI 
514543ef51SXin LI #  include "expat_config.h"
524543ef51SXin LI #  include "minicheck.h"
534543ef51SXin LI #  include "chardata.h"
544543ef51SXin LI 
554543ef51SXin LI #  ifdef XML_LARGE_SIZE
564543ef51SXin LI #    define XML_FMT_INT_MOD "ll"
574543ef51SXin LI #  else
584543ef51SXin LI #    define XML_FMT_INT_MOD "l"
594543ef51SXin LI #  endif
604543ef51SXin LI 
614543ef51SXin LI #  ifdef XML_UNICODE_WCHAR_T
624543ef51SXin LI #    define XML_FMT_STR "ls"
634543ef51SXin LI #    include <wchar.h>
644543ef51SXin LI #    define xcstrlen(s) wcslen(s)
654543ef51SXin LI #    define xcstrcmp(s, t) wcscmp((s), (t))
664543ef51SXin LI #    define xcstrncmp(s, t, n) wcsncmp((s), (t), (n))
674543ef51SXin LI #    define XCS(s) _XCS(s)
684543ef51SXin LI #    define _XCS(s) L##s
694543ef51SXin LI #  else
704543ef51SXin LI #    ifdef XML_UNICODE
714543ef51SXin LI #      error "No support for UTF-16 character without wchar_t in tests"
724543ef51SXin LI #    else
734543ef51SXin LI #      define XML_FMT_STR "s"
744543ef51SXin LI #      define xcstrlen(s) strlen(s)
754543ef51SXin LI #      define xcstrcmp(s, t) strcmp((s), (t))
764543ef51SXin LI #      define xcstrncmp(s, t, n) strncmp((s), (t), (n))
774543ef51SXin LI #      define XCS(s) s
784543ef51SXin LI #    endif /* XML_UNICODE */
794543ef51SXin LI #  endif   /* XML_UNICODE_WCHAR_T */
804543ef51SXin LI 
814543ef51SXin LI extern XML_Parser g_parser;
824543ef51SXin LI 
834543ef51SXin LI extern XML_Bool g_resumable;
844543ef51SXin LI extern XML_Bool g_abortable;
854543ef51SXin LI 
864543ef51SXin LI extern int g_chunkSize;
874543ef51SXin LI 
884543ef51SXin LI extern const char *long_character_data_text;
894543ef51SXin LI extern const char *long_cdata_text;
904543ef51SXin LI extern const char *get_buffer_test_text;
914543ef51SXin LI 
924543ef51SXin LI extern void tcase_add_test__ifdef_xml_dtd(TCase *tc, tcase_test_function test);
934543ef51SXin LI extern void tcase_add_test__if_xml_ge(TCase *tc, tcase_test_function test);
944543ef51SXin LI 
954543ef51SXin LI extern void basic_teardown(void);
964543ef51SXin LI 
974543ef51SXin LI extern void _xml_failure(XML_Parser parser, const char *file, int line);
984543ef51SXin LI 
994543ef51SXin LI #  define xml_failure(parser) _xml_failure((parser), __FILE__, __LINE__)
1004543ef51SXin LI 
1014543ef51SXin LI extern enum XML_Status _XML_Parse_SINGLE_BYTES(XML_Parser parser, const char *s,
1024543ef51SXin LI                                                int len, int isFinal);
1034543ef51SXin LI 
1044543ef51SXin LI extern void _expect_failure(const char *text, enum XML_Error errorCode,
1054543ef51SXin LI                             const char *errorMessage, const char *file,
1064543ef51SXin LI                             int lineno);
1074543ef51SXin LI 
1084543ef51SXin LI #  define expect_failure(text, errorCode, errorMessage)                        \
1094543ef51SXin LI     _expect_failure((text), (errorCode), (errorMessage), __FILE__, __LINE__)
1104543ef51SXin LI 
1114543ef51SXin LI /* Support functions for handlers to collect up character and attribute data.
1124543ef51SXin LI  */
1134543ef51SXin LI 
1144543ef51SXin LI extern void _run_character_check(const char *text, const XML_Char *expected,
1154543ef51SXin LI                                  const char *file, int line);
1164543ef51SXin LI 
1174543ef51SXin LI #  define run_character_check(text, expected)                                  \
1184543ef51SXin LI     _run_character_check(text, expected, __FILE__, __LINE__)
1194543ef51SXin LI 
1204543ef51SXin LI extern void _run_attribute_check(const char *text, const XML_Char *expected,
1214543ef51SXin LI                                  const char *file, int line);
1224543ef51SXin LI 
1234543ef51SXin LI #  define run_attribute_check(text, expected)                                  \
1244543ef51SXin LI     _run_attribute_check(text, expected, __FILE__, __LINE__)
1254543ef51SXin LI 
1264543ef51SXin LI typedef struct ExtTest {
1274543ef51SXin LI   const char *parse_text;
1284543ef51SXin LI   const XML_Char *encoding;
1294543ef51SXin LI   CharData *storage;
1304543ef51SXin LI } ExtTest;
1314543ef51SXin LI 
1324543ef51SXin LI extern void _run_ext_character_check(const char *text, ExtTest *test_data,
1334543ef51SXin LI                                      const XML_Char *expected, const char *file,
1344543ef51SXin LI                                      int line);
1354543ef51SXin LI 
1364543ef51SXin LI #  define run_ext_character_check(text, test_data, expected)                   \
1374543ef51SXin LI     _run_ext_character_check(text, test_data, expected, __FILE__, __LINE__)
1384543ef51SXin LI 
1394543ef51SXin LI #  define ALLOC_ALWAYS_SUCCEED (-1)
1404543ef51SXin LI #  define REALLOC_ALWAYS_SUCCEED (-1)
1414543ef51SXin LI 
1424543ef51SXin LI extern int g_allocation_count;
1434543ef51SXin LI extern int g_reallocation_count;
1444543ef51SXin LI 
1454543ef51SXin LI extern void *duff_allocator(size_t size);
1464543ef51SXin LI 
1474543ef51SXin LI extern void *duff_reallocator(void *ptr, size_t size);
1484543ef51SXin LI 
149*fe927888SPhilip Paeps extern char *portable_strndup(const char *s, size_t n);
150*fe927888SPhilip Paeps 
1514543ef51SXin LI #endif /* XML_COMMON_H */
1524543ef51SXin LI 
1534543ef51SXin LI #ifdef __cplusplus
1544543ef51SXin LI }
1554543ef51SXin LI #endif
156