X-Git-Url: http://git.ozlabs.org/?a=blobdiff_plain;f=ccan%2Fcdump%2Ftest%2Frun-03-advanced-parse.c;fp=ccan%2Fcdump%2Ftest%2Frun-03-advanced-parse.c;h=7471d7d4c67f00fa0bf9b115073f3ac5f7ecf4db;hb=d5713111bd392c112c689171e727ab1a4d90ad9e;hp=0000000000000000000000000000000000000000;hpb=45c8a57497b960a51bbb7178c6eace46929b0727;p=ccan-lca-2011.git diff --git a/ccan/cdump/test/run-03-advanced-parse.c b/ccan/cdump/test/run-03-advanced-parse.c new file mode 100644 index 0000000..7471d7d --- /dev/null +++ b/ccan/cdump/test/run-03-advanced-parse.c @@ -0,0 +1,59 @@ +#include +#include +#include +#include +#include +#include + +static size_t diffoff(const char *a, const char *b) +{ + size_t i; + + for (i = 0; a[i]; i++) + if (b[i] != a[i]) + break; + return i; +} + +static char *read_file(const void *ctx, const char *fname) +{ + int fd = open(fname, O_RDONLY); + off_t len = lseek(fd, 0, SEEK_END); + char *ret = talloc_array(ctx, char, len + 1); + lseek(fd, 0, SEEK_SET); + read(fd, ret, len); + ret[len] = '\0'; + close(fd); + return ret; +} + +int main(int argc, char *argv[]) +{ + char *ret, *decls, *defs; + char *toplevel = talloc_strdup(NULL, "toplevel"); + char *header, *definitions, *declarations; + + plan_tests(5); + header = read_file(toplevel, "test/test_header_advanced.h"); + declarations = read_file(toplevel, "test/example_generated-advanced-decls.h"); + definitions = read_file(toplevel, "test/example_generated-advanced-defs.h"); + + ret = cdump_parse(toplevel, header, &decls, &defs); + ok1(ret == NULL); + ok(streq(decls, declarations), + "Declarations differ at %zu: ...'%.*s' vs ...'%.*s'", + diffoff(decls, declarations), + 30, decls + diffoff(decls, declarations), + 30, declarations + diffoff(decls, declarations)); + ok(streq(defs, definitions), + "Definitions differ at %zu: ...'%.*s' vs ...'%.*s'", + diffoff(defs, definitions), + 30, defs + diffoff(defs, definitions), + 30, definitions + diffoff(defs, definitions)); + + ok1(talloc_find_parent_byname(decls, "toplevel") == toplevel); + ok1(talloc_find_parent_byname(defs, "toplevel") == toplevel); + + talloc_free(toplevel); + return exit_status(); +}