summaryrefslogtreecommitdiff
path: root/test/testutils.h
diff options
context:
space:
mode:
Diffstat (limited to 'test/testutils.h')
-rw-r--r--test/testutils.h187
1 files changed, 5 insertions, 182 deletions
diff --git a/test/testutils.h b/test/testutils.h
index 6e07660..9fa8241 100644
--- a/test/testutils.h
+++ b/test/testutils.h
@@ -1,188 +1,11 @@
#ifndef dom_test_testutils_h_
#define dom_test_testutils_h_
-#include <stdarg.h>
-#include <stdbool.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <inttypes.h>
-#include <setjmp.h>
+#include "lib/exceptions.h"
+#include "lib/list.h"
+#include "lib/testassert.h"
+#include "lib/testobject.h"
+#include "lib/utils.h"
-#include "exceptions.h"
-#include "utils.h"
-#include "xmlbinding.h"
-#include "xmlparser.h"
-
-#ifndef UNUSED
-#define UNUSED(x) ((x) = (x))
#endif
-/* Usage:
- TRY
- THROW(DOM_NOT_FOUND_ERR);
- THROW_IF_ERR(dom_document_get_doctype(...));
- CATCH(ex)
- printf("exception: %d\n", ex);
- ENDTRY
-*/
-#define TRY __exvalue=setjmp(__exbuf); \
- if (__exvalue==0) {
-#define CATCH(x) } else { \
- int x = __exvalue;
-#define ENDTRY }
-#define THROW(x) longjmp(__exbuf, x)
-
-#define THROW_IF_ERR(x) \
- do { \
- int err = x; \
- if (err != DOM_NO_ERR) \
- THROW(err); \
- } while (0)
-
-jmp_buf __exbuf;
-int __exvalue;
-
-/* Redefine assert, so we can simply use the standard assert mechanism
- * within testcases and exit with the right output for the testrunner
- * to do the right thing. */
-void __assert2(const char *expr, const char *function,
- const char *file, int line);
-
-void __assert2(const char *expr, const char *function,
- const char *file, int line)
-{
- UNUSED(function);
- UNUSED(file);
-
- printf("FAIL - %s at line %d\n", expr, line);
-
- exit(EXIT_FAILURE);
-}
-
-#define assert(expr) \
- ((void) ((expr) || (__assert2 (#expr, __func__, __FILE__, __LINE__), 0)))
-
-static void *myrealloc(void *ptr, size_t len, void *pw)
-{
- UNUSED(pw);
-
- return realloc(ptr, len);
-}
-
-static void mymsg(uint32_t severity, void *ctx, const char *msg, ...)
-{
- va_list l;
-
- UNUSED(ctx);
-
- va_start(l, msg);
-
- fprintf(stderr, "%d: ", severity);
- vfprintf(stderr, msg, l);
- fprintf(stderr, "\n");
-}
-
-typedef struct TestObject {
- xml_parser *parser;
- struct dom_document *doc;
-} TestObject;
-
-TestObject *test_object_create(int argc, char **argv,
- const char *uri, bool will_be_modified);
-struct dom_document *test_object_get_doc(TestObject *obj);
-const char *test_object_get_mimetype(TestObject *obj);
-
-TestObject *test_object_create(int argc, char **argv,
- const char *uri, bool will_be_modified)
-{
- static bool xml_parser_initialised;
-
- char fnbuf[1024];
-#define CHUNK_SIZE 4096
- uint8_t buf[CHUNK_SIZE];
- FILE *fp;
- size_t len;
- TestObject *ret;
-
- UNUSED(will_be_modified);
-
- if (argc != 2) {
- printf("Usage: %s <datapath>\n", argv[0]);
- exit(EXIT_FAILURE);
- }
-
- if (xml_parser_initialised == false) {
- assert(xml_dom_binding_initialise(myrealloc, NULL) == XML_OK);
-
- xml_parser_initialised = true;
- }
-
- snprintf(fnbuf, sizeof fnbuf, "%s/%s", argv[1], uri);
-
- ret = malloc(sizeof(TestObject));
- if (ret == NULL)
- return NULL;
-
- ret->parser = xml_parser_create(NULL, "UTF-8", myrealloc, NULL,
- mymsg, NULL);
- if (ret->parser == NULL) {
- free(ret);
- return NULL;
- }
-
- fp = fopen(fnbuf, "r");
- if (fp == NULL) {
- xml_parser_destroy(ret->parser);
- free(ret);
- return NULL;
- }
-
- fseek(fp, 0, SEEK_END);
- len = ftell(fp);
- fseek(fp, 0, SEEK_SET);
-
- while (len > CHUNK_SIZE) {
- fread(buf, 1, CHUNK_SIZE, fp);
-
- assert(xml_parser_parse_chunk(ret->parser, buf,
- CHUNK_SIZE) == XML_OK);
-
- len -= CHUNK_SIZE;
- }
-
- if (len > 0) {
- fread(buf, 1, len, fp);
-
- assert(xml_parser_parse_chunk(ret->parser, buf,
- len) == XML_OK);
-
- len = 0;
- }
-
- assert(xml_parser_completed(ret->parser) == XML_OK);
-
- fclose(fp);
-
- ret->doc = xml_parser_get_document(ret->parser);
-
- xml_parser_destroy(ret->parser);
- ret->parser = NULL;
-
- return ret;
-
-#undef CHUNK_SIZE
-}
-
-struct dom_document *test_object_get_doc(TestObject *obj)
-{
- return obj->doc;
-}
-
-const char *test_object_get_mimetype(TestObject *obj)
-{
- UNUSED(obj);
-
- return "text/xml";
-}
-
-#endif