summaryrefslogtreecommitdiff
path: root/tests/test-argmatch.c
diff options
context:
space:
mode:
authorAkim Demaille <akim.demaille@gmail.com>2019-04-30 08:01:14 +0200
committerAkim Demaille <akim.demaille@gmail.com>2019-06-21 18:35:01 +0200
commit5d00a2ec62270ded0438b5641a97b9ea0a1cd159 (patch)
tree2fb46e5cb4db958407e0302980d96e1177c67e79 /tests/test-argmatch.c
parent13644a8180a084c4c682d54f27a2eaab01a92d7f (diff)
downloadgnulib-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.c94
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;
}