--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/tests.c Sun Oct 07 14:30:52 2012 -0400
@@ -0,0 +1,127 @@
+#include "jsonsax.h"
+
+#include <stdio.h>
+#include <assert.h>
+#include <string.h>
+#include <stdarg.h>
+
+#define DEBUGTEST
+
+void debug(const char* msg, ...)
+{
+#ifdef DEBUGTEST
+ fprintf(stderr, "\n-*- ");
+ va_list ap;
+ va_start(ap, msg);
+ vfprintf(stderr, msg, ap);
+ va_end(ap);
+ fprintf(stderr, " -*-\n");
+#else
+ (void)msg;
+#endif
+}
+
+const char* TEST_JSONTYPE_STR[] = {
+ "EJSONSAX_OBJECT",
+ "EJSONSAX_ARRAY",
+ "EJSONSAX_STRING",
+ "EJSONSAX_NUMBER",
+ "EJSONSAX_NULL",
+ "EJSONSAX_TRUE",
+ "EJSONSAX_FALSE"
+};
+
+struct test_data
+{
+ const char* m_str;
+};
+
+int test_getchar(void* data)
+{
+ assert(data);
+ struct test_data* t = (struct test_data*)(data);
+ if (t->m_str[0] == 0) return -1;
+#ifdef DEBUGTEST
+ char c = t->m_str[0];
+ fprintf(stderr, "%c", c == ' ' ? '_' : c);
+#endif
+ return *(t->m_str++);
+}
+
+int test_on_start(void* data, enum EJSONSAX_TYPE etype)
+{
+ assert(data);
+ struct test_data* t = (struct test_data*)(data);
+ debug("start %s", TEST_JSONTYPE_STR[etype]);
+
+ switch (etype)
+ {
+case EJSONSAX_OBJECT:
+ assert(t->m_str[-1] == '{');
+ break;
+case EJSONSAX_ARRAY:
+ assert(t->m_str[-1] == '[');
+ break;
+case EJSONSAX_STRING:
+ assert(t->m_str[-1] == '"');
+ break;
+case EJSONSAX_NUMBER:
+ break;
+case EJSONSAX_NULL:
+case EJSONSAX_TRUE:
+case EJSONSAX_FALSE:
+ assert(0);
+}
+ return 0;
+}
+
+int test_on_stop(void* data, enum EJSONSAX_TYPE etype)
+{
+ assert(data);
+ struct test_data* t = (struct test_data*)(data);
+ debug("stop %s", TEST_JSONTYPE_STR[etype]);
+
+ switch (etype)
+ {
+case EJSONSAX_OBJECT:
+ assert(t->m_str[-1] == '}');
+ break;
+case EJSONSAX_ARRAY:
+ assert(t->m_str[-1] == ']');
+ break;
+case EJSONSAX_STRING:
+ assert(t->m_str[-1] == '"');
+ break;
+case EJSONSAX_NUMBER:
+case EJSONSAX_NULL:
+case EJSONSAX_TRUE:
+case EJSONSAX_FALSE:
+ break;
+}
+ return 0;
+}
+
+void test_on_error(void* data, int error)
+{
+ assert(data);
+ debug("Error %d", error);
+}
+
+int main()
+{
+ const char json[] =
+ "{ \"hello\" : [ 11, 12 ,1"
+ "3 ], \n \"world\" : -3.45e2 }";
+ struct test_data data;
+ data.m_str = json;
+ struct jsonsax_backend tester;
+ memset(&tester, 0, sizeof(tester));
+ tester.m_getchar = &test_getchar;
+ tester.m_onstart = &test_on_start;
+ tester.m_onstop = &test_on_stop;
+
+ int err = jsonsax_parse(&tester, &data);
+ assert(err == 0);
+
+ return err;
+};