diff -r d187e7fc9970 -r ef7abb48573b tests.c --- /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 +#include +#include +#include + +#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; +};