summaryrefslogtreecommitdiff
path: root/test_json.c
diff options
context:
space:
mode:
authorEric S. Raymond <esr@thyrsus.com>2009-07-21 20:21:26 +0000
committerEric S. Raymond <esr@thyrsus.com>2009-07-21 20:21:26 +0000
commit53fed3d5c97f27f669f53bd846137a8f2a5ac8f1 (patch)
tree6f8a7c67c8d7ecb74acfe2eba920fe557f57f7d6 /test_json.c
parentc9e287070e713d0032dfe0384572dff3cd118a7d (diff)
downloadgpsd-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.c59
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);
}