Support returning JSONError values in tests

pull/78/head
benswick 7 years ago
parent 3246da2198
commit f043aa1d45
  1. 3
      Makefile
  2. 121
      tests.c

@ -4,6 +4,9 @@ CFLAGS = -O0 -g -Wall -Wextra -std=c89 -pedantic-errors
CPPC = g++
CPPFLAGS = -O0 -g -Wall -Wextra
#CFLAGS += -DPARSON_RETURN_ERROR_VALUES
#CPPFLAGS += -DPARSON_RETURN_ERROR_VALUES
all: test testcpp
.PHONY: test testcpp

@ -31,9 +31,20 @@
#include <string.h>
#include <math.h>
/* Returning JSONError values from parse functions is currently based
on a preprocessor definition so adjust the pass criteria to match.
*/
#if defined(PARSON_RETURN_ERROR_VALUES)
#define PARSE_PASSED(A) ((A) != NULL && json_value_get_type(A) != JSONError)
#else
#define PARSE_PASSED(A) ((A) != NULL)
#endif
#define TEST(A) printf("%d %-72s-", __LINE__, #A);\
if(A){puts(" OK");tests_passed++;}\
else{puts(" FAIL");tests_failed++;}
#define TEST_PARSE_PASSES(A) { JSON_Value *v = A; TEST(PARSE_PASSED(v)) }
#define TEST_PARSE_FAILS(A) { JSON_Value *v = A; TEST(!PARSE_PASSED(v)) }
#define STREQ(A, B) ((A) && (B) ? strcmp((A), (B)) == 0 : 0)
#define EPSILON 0.000001
@ -81,28 +92,28 @@ int main() {
void test_suite_1(void) {
JSON_Value *val;
TEST((val = json_parse_file("tests/test_1_1.txt")) != NULL);
TEST_PARSE_PASSES(val = json_parse_file("tests/test_1_1.txt"));
TEST(json_value_equals(json_parse_string(json_serialize_to_string(val)), val));
TEST(json_value_equals(json_parse_string(json_serialize_to_string_pretty(val)), val));
if (val) { json_value_free(val); }
TEST((val = json_parse_file("tests/test_1_2.txt")) == NULL); /* Over 2048 levels of nesting */
TEST_PARSE_FAILS(val = json_parse_file("tests/test_1_2.txt")); /* Over 2048 levels of nesting */
if (val) { json_value_free(val); }
TEST((val = json_parse_file("tests/test_1_3.txt")) != NULL);
TEST_PARSE_PASSES(val = json_parse_file("tests/test_1_3.txt"));
TEST(json_value_equals(json_parse_string(json_serialize_to_string(val)), val));
TEST(json_value_equals(json_parse_string(json_serialize_to_string_pretty(val)), val));
if (val) { json_value_free(val); }
TEST((val = json_parse_file_with_comments("tests/test_1_1.txt")) != NULL);
TEST_PARSE_PASSES(val = json_parse_file_with_comments("tests/test_1_1.txt"));
TEST(json_value_equals(json_parse_string(json_serialize_to_string(val)), val));
TEST(json_value_equals(json_parse_string(json_serialize_to_string_pretty(val)), val));
if (val) { json_value_free(val); }
TEST((val = json_parse_file_with_comments("tests/test_1_2.txt")) == NULL); /* Over 2048 levels of nesting */
TEST_PARSE_FAILS(val = json_parse_file_with_comments("tests/test_1_2.txt")); /* Over 2048 levels of nesting */
if (val) { json_value_free(val); }
TEST((val = json_parse_file_with_comments("tests/test_1_3.txt")) != NULL);
TEST_PARSE_PASSES(val = json_parse_file_with_comments("tests/test_1_3.txt"));
TEST(json_value_equals(json_parse_string(json_serialize_to_string(val)), val));
TEST(json_value_equals(json_parse_string(json_serialize_to_string_pretty(val)), val));
if (val) { json_value_free(val); }
@ -235,57 +246,57 @@ void test_suite_2_with_comments(void) {
void test_suite_3(void) {
puts("Testing valid strings:");
TEST(json_parse_string("{\"lorem\":\"ipsum\"}") != NULL);
TEST(json_parse_string("[\"lorem\"]") != NULL);
TEST(json_parse_string("null") != NULL);
TEST(json_parse_string("true") != NULL);
TEST(json_parse_string("false") != NULL);
TEST(json_parse_string("\"string\"") != NULL);
TEST(json_parse_string("123") != NULL);
TEST_PARSE_PASSES(json_parse_string("{\"lorem\":\"ipsum\"}"));
TEST_PARSE_PASSES(json_parse_string("[\"lorem\"]"));
TEST_PARSE_PASSES(json_parse_string("null"));
TEST_PARSE_PASSES(json_parse_string("true"));
TEST_PARSE_PASSES(json_parse_string("false"));
TEST_PARSE_PASSES(json_parse_string("\"string\""));
TEST_PARSE_PASSES(json_parse_string("123"));
puts("Testing invalid strings:");
TEST(json_parse_string(NULL) == NULL);
TEST(json_parse_string("") == NULL); /* empty string */
TEST(json_parse_string("[\"lorem\",]") == NULL);
TEST(json_parse_string("{\"lorem\":\"ipsum\",}") == NULL);
TEST(json_parse_string("{lorem:ipsum}") == NULL);
TEST(json_parse_string("[,]") == NULL);
TEST(json_parse_string("[,") == NULL);
TEST(json_parse_string("[") == NULL);
TEST(json_parse_string("]") == NULL);
TEST(json_parse_string("{\"a\":0,\"a\":0}") == NULL); /* duplicate keys */
TEST(json_parse_string("{:,}") == NULL);
TEST(json_parse_string("{,}") == NULL);
TEST(json_parse_string("{,") == NULL);
TEST(json_parse_string("{:") == NULL);
TEST(json_parse_string("{") == NULL);
TEST(json_parse_string("}") == NULL);
TEST(json_parse_string("x") == NULL);
TEST(json_parse_string("{:\"no name\"}") == NULL);
TEST(json_parse_string("[,\"no first value\"]") == NULL);
TEST(json_parse_string("[\"\\u00zz\"]") == NULL); /* invalid utf value */
TEST(json_parse_string("[\"\\u00\"]") == NULL); /* invalid utf value */
TEST(json_parse_string("[\"\\u\"]") == NULL); /* invalid utf value */
TEST(json_parse_string("[\"\\\"]") == NULL); /* control character */
TEST(json_parse_string("[\"\"\"]") == NULL); /* control character */
TEST(json_parse_string("[\"\0\"]") == NULL); /* control character */
TEST(json_parse_string("[\"\a\"]") == NULL); /* control character */
TEST(json_parse_string("[\"\b\"]") == NULL); /* control character */
TEST(json_parse_string("[\"\t\"]") == NULL); /* control character */
TEST(json_parse_string("[\"\n\"]") == NULL); /* control character */
TEST(json_parse_string("[\"\f\"]") == NULL); /* control character */
TEST(json_parse_string("[\"\r\"]") == NULL); /* control character */
TEST(json_parse_string("[0x2]") == NULL); /* hex */
TEST(json_parse_string("[0X2]") == NULL); /* HEX */
TEST(json_parse_string("[07]") == NULL); /* octals */
TEST(json_parse_string("[0070]") == NULL);
TEST(json_parse_string("[07.0]") == NULL);
TEST(json_parse_string("[-07]") == NULL);
TEST(json_parse_string("[-007]") == NULL);
TEST(json_parse_string("[-07.0]") == NULL);
TEST(json_parse_string("[\"\\uDF67\\uD834\"]") == NULL); /* wrong order surrogate pair */
TEST(json_parse_string("[1.7976931348623157e309]") == NULL);
TEST(json_parse_string("[-1.7976931348623157e309]") == NULL);
TEST_PARSE_FAILS(json_parse_string(NULL));
TEST_PARSE_FAILS(json_parse_string("")); /* empty string */
TEST_PARSE_FAILS(json_parse_string("[\"lorem\",]"));
TEST_PARSE_FAILS(json_parse_string("{\"lorem\":\"ipsum\",}"));
TEST_PARSE_FAILS(json_parse_string("{lorem:ipsum}"));
TEST_PARSE_FAILS(json_parse_string("[,]"));
TEST_PARSE_FAILS(json_parse_string("[,"));
TEST_PARSE_FAILS(json_parse_string("["));
TEST_PARSE_FAILS(json_parse_string("]"));
TEST_PARSE_FAILS(json_parse_string("{\"a\":0,\"a\":0}")); /* duplicate keys */
TEST_PARSE_FAILS(json_parse_string("{:,}"));
TEST_PARSE_FAILS(json_parse_string("{,}"));
TEST_PARSE_FAILS(json_parse_string("{,"));
TEST_PARSE_FAILS(json_parse_string("{:"));
TEST_PARSE_FAILS(json_parse_string("{"));
TEST_PARSE_FAILS(json_parse_string("}"));
TEST_PARSE_FAILS(json_parse_string("x"));
TEST_PARSE_FAILS(json_parse_string("{:\"no name\"}"));
TEST_PARSE_FAILS(json_parse_string("[,\"no first value\"]"));
TEST_PARSE_FAILS(json_parse_string("[\"\\u00zz\"]")); /* invalid utf value */
TEST_PARSE_FAILS(json_parse_string("[\"\\u00\"]")); /* invalid utf value */
TEST_PARSE_FAILS(json_parse_string("[\"\\u\"]")); /* invalid utf value */
TEST_PARSE_FAILS(json_parse_string("[\"\\\"]")); /* control character */
TEST_PARSE_FAILS(json_parse_string("[\"\"\"]")); /* control character */
TEST_PARSE_FAILS(json_parse_string("[\"\0\"]")); /* control character */
TEST_PARSE_FAILS(json_parse_string("[\"\a\"]")); /* control character */
TEST_PARSE_FAILS(json_parse_string("[\"\b\"]")); /* control character */
TEST_PARSE_FAILS(json_parse_string("[\"\t\"]")); /* control character */
TEST_PARSE_FAILS(json_parse_string("[\"\n\"]")); /* control character */
TEST_PARSE_FAILS(json_parse_string("[\"\f\"]")); /* control character */
TEST_PARSE_FAILS(json_parse_string("[\"\r\"]")); /* control character */
TEST_PARSE_FAILS(json_parse_string("[0x2]")); /* hex */
TEST_PARSE_FAILS(json_parse_string("[0X2]")); /* HEX */
TEST_PARSE_FAILS(json_parse_string("[07]")); /* octals */
TEST_PARSE_FAILS(json_parse_string("[0070]"));
TEST_PARSE_FAILS(json_parse_string("[07.0]"));
TEST_PARSE_FAILS(json_parse_string("[-07]"));
TEST_PARSE_FAILS(json_parse_string("[-007]"));
TEST_PARSE_FAILS(json_parse_string("[-07.0]"));
TEST_PARSE_FAILS(json_parse_string("[\"\\uDF67\\uD834\"]")); /* wrong order surrogate pair */
TEST_PARSE_FAILS(json_parse_string("[1.7976931348623157e309]"));
TEST_PARSE_FAILS(json_parse_string("[-1.7976931348623157e309]"));
}
void test_suite_4() {

Loading…
Cancel
Save