static void test_space_at_the_end(void) { const char *start; char *completed; vle_compl_reset(); complete_options("fusehome=a\\ b\\ ", &start); completed = vle_compl_next(); assert_string_equal("a\\ b\\ ", completed); free(completed); vle_compl_reset(); complete_options("fusehome=a\\ b ", &start); completed = vle_compl_next(); assert_string_equal("all", completed); free(completed); completed = vle_compl_next(); assert_string_equal("cpoptions", completed); free(completed); completed = vle_compl_next(); assert_string_equal("fastrun", completed); free(completed); }
static void test_invalid_input(void) { const char *start; char *completed; vle_compl_reset(); complete_options("fast ?f", &start); completed = vle_compl_next(); assert_string_equal("fast ?f", completed); free(completed); }
static void test_umbiguous_beginning(void) { const char *start; char *completed; vle_compl_reset(); complete_options("sort", &start); completed = vle_compl_next(); assert_string_equal("sort", completed); free(completed); completed = vle_compl_next(); assert_string_equal("sortorder", completed); free(completed); }
static void test_expand_abbreviations(void) { const char *start; char *completed; vle_compl_reset(); complete_options("fr", &start); completed = vle_compl_next(); assert_string_equal("fastrun", completed); free(completed); completed = vle_compl_next(); assert_string_equal("fastrun", completed); free(completed); }
static void test_skip_abbreviations(void) { const char *start; char *completed; vle_compl_reset(); complete_options("", &start); completed = vle_compl_next(); assert_string_equal("all", completed); free(completed); completed = vle_compl_next(); assert_string_equal("cpoptions", completed); free(completed); completed = vle_compl_next(); assert_string_equal("fastrun", completed); free(completed); completed = vle_compl_next(); assert_string_equal("fusehome", completed); free(completed); completed = vle_compl_next(); assert_string_equal("sort", completed); free(completed); completed = vle_compl_next(); assert_string_equal("sortorder", completed); free(completed); completed = vle_compl_next(); assert_string_equal("tabstop", completed); free(completed); completed = vle_compl_next(); assert_string_equal("vifminfo", completed); free(completed); completed = vle_compl_next(); assert_string_equal("", completed); free(completed); }
static void test_after_peq_value_completion(void) { char buf[] = "vifminfo+=op"; const char *start; char *completed; vle_compl_reset(); complete_options(buf, &start); assert_true(start == buf + 10); completed = vle_compl_next(); assert_string_equal("options", completed); free(completed); completed = vle_compl_next(); assert_string_equal("options", completed); free(completed); }
static void test_one_choice_opt(void) { const char *start; char *completed; vle_compl_reset(); complete_options("fuse", &start); completed = vle_compl_next(); assert_string_equal("fusehome", completed); free(completed); completed = vle_compl_next(); assert_string_equal("fusehome", completed); free(completed); completed = vle_compl_next(); assert_string_equal("fusehome", completed); free(completed); }
static void test_matching_short_full(void) { const char *start; char *completed; vle_compl_reset(); complete_options("so", &start); completed = vle_compl_next(); assert_string_equal("sort", completed); free(completed); completed = vle_compl_next(); assert_string_equal("sortorder", completed); free(completed); completed = vle_compl_next(); assert_string_equal("so", completed); free(completed); }
static void test_one_choice_val(void) { char buf[] = "sort=n"; const char *start; char *completed; vle_compl_reset(); complete_options(buf, &start); assert_true(start == buf + 5); completed = vle_compl_next(); assert_string_equal("name", completed); free(completed); completed = vle_compl_next(); assert_string_equal("name", completed); free(completed); completed = vle_compl_next(); assert_string_equal("name", completed); free(completed); }
static void test_set_values_completion(void) { char buf[] = "vifminfo=tui,c"; const char *start; char *completed; vle_compl_reset(); complete_options(buf, &start); assert_true(start == buf + 13); completed = vle_compl_next(); assert_string_equal("commands", completed); free(completed); completed = vle_compl_next(); assert_string_equal("cs", completed); free(completed); completed = vle_compl_next(); assert_string_equal("c", completed); free(completed); }
int main(void) { DWORD dwExitCode; char *cmdline; /* Make sure a logoff does not distrurb us. */ SetConsoleCtrlHandler(LogoffHandlerRoutine, TRUE); cmdline = GetCommandLine(); assert(cmdline); CommandLineStart = (char *) malloc(strlen(cmdline) + 1); assert(CommandLineStart); strcpy(CommandLineStart,cmdline); split_commandline(); parse_commandline(); complete_options(); /* We now have all the options we need in order to fire up a new node.. */ dwExitCode = start_new_node(); return( (int) dwExitCode ); }
int complete_args(int id, const char args[], int argc, char *argv[], int arg_pos, void *extra_arg) { /* TODO: Refactor this function complete_args() */ const char *arg; const char *start; const char *slash; const char *dollar; const char *ampersand; arg = after_last(args, ' '); start = arg; slash = strrchr(args + arg_pos, '/'); dollar = strrchr(arg, '$'); ampersand = strrchr(arg, '&'); if(id == COM_SET) complete_options(args, &start); else if(command_accepts_expr(id)) { if(ampersand > dollar) { start = ampersand + 1; complete_real_option_names(ampersand + 1); } else { complete_variables((dollar > arg) ? dollar : arg, &start); } } else if(id == COM_UNLET) complete_variables(arg, &start); else if(id == COM_HELP) complete_help(args); else if(id == COM_HISTORY) { complete_history(args); start = args; } else if(id == COM_INVERT) { complete_invert(args); start = args; } else if(id == COM_CHOWN) start += complete_chown(args); else if(id == COM_FILE) complete_filetype(args); else if(id == COM_HIGHLIGHT) { if(argc == 0 || (argc == 1 && !cmd_ends_with_space(args))) complete_highlight_groups(args); else start += complete_highlight_arg(arg); } else if((id == COM_CD || id == COM_PUSHD || id == COM_EXECUTE || id == COM_SOURCE) && dollar != NULL && dollar > slash) { start = dollar + 1; complete_envvar(start); } else if(id == COM_WINDO) ; else if(id == COM_WINRUN) { if(argc == 0) complete_winrun(args); } else { char *free_me = NULL; size_t arg_num = argc; start = slash; if(start == NULL) start = args + arg_pos; else start++; if(argc > 0 && !cmd_ends_with_space(args)) { if(ends_with(args, "\"")) { return start - args; } if(ends_with(args, "'")) { return start - args; } arg_num = argc - 1; arg = argv[arg_num]; } switch((CompletionPreProcessing)extra_arg) { case CPP_NONE: /* Do nothing. */ break; case CPP_SQUOTES_UNESCAPE: arg = args + arg_pos + 1; start = (slash == NULL) ? arg : (slash + 1); free_me = strdup(arg); expand_squotes_escaping(free_me); arg = free_me; break; case CPP_DQUOTES_UNESCAPE: arg = args + arg_pos + 1; start = (slash == NULL) ? arg : (slash + 1); free_me = strdup(arg); expand_dquotes_escaping(free_me); arg = free_me; break; }; if(id == COM_COLORSCHEME) { complete_colorscheme(arg, arg_num); } else if(id == COM_CD || id == COM_PUSHD || id == COM_SYNC || id == COM_MKDIR) { filename_completion(arg, CT_DIRONLY); } else if(id == COM_COPY || id == COM_MOVE || id == COM_ALINK || id == COM_RLINK) { filename_completion_in_dir(other_view->curr_dir, arg, CT_ALL); } else if(id == COM_SPLIT || id == COM_VSPLIT) { filename_completion_in_dir(curr_view->curr_dir, arg, CT_DIRONLY); } else if(id == COM_FIND) { if(argc == 1 && !cmd_ends_with_space(args)) filename_completion(arg, CT_DIRONLY); } else if(id == COM_EXECUTE) { if(argc == 0 || (argc == 1 && !cmd_ends_with_space(args))) { if(*arg == '.') filename_completion(arg, CT_DIREXEC); else complete_command_name(arg); } else filename_completion(arg, CT_ALL); } else if(id == COM_TOUCH || id == COM_RENAME) { filename_completion(arg, CT_ALL_WOS); } else { filename_completion(arg, CT_ALL); } free(free_me); } return start - args; }
static void test_after_equal_sign_completion_ok(void) { const char *start; char *completed; optval_t val = { .str_val = "/home/tmp" }; set_option("fusehome", val); vle_compl_reset(); complete_options("fusehome=", &start); completed = vle_compl_next(); assert_string_equal("/home/tmp", completed); free(completed); } static void test_after_equal_sign_completion_spaces_ok(void) { const char *start; char *completed; optval_t val = { .str_val = "/home directory/tmp" }; set_option("fusehome", val); vle_compl_reset(); complete_options("fusehome=", &start); completed = vle_compl_next(); assert_string_equal("/home\\ directory/tmp", completed); free(completed); } static void test_after_fake_equal_sign_completion_fail(void) { const char *start; char *completed; optval_t val = { .str_val = "/home/tmp" }; set_option("fusehome", val); vle_compl_reset(); complete_options("fusehome=a=", &start); completed = vle_compl_next(); assert_string_equal("a=", completed); free(completed); } static void test_all_completion_ok(void) { const char *start; char *completed; vle_compl_reset(); complete_options("all=", &start); completed = vle_compl_next(); assert_string_equal("", completed); free(completed); } static void test_charset_completion_skips_entered_elements(void) { const char *start; char *completed; vle_compl_reset(); complete_options("cpo=a", &start); completed = vle_compl_next(); assert_string_equal("b", completed); free(completed); completed = vle_compl_next(); assert_string_equal("c", completed); free(completed); completed = vle_compl_next(); assert_string_equal("", completed); free(completed); completed = vle_compl_next(); assert_string_equal("b", completed); free(completed); } void opt_completion(void) { test_fixture_start(); run_test(test_space_at_the_end); run_test(test_one_choice_opt); run_test(test_one_choice_val); run_test(test_invalid_input); run_test(test_skip_abbreviations); run_test(test_expand_abbreviations); run_test(test_after_eq_value_completion); run_test(test_after_meq_value_completion); run_test(test_after_peq_value_completion); run_test(test_set_values_completion); run_test(test_colon); run_test(test_umbiguous_beginning); run_test(test_matching_short_full); run_test(test_after_equal_sign_completion_ok); run_test(test_after_equal_sign_completion_spaces_ok); run_test(test_after_fake_equal_sign_completion_fail); run_test(test_all_completion_ok); run_test(test_charset_completion_skips_entered_elements); test_fixture_end(); }