diff options
author | Eric S. Raymond <esr@thyrsus.com> | 2009-07-21 20:21:26 +0000 |
---|---|---|
committer | Eric S. Raymond <esr@thyrsus.com> | 2009-07-21 20:21:26 +0000 |
commit | 53fed3d5c97f27f669f53bd846137a8f2a5ac8f1 (patch) | |
tree | 6f8a7c67c8d7ecb74acfe2eba920fe557f57f7d6 /test_json.c | |
parent | c9e287070e713d0032dfe0384572dff3cd118a7d (diff) | |
download | gpsd-53fed3d5c97f27f669f53bd846137a8f2a5ac8f1.tar.gz |
Code for reading JSON TPVs is now complete and unit-tested.
Diffstat (limited to 'test_json.c')
-rw-r--r-- | test_json.c | 59 |
1 files changed, 31 insertions, 28 deletions
diff --git a/test_json.c b/test_json.c index d394a8d8..7f9a0faf 100644 --- a/test_json.c +++ b/test_json.c @@ -60,34 +60,16 @@ static void ASSERT_REAL(char *attr, double fld, double val) } } +static struct gps_data_t gpsdata; + +/* Case 1: TPV report */ + const char *json_str1 = "{\"device\":\"GPS#1\",\"tag\":\"MID2\",\ \"time\":1119197561.890,\"lon\":46.498203637,\"lat\":7.568074350,\ \"alt\":1327.780,\"eph\":21.000,\"epv\":124.484,\"mode\":3,\ \"flag1\":true,\"flag2\":false}"; -static struct gps_data_t gpsdata; -static bool flag1, flag2; -static double dftreal; -static int dftinteger; - -const struct json_attr_t json_attrs_1[] = { - {"device", string, .addr.string.ptr = gpsdata.gps_device, - .addr.string.len = PATH_MAX}, - {"tag", string, .addr.string.ptr = gpsdata.tag, - .addr.string.len = MAXTAGLEN}, - {"time", real, .addr.real = &gpsdata.fix.time, .dflt.real = 0}, - {"lon", real, .addr.real = &gpsdata.fix.longitude, .dflt.real = 0}, - {"lat", real, .addr.real = &gpsdata.fix.latitude, .dflt.real = 0}, - {"alt", real, .addr.real = &gpsdata.fix.altitude, .dflt.real = 0}, - {"eph", real, .addr.real = &gpsdata.fix.eph, .dflt.real = 0}, - {"epv", real, .addr.real = &gpsdata.fix.epv, .dflt.real = 0}, - {"dftint", integer, .addr.integer = &dftinteger, .dflt.integer = 5}, - {"dftreal",real, .addr.real = &dftreal, .dflt.real = 23.17}, - {"mode", integer, .addr.integer = &gpsdata.fix.mode, .dflt.integer = -1}, - {"flag1", boolean, .addr.boolean = &flag1,}, - {"flag2", boolean, .addr.boolean = &flag2,}, - {NULL}, -}; +/* Case 2: SKY report */ const char *json_str2 = "{\"tag\":\"MID4\",\"time\":1119197562.890,\ \"reported\":7,\ @@ -100,6 +82,8 @@ const char *json_str2 = "{\"tag\":\"MID4\",\"time\":1119197562.890,\ {\"PRN\":27,\"el\":16,\"az\":66,\"ss\":39,\"used\":true},\ {\"PRN\":21,\"el\":10,\"az\":301,\"ss\":0,\"used\":false}]}"; +/* Case 3: String list syntax */ + const char *json_str3 = "[\"foo\",\"bar\",\"baz\"]"; static char *stringptrs[3]; @@ -115,13 +99,29 @@ const struct json_array_t json_array_3 = { .maxlen = sizeof(stringptrs)/sizeof(stringptrs[0]), }; +/* Case 4: test defaulting of unspecified attributes */ + +const char *json_str4 = "{\"flag1\":true,\"flag2\":false}"; + +static bool flag1, flag2; +static double dftreal; +static int dftinteger; + +const struct json_attr_t json_attrs_4[] = { + {"dftint", integer, .addr.integer = &dftinteger, .dflt.integer = 5}, + {"dftreal",real, .addr.real = &dftreal, .dflt.real = 23.17}, + {"flag1", boolean, .addr.boolean = &flag1,}, + {"flag2", boolean, .addr.boolean = &flag2,}, + {NULL}, +}; + int main(int argc UNUSED, char *argv[] UNUSED) { int status; (void)fprintf(stderr, "JSON unit test "); - status = json_read_object(json_str1, json_attrs_1, 0, NULL); + status = json_tpv_read(json_str1, &gpsdata); ASSERT_CASE(1, status); ASSERT_STRING("device", gpsdata.gps_device, "GPS#1"); ASSERT_STRING("tag", gpsdata.tag, "MID2"); @@ -129,10 +129,6 @@ int main(int argc UNUSED, char *argv[] UNUSED) ASSERT_REAL("time", gpsdata.fix.time, 1119197561.890); ASSERT_REAL("lon", gpsdata.fix.longitude, 46.498203637); ASSERT_REAL("lat", gpsdata.fix.latitude, 7.568074350); - ASSERT_INTEGER("dftint", dftinteger, 5); /* did the default work? */ - ASSERT_REAL("dftreal", dftreal, 23.17); /* did the default work? */ - ASSERT_BOOLEAN("flag1", flag1, true); - ASSERT_BOOLEAN("flag2", flag2, false); status = json_sky_read(json_str2, &gpsdata); ASSERT_CASE(2, status); @@ -156,6 +152,13 @@ int main(int argc UNUSED, char *argv[] UNUSED) assert(strcmp(stringptrs[1], "bar") == 0); assert(strcmp(stringptrs[2], "baz") == 0); + status = json_read_object(json_str4, json_attrs_4, 0, NULL); + ASSERT_CASE(4, status); + ASSERT_INTEGER("dftint", dftinteger, 5); /* did the default work? */ + ASSERT_REAL("dftreal", dftreal, 23.17); /* did the default work? */ + ASSERT_BOOLEAN("flag1", flag1, true); + ASSERT_BOOLEAN("flag2", flag2, false); + (void)fprintf(stderr, "succeeded.\n"); exit(0); } |