aboutsummaryrefslogtreecommitdiffstats
path: root/main/test.c
diff options
context:
space:
mode:
authormmichelson <mmichelson@f38db490-d61c-443f-a65b-d21fe96a405b>2010-02-17 22:40:43 +0000
committermmichelson <mmichelson@f38db490-d61c-443f-a65b-d21fe96a405b>2010-02-17 22:40:43 +0000
commit57ef68cb88c0d1ad3245ace04e1874bb0824aeb0 (patch)
tree257f6fea880de33154e754513eadcddb51fece8a /main/test.c
parentb6c8764285c88025adaba9edbc373da1676df72b (diff)
Tab completion for test categories and names for "test show registered" and "test execute" CLI commands.
git-svn-id: http://svn.digium.com/svn/asterisk/trunk@247380 f38db490-d61c-443f-a65b-d21fe96a405b
Diffstat (limited to 'main/test.c')
-rw-r--r--main/test.c48
1 files changed, 47 insertions, 1 deletions
diff --git a/main/test.c b/main/test.c
index e6bbaeb99..41e00a89f 100644
--- a/main/test.c
+++ b/main/test.c
@@ -256,7 +256,7 @@ static int test_execute_multiple(const char *name, const char *category, struct
}
break;
case TEST_NAME_CATEGORY:
- if (!(strcmp(test->info.category, category)) && !(strcmp(test->info.name, name))) {
+ if (!(test_cat_cmp(test->info.category, category)) && !(strcmp(test->info.name, name))) {
execute = 1;
}
break;
@@ -565,6 +565,40 @@ static struct ast_test *test_alloc(ast_test_cb_t *cb)
return test;
}
+static char *complete_test_category(const char *line, const char *word, int pos, int state)
+{
+ int which = 0;
+ int wordlen = strlen(word);
+ char *ret = NULL;
+ struct ast_test *test;
+
+ AST_LIST_LOCK(&tests);
+ AST_LIST_TRAVERSE(&tests, test, entry) {
+ if (!strncasecmp(word, test->info.category, wordlen) && ++which > state) {
+ ret = ast_strdup(test->info.category);
+ break;
+ }
+ }
+ return ret;
+}
+
+static char *complete_test_name(const char *line, const char *word, int pos, int state, const char *category)
+{
+ int which = 0;
+ int wordlen = strlen(word);
+ char *ret = NULL;
+ struct ast_test *test;
+
+ AST_LIST_LOCK(&tests);
+ AST_LIST_TRAVERSE(&tests, test, entry) {
+ if (!test_cat_cmp(category, test->info.category) && (!strncasecmp(word, test->info.name, wordlen) && ++which > state)) {
+ ret = ast_strdup(test->info.name);
+ break;
+ }
+ }
+ return ret;
+}
+
/* CLI commands */
static char *test_cli_show_registered(struct ast_cli_entry *e, int cmd, struct ast_cli_args *a)
{
@@ -589,9 +623,15 @@ static char *test_cli_show_registered(struct ast_cli_entry *e, int cmd, struct a
if (a->pos == 3) {
return ast_cli_complete(a->word, option1, a->n);
}
+ if (a->pos == 4) {
+ return complete_test_category(a->line, a->word, a->pos, a->n);
+ }
if (a->pos == 5) {
return ast_cli_complete(a->word, option2, a->n);
}
+ if (a->pos == 6) {
+ return complete_test_name(a->line, a->word, a->pos, a->n, a->argv[3]);
+ }
return NULL;
case CLI_HANDLER:
if ((a->argc < 4) || (a->argc == 6) || (a->argc > 7) ||
@@ -642,9 +682,15 @@ static char *test_cli_execute_registered(struct ast_cli_entry *e, int cmd, struc
if (a->pos == 2) {
return ast_cli_complete(a->word, option1, a->n);
}
+ if (a->pos == 3) {
+ return complete_test_category(a->line, a->word, a->pos, a->n);
+ }
if (a->pos == 4) {
return ast_cli_complete(a->word, option2, a->n);
}
+ if (a->pos == 5) {
+ return complete_test_name(a->line, a->word, a->pos, a->n, a->argv[3]);
+ }
return NULL;
case CLI_HANDLER: