1 #include <ccan/cdump/cdump.h>
2 /* Include the C files directly. */
3 #include <ccan/cdump/cdump.c>
4 #include <ccan/tap/tap.h>
8 struct cdump_definitions *defs;
9 const struct cdump_type *t, *p;
10 char *ctx = tal(NULL, char), *problems;
12 /* This is how many tests you plan to run */
15 defs = cdump_extract(ctx,
19 " unsigned long *ulp;\n"
20 " unsigned long int *ulip;\n"
23 ok1(tal_parent(defs) == ctx);
26 ok1(strmap_empty(&defs->enums));
27 ok1(strmap_empty(&defs->unions));
28 t = strmap_get(&defs->structs, "foo");
30 ok1(t->kind == CDUMP_STRUCT);
31 ok1(streq(t->name, "foo"));
32 ok1(tal_count(t->u.members) == 4);
34 ok1(streq(t->u.members[0].name, "l"));
35 p = t->u.members[0].type;
36 ok1(p->kind == CDUMP_UNKNOWN);
37 ok1(streq(p->name, "long"));
39 ok1(streq(t->u.members[1].name, "li"));
40 p = t->u.members[1].type;
41 ok1(p->kind == CDUMP_UNKNOWN);
42 ok1(streq(p->name, "long int"));
44 ok1(streq(t->u.members[2].name, "ulp"));
45 p = t->u.members[2].type;
46 ok1(p->kind == CDUMP_POINTER);
48 ok1(p->kind == CDUMP_UNKNOWN);
49 ok1(streq(p->name, "unsigned long"));
51 ok1(streq(t->u.members[3].name, "ulip"));
52 p = t->u.members[3].type;
53 ok1(p->kind == CDUMP_POINTER);
55 ok1(p->kind == CDUMP_UNKNOWN);
56 ok1(streq(p->name, "unsigned long int"));
58 defs = cdump_extract(ctx,
60 " volatile long vl;\n"
62 " volatile const long long int *vclli;\n"
65 ok1(tal_parent(defs) == ctx);
68 ok1(strmap_empty(&defs->enums));
69 ok1(strmap_empty(&defs->unions));
70 t = strmap_get(&defs->structs, "foo");
72 ok1(t->kind == CDUMP_STRUCT);
73 ok1(streq(t->name, "foo"));
74 ok1(tal_count(t->u.members) == 3);
76 ok1(streq(t->u.members[0].name, "vl"));
77 ok1(streq(t->u.members[0].qualifiers, "volatile"));
78 p = t->u.members[0].type;
79 ok1(p->kind == CDUMP_UNKNOWN);
80 ok1(streq(p->name, "long"));
82 ok1(streq(t->u.members[1].name, "cl"));
83 ok1(streq(t->u.members[1].qualifiers, "const"));
84 p = t->u.members[1].type;
85 ok1(p->kind == CDUMP_UNKNOWN);
86 ok1(streq(p->name, "long"));
88 ok1(streq(t->u.members[2].name, "vclli"));
89 ok1(streq(t->u.members[2].qualifiers, "volatile const"));
90 p = t->u.members[2].type;
91 ok1(p->kind == CDUMP_POINTER);
93 ok1(p->kind == CDUMP_UNKNOWN);
94 ok1(streq(p->name, "long long int"));
96 defs = cdump_extract(ctx,
98 " volatile struct bar *a, b;\n"
101 ok1(tal_parent(defs) == ctx);
104 ok1(strmap_empty(&defs->enums));
105 ok1(strmap_empty(&defs->unions));
106 t = strmap_get(&defs->structs, "foo");
108 ok1(t->kind == CDUMP_STRUCT);
109 ok1(streq(t->name, "foo"));
110 ok1(tal_count(t->u.members) == 2);
112 ok1(streq(t->u.members[0].name, "a"));
113 ok1(streq(t->u.members[0].qualifiers, "volatile"));
114 p = t->u.members[0].type;
115 ok1(p->kind == CDUMP_POINTER);
117 ok1(p->kind == CDUMP_STRUCT);
118 ok1(streq(p->name, "bar"));
120 ok1(streq(t->u.members[1].name, "b"));
121 ok1(streq(t->u.members[1].qualifiers, "volatile"));
122 p = t->u.members[1].type;
123 ok1(p->kind == CDUMP_STRUCT);
124 ok1(streq(p->name, "bar"));
128 /* This exits depending on whether all tests passed */
129 return exit_status();