X-Git-Url: https://git.ozlabs.org/?p=ccan;a=blobdiff_plain;f=ccan%2Fopt%2Ftest%2Frun-early.c;fp=ccan%2Fopt%2Ftest%2Frun-early.c;h=439ccabb94870c918014a36136395f42e5999fc1;hp=0000000000000000000000000000000000000000;hb=50212d0d271f967d9f5d14c116ec54c0050882a8;hpb=bb2a75f445f408e43730fc55a1a978581ebe9b96 diff --git a/ccan/opt/test/run-early.c b/ccan/opt/test/run-early.c new file mode 100644 index 00000000..439ccabb --- /dev/null +++ b/ccan/opt/test/run-early.c @@ -0,0 +1,77 @@ +/* With errlog == NULL, we never get a "failure". */ +#include +#include +#include +#include +#include +#include +#include "utils.h" + +struct opt_table some_early_table[] = { + OPT_EARLY_WITHOUT_ARG("--verbose|-v", test_noarg, + "vvv", "Description of verbose"), + OPT_EARLY_WITH_ARG("--debug|-d", test_arg, show_arg, + "ddd", "Description of debug"), + OPT_WITHOUT_ARG("-h|--hhh", test_noarg, "hhh", "Description of hhh"), + OPT_ENDTABLE +}; + +int main(int argc, char *argv[]) +{ + const char *myname = argv[0]; + + plan_tests(37); + + /* Simple short arg.*/ + opt_register_noarg("-a", test_noarg, NULL, "All"); + opt_register_early_noarg("-b", test_noarg, NULL, "All"); + + /* Early parsing doesn't mangle. */ + ok1(parse_early_args(&argc, &argv, "-a", NULL)); + ok1(argc == 2); + ok1(argv[0] == myname); + ok1(strcmp(argv[1], "-a") == 0); + ok1(argv[2] == NULL); + ok1(test_cb_called == 0); + + /* ... even if it processes arg. */ + ok1(parse_early_args(&argc, &argv, "-b", NULL)); + ok1(argc == 2); + ok1(argv[0] == myname); + ok1(strcmp(argv[1], "-b") == 0); + ok1(argv[2] == NULL); + ok1(test_cb_called == 1); + + ok1(parse_early_args(&argc, &argv, "-ab", NULL)); + ok1(argc == 2); + ok1(argv[0] == myname); + ok1(strcmp(argv[1], "-ab") == 0); + ok1(argv[2] == NULL); + ok1(test_cb_called == 2); + + ok1(parse_args(&argc, &argv, "-ab", NULL)); + ok1(argc == 1); + ok1(argv[0] == myname); + ok1(argv[1] == NULL); + ok1(test_cb_called == 3); + + opt_register_table(some_early_table, "Some early args"); + ok1(parse_early_args(&argc, &argv, "--verbose", "-dddd", "-h", NULL)); + ok1(argc == 4); + ok1(argv[0] == myname); + ok1(strcmp(argv[1], "--verbose") == 0); + ok1(strcmp(argv[2], "-dddd") == 0); + ok1(strcmp(argv[3], "-h") == 0); + ok1(argv[4] == NULL); + ok1(test_cb_called == 5); + + ok1(parse_args(&argc, &argv, "--verbose", "-d", "ddd", "-h", NULL)); + ok1(argc == 1); + ok1(argv[0] == myname); + ok1(argv[1] == NULL); + ok1(test_cb_called == 6); + + /* parse_args allocates argv */ + free(argv); + return exit_status(); +}