diff options
author | Akim Demaille <akim.demaille@gmail.com> | 2019-04-30 08:01:14 +0200 |
---|---|---|
committer | Akim Demaille <akim.demaille@gmail.com> | 2019-06-21 18:35:01 +0200 |
commit | 5d00a2ec62270ded0438b5641a97b9ea0a1cd159 (patch) | |
tree | 2fb46e5cb4db958407e0302980d96e1177c67e79 /tests/test-argmatch.c | |
parent | 13644a8180a084c4c682d54f27a2eaab01a92d7f (diff) | |
download | gnulib-5d00a2ec62270ded0438b5641a97b9ea0a1cd159.tar.gz |
argmatch: add support to generate the usage message
* lib/argmatch.c: Move some #includes and gettext support to...
* lib/argmatch.h: here.
(ARGMATCH_DEFINE_GROUP): New macro.
* tests/test-argmatch.c (argmatch_backup_docs, argmatch_backup_args)
(argmatch_backup_group): New.
(CHECK): New.
(main): Check argmatch_backup_value, argmatch_backup_xvalue,
argmatch_backup_argument and argmatch_backup_usage.
* modules/argmatch: We depend on c99.
* doc/argmatch.texi (Recognizing Option Arguments): New.
* doc/gnulib.texi: Use it.
Diffstat (limited to 'tests/test-argmatch.c')
-rw-r--r-- | tests/test-argmatch.c | 94 |
1 files changed, 75 insertions, 19 deletions
diff --git a/tests/test-argmatch.c b/tests/test-argmatch.c index 9335adf55b..4c724f4cfe 100644 --- a/tests/test-argmatch.c +++ b/tests/test-argmatch.c @@ -59,40 +59,96 @@ static const enum backup_type backup_vals[] = numbered_backups, numbered_backups, numbered_backups }; +ARGMATCH_DEFINE_GROUP(backup, enum backup_type); + +static const argmatch_backup_doc argmatch_backup_docs[] = +{ + { "no", N_("never make backups (even if --backup is given)") }, + { "numbered", N_("make numbered backups") }, + { "existing", N_("numbered if numbered backups exist, simple otherwise") }, + { "simple", N_("always make simple backups") }, + { NULL, NULL } +}; + +static const argmatch_backup_arg argmatch_backup_args[] = +{ + { "no", no_backups }, + { "none", no_backups }, + { "off", no_backups }, + { "simple", simple_backups }, + { "never", simple_backups }, + { "single", simple_backups }, + { "existing", numbered_existing_backups }, + { "nil", numbered_existing_backups }, + { "numbered-existing", numbered_existing_backups }, + { "numbered", numbered_backups }, + { "t", numbered_backups }, + { "newstyle", numbered_backups }, + { NULL, no_backups } +}; + +const argmatch_backup_group_type argmatch_backup_group = +{ + argmatch_backup_docs, + argmatch_backup_args, + N_("\ +The backup suffix is '~', unless set with --suffix or SIMPLE_BACKUP_SUFFIX.\n\ +The version control method may be selected via the --backup option or through\n\ +the VERSION_CONTROL environment variable. Here are the values:\n"), + NULL +}; + int main (int argc, char *argv[]) { +#define CHECK(Input, Output) \ + do { \ + ASSERT (ARGMATCH (Input, backup_args, backup_vals) == Output); \ + ASSERT (argmatch_backup_value (Input) == Output); \ + if (0 <= Output) \ + { \ + enum backup_type val = argmatch_backup_args[Output].val; \ + ASSERT (*argmatch_backup_xvalue ("test", Input) == val); \ + ASSERT (*argmatch_backup_xvalue ("test", \ + argmatch_backup_argument (&val)) \ + == val); \ + } \ + } while (0) + /* Not found. */ - ASSERT (ARGMATCH ("klingon", backup_args, backup_vals) == -1); + CHECK ("klingon", -1); /* Exact match. */ - ASSERT (ARGMATCH ("none", backup_args, backup_vals) == 1); - ASSERT (ARGMATCH ("nil", backup_args, backup_vals) == 7); + CHECK ("none", 1); + CHECK ("nil", 7); /* Too long. */ - ASSERT (ARGMATCH ("nilpotent", backup_args, backup_vals) == -1); + CHECK ("nilpotent", -1); /* Abbreviated. */ - ASSERT (ARGMATCH ("simpl", backup_args, backup_vals) == 3); - ASSERT (ARGMATCH ("simp", backup_args, backup_vals) == 3); - ASSERT (ARGMATCH ("sim", backup_args, backup_vals) == 3); + CHECK ("simpl", 3); + CHECK ("simp", 3); + CHECK ("sim", 3); /* Exact match and abbreviated. */ - ASSERT (ARGMATCH ("numbered", backup_args, backup_vals) == 9); - ASSERT (ARGMATCH ("numbere", backup_args, backup_vals) == -2); - ASSERT (ARGMATCH ("number", backup_args, backup_vals) == -2); - ASSERT (ARGMATCH ("numbe", backup_args, backup_vals) == -2); - ASSERT (ARGMATCH ("numb", backup_args, backup_vals) == -2); - ASSERT (ARGMATCH ("num", backup_args, backup_vals) == -2); - ASSERT (ARGMATCH ("nu", backup_args, backup_vals) == -2); - ASSERT (ARGMATCH ("n", backup_args, backup_vals) == -2); + CHECK ("numbered", 9); + CHECK ("numbere", -2); + CHECK ("number", -2); + CHECK ("numbe", -2); + CHECK ("numb", -2); + CHECK ("num", -2); + CHECK ("nu", -2); + CHECK ("n", -2); /* Ambiguous abbreviated. */ - ASSERT (ARGMATCH ("ne", backup_args, backup_vals) == -2); + CHECK ("ne", -2); + + /* Ambiguous abbreviated, but same value ("single" and "simple"). */ + CHECK ("si", 3); + CHECK ("s", 3); +#undef CHECK - /* Ambiguous abbreviated, but same value. */ - ASSERT (ARGMATCH ("si", backup_args, backup_vals) == 3); - ASSERT (ARGMATCH ("s", backup_args, backup_vals) == 3); + argmatch_backup_usage (stdout); return 0; } |