Teonet library  0.4.7
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Pages
testutil.h
Go to the documentation of this file.
1 #ifndef __TEST_UTIL_H__
2 #define __TEST_UTIL_H__
3 
4 #include "../jsmn.c"
5 
6 static int vtokeq(const char *s, jsmntok_t *t, int numtok, va_list ap) {
7  if (numtok > 0) {
8  int i, start, end, size;
9  int type;
10  char *value;
11 
12  size = -1;
13  value = NULL;
14  for (i = 0; i < numtok; i++) {
15  type = va_arg(ap, int);
16  if (type == JSMN_STRING) {
17  value = va_arg(ap, char *);
18  size = va_arg(ap, int);
19  start = end = -1;
20  } else if (type == JSMN_PRIMITIVE) {
21  value = va_arg(ap, char *);
22  start = end = size = -1;
23  } else {
24  start = va_arg(ap, int);
25  end = va_arg(ap, int);
26  size = va_arg(ap, int);
27  value = NULL;
28  }
29  if (t[i].type != type) {
30  printf("token %d type is %d, not %d\n", i, t[i].type, type);
31  return 0;
32  }
33  if (start != -1 && end != -1) {
34  if (t[i].start != start) {
35  printf("token %d start is %d, not %d\n", i, t[i].start, start);
36  return 0;
37  }
38  if (t[i].end != end ) {
39  printf("token %d end is %d, not %d\n", i, t[i].end, end);
40  return 0;
41  }
42  }
43  if (size != -1 && t[i].size != size) {
44  printf("token %d size is %d, not %d\n", i, t[i].size, size);
45  return 0;
46  }
47 
48  if (s != NULL && value != NULL) {
49  const char *p = s + t[i].start;
50  if (strlen(value) != t[i].end - t[i].start ||
51  strncmp(p, value, t[i].end - t[i].start) != 0) {
52  printf("token %d value is %.*s, not %s\n", i, t[i].end-t[i].start,
53  s+t[i].start, value);
54  return 0;
55  }
56  }
57  }
58  }
59  return 1;
60 }
61 
62 static int tokeq(const char *s, jsmntok_t *tokens, int numtok, ...) {
63  int ok;
64  va_list args;
65  va_start(args, numtok);
66  ok = vtokeq(s, tokens, numtok, args);
67  va_end(args);
68  return ok;
69 }
70 
71 static int parse(const char *s, int status, int numtok, ...) {
72  int r;
73  int ok = 1;
74  va_list args;
75  jsmn_parser p;
76  jsmntok_t *t = malloc(numtok * sizeof(jsmntok_t));
77 
78  jsmn_init(&p);
79  r = jsmn_parse(&p, s, strlen(s), t, numtok);
80  if (r != status) {
81  printf("status is %d, not %d\n", r, status);
82  return 0;
83  }
84 
85  if (status >= 0) {
86  va_start(args, numtok);
87  ok = vtokeq(s, t, numtok, args);
88  va_end(args);
89  }
90  free(t);
91  return ok;
92 }
93 
94 #endif /* __TEST_UTIL_H__ */
JSON token description.
Definition: jsmn.h:40
Definition: jsmn.h:21
JSON parser.
Definition: jsmn.h:54
Definition: jsmn.h:22
int start
Definition: jsmn.h:42
int jsmn_parse(jsmn_parser *parser, const char *js, size_t len, jsmntok_t *tokens, unsigned int num_tokens)
Parse JSON string and fill tokens.
Definition: jsmn.c:151
void free(void *)
void jsmn_init(jsmn_parser *parser)
Creates a new parser based over a given buffer with an array of tokens available. ...
Definition: jsmn.c:309
void * malloc(YYSIZE_T)