]> git.ozlabs.org Git - ccan/blobdiff - ccan/opt/test/run-unregister.c
opt: add opt_unregister.
[ccan] / ccan / opt / test / run-unregister.c
diff --git a/ccan/opt/test/run-unregister.c b/ccan/opt/test/run-unregister.c
new file mode 100644 (file)
index 0000000..06bf58a
--- /dev/null
@@ -0,0 +1,44 @@
+#include <ccan/tap/tap.h>
+#include <stdlib.h>
+#include <ccan/opt/opt.c>
+#include <ccan/opt/usage.c>
+#include <ccan/opt/helpers.c>
+#include <ccan/opt/parse.c>
+#include "utils.h"
+
+int main(int argc, char *argv[])
+{
+       const char *myname = argv[0];
+
+       plan_tests(14);
+
+       /* Simple short arg.*/
+       opt_register_noarg("--aaa|-a", test_noarg, NULL, "AAAAAAll");
+       opt_register_noarg("-b", test_noarg, NULL, "AAAAAAll");
+
+       /* We can't unregister wrong ones, but can unregister correct one */
+       ok1(!opt_unregister("--aaa"));
+       ok1(!opt_unregister("-a"));
+       ok1(opt_unregister("--aaa|-a"));
+
+       /* Arg parsing works as if we'd never registered it */
+       ok1(parse_args(&argc, &argv, "-b", NULL));
+       ok1(argc == 1);
+       ok1(argv[0] == myname);
+       ok1(argv[1] == NULL);
+       ok1(test_cb_called == 1);
+
+       ok1(!parse_args(&argc, &argv, "--aaa", NULL));
+
+       /* We can still add another one OK. */
+       opt_register_noarg("-c", test_noarg, NULL, "AAAAAAll");
+       ok1(parse_args(&argc, &argv, "-c", NULL));
+       ok1(argc == 1);
+       ok1(argv[0] == myname);
+       ok1(argv[1] == NULL);
+       ok1(test_cb_called == 2);
+
+       /* parse_args allocates argv */
+       free(argv);
+       return exit_status();
+}