Ejemplo n.º 1
0
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);
}
Ejemplo n.º 2
0
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);
}
Ejemplo n.º 3
0
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);
}
Ejemplo n.º 4
0
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);
}
Ejemplo n.º 5
0
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);
}
Ejemplo n.º 6
0
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);
}
Ejemplo n.º 7
0
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);
}
Ejemplo n.º 8
0
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);
}
Ejemplo n.º 9
0
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);
}
Ejemplo n.º 10
0
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);
}
Ejemplo n.º 11
0
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 );
}
Ejemplo n.º 12
0
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;
}
Ejemplo n.º 13
0
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();
}