mirror of https://github.com/GOSTSec/sgminer
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
144 lines
3.0 KiB
144 lines
3.0 KiB
#include "config.h" |
|
#include <stdio.h> |
|
#include <ccan/tap/tap.h> |
|
#include <setjmp.h> |
|
#include <stdlib.h> |
|
#include <limits.h> |
|
#include <err.h> |
|
#include "utils.h" |
|
|
|
/* We don't actually want it to exit... */ |
|
static jmp_buf exited; |
|
#define errx save_and_jump |
|
|
|
static void save_and_jump(int ecode, const char *fmt, ...); |
|
|
|
#include <ccan/opt/helpers.c> |
|
#include <ccan/opt/opt.c> |
|
#include <ccan/opt/usage.c> |
|
#include <ccan/opt/parse.c> |
|
|
|
static char *output = NULL; |
|
|
|
static int saved_vprintf(const char *fmt, va_list ap) |
|
{ |
|
char *p; |
|
int ret = vasprintf(&p, fmt, ap); |
|
|
|
if (output) { |
|
output = realloc(output, strlen(output) + strlen(p) + 1); |
|
strcat(output, p); |
|
free(p); |
|
} else |
|
output = p; |
|
return ret; |
|
} |
|
|
|
static void save_and_jump(int ecode, const char *fmt, ...) |
|
{ |
|
va_list ap; |
|
|
|
va_start(ap, fmt); |
|
saved_vprintf(fmt, ap); |
|
va_end(ap); |
|
longjmp(exited, ecode + 1); |
|
} |
|
|
|
static void reset(void) |
|
{ |
|
free(output); |
|
output = NULL; |
|
free(opt_table); |
|
opt_table = NULL; |
|
opt_count = opt_num_short = opt_num_short_arg = opt_num_long = 0; |
|
} |
|
|
|
int main(int argc, char *argv[]) |
|
{ |
|
int exitval; |
|
|
|
plan_tests(14); |
|
|
|
exitval = setjmp(exited); |
|
if (exitval == 0) { |
|
/* Bad type. */ |
|
_opt_register("-a", OPT_SUBTABLE, (void *)opt_version_and_exit, |
|
NULL, NULL, "1.2.3", ""); |
|
fail("_opt_register returned?"); |
|
} else { |
|
ok1(exitval - 1 == 1); |
|
ok1(strstr(output, "Option -a: unknown entry type")); |
|
} |
|
reset(); |
|
|
|
exitval = setjmp(exited); |
|
if (exitval == 0) { |
|
/* NULL description. */ |
|
opt_register_noarg("-a", test_noarg, "", NULL); |
|
fail("_opt_register returned?"); |
|
} else { |
|
ok1(exitval - 1 == 1); |
|
ok1(strstr(output, "Option -a: description cannot be NULL")); |
|
} |
|
reset(); |
|
|
|
exitval = setjmp(exited); |
|
if (exitval == 0) { |
|
/* Bad option name. */ |
|
opt_register_noarg("a", test_noarg, "", ""); |
|
fail("_opt_register returned?"); |
|
} else { |
|
ok1(exitval - 1 == 1); |
|
ok1(strstr(output, "Option a: does not begin with '-'")); |
|
} |
|
|
|
reset(); |
|
|
|
exitval = setjmp(exited); |
|
if (exitval == 0) { |
|
/* Bad option name. */ |
|
opt_register_noarg("--", test_noarg, "", ""); |
|
fail("_opt_register returned?"); |
|
} else { |
|
ok1(exitval - 1 == 1); |
|
ok1(strstr(output, "Option --: invalid long option '--'")); |
|
} |
|
|
|
reset(); |
|
|
|
exitval = setjmp(exited); |
|
if (exitval == 0) { |
|
/* Bad option name. */ |
|
opt_register_noarg("--a|-aaa", test_noarg, "", ""); |
|
fail("_opt_register returned?"); |
|
} else { |
|
ok1(exitval - 1 == 1); |
|
ok1(strstr(output, |
|
"Option --a|-aaa: invalid short option '-aaa'")); |
|
} |
|
reset(); |
|
|
|
exitval = setjmp(exited); |
|
if (exitval == 0) { |
|
/* Documentation for non-optios. */ |
|
opt_register_noarg("--a foo", test_noarg, "", ""); |
|
fail("_opt_register returned?"); |
|
} else { |
|
ok1(exitval - 1 == 1); |
|
ok1(strstr(output, |
|
"Option --a foo: does not take arguments 'foo'")); |
|
} |
|
reset(); |
|
|
|
exitval = setjmp(exited); |
|
if (exitval == 0) { |
|
/* Documentation for non-optios. */ |
|
opt_register_noarg("--a=foo", test_noarg, "", ""); |
|
fail("_opt_register returned?"); |
|
} else { |
|
ok1(exitval - 1 == 1); |
|
ok1(strstr(output, |
|
"Option --a=foo: does not take arguments 'foo'")); |
|
} |
|
return exit_status(); |
|
}
|
|
|