]> git.draconx.ca Git - cdecl99.git/blobdiff - test/testlib.c
Use common help formatting in test cases.
[cdecl99.git] / test / testlib.c
index 3c8bb8c03fc4f06333bbc0dab825e59a47c51891..93186635639250a1d1e5867708eb5d66db477ea3 100644 (file)
@@ -1,6 +1,6 @@
 /*
  *  Miscellaneous functions used by the cdecl99 test suite.
- *  Copyright © 2011 Nick Bowler
+ *  Copyright © 2011-2012, 2021 Nick Bowler
  *
  *  This program is free software: you can redistribute it and/or modify
  *  it under the terms of the GNU General Public License as published by
 #include <stdio.h>
 #include <stdlib.h>
 #include <errno.h>
+#include <getopt.h>
 #include <cdecl.h>
+
+#include "help.h"
 #include "test.h"
 
+static size_t printbuf_size;
+static char *printbuf;
+
 void *realloc_nofail(void *ptr, size_t size)
 {
        void *p;
@@ -43,19 +49,32 @@ void *malloc_nofail(size_t size)
 
 void test_print_decl(struct cdecl *decl)
 {
-       static size_t bufsz;
-       static char *buf;
        size_t rc;
 
 retry:
-       rc = cdecl_declare(buf, bufsz, decl);
-       if (rc >= bufsz) {
-               bufsz = rc + 1;
-               buf = realloc_nofail(buf, bufsz);
+       rc = cdecl_declare(printbuf, printbuf_size, decl);
+       if (rc >= printbuf_size) {
+               printbuf_size = rc + 1;
+               printbuf = realloc_nofail(printbuf, printbuf_size);
+               goto retry;
+       }
+
+       printf("%s\n", printbuf);
+}
+
+void test_explain_decl(struct cdecl *decl)
+{
+       size_t rc;
+
+retry:
+       rc = cdecl_explain(printbuf, printbuf_size, decl);
+       if (rc >= printbuf_size) {
+               printbuf_size = rc + 1;
+               printbuf = realloc_nofail(printbuf, printbuf_size);
                goto retry;
        }
 
-       printf("%s\n", buf);
+       printf("%s\n", printbuf);
 }
 
 bool strict_strtoul(unsigned long *val, const char *str, int base)
@@ -73,8 +92,19 @@ bool strict_strtoul(unsigned long *val, const char *str, int base)
 void test_print_version(const char *program)
 {
        printf("%s (%s) %s\n", program, PACKAGE_NAME, PACKAGE_VERSION);
-       puts("Copyright (C) 2011 Nick Bowler.");
+       puts("Copyright (C) 2021 Nick Bowler.");
        puts("License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>.");
        puts("This is free software: you are free to change and redistribute it.");
        puts("There is NO WARRANTY, to the extent permitted by law.");
 }
+
+void test_print_options(const struct option *lopts)
+{
+       const struct option *opt;
+
+       puts("Options:");
+       for (opt = lopts; opt->val; opt++) {
+               if (help_print_optstring(opt, "ARG", 20))
+                       putchar('\n');
+       }
+}