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
char *
fast_run_complete(const char cmd[])
{
	char *result = NULL;
	const char *args;
	char command[NAME_MAX];
	char *completed;

	args = extract_cmd_name(cmd, 0, sizeof(command), command);

	if(is_path_absolute(command))
	{
		return strdup(cmd);
	}

	vle_compl_reset();
	complete_command_name(command);
	vle_compl_unite_groups();
	completed = vle_compl_next();

	if(vle_compl_get_count() > 2)
	{
		int c = vle_compl_get_count() - 1;
		while(c-- > 0)
		{
			if(stroscmp(command, completed) == 0)
			{
				result = strdup(cmd);
				break;
			}
			else
			{
				free(completed);
				completed = vle_compl_next();
			}
		}

		if(result == NULL)
		{
			status_bar_error("Command beginning is ambiguous");
		}
	}
	else
	{
		free(completed);
		completed = vle_compl_next();
		result = format_str("%s %s", completed, args);
	}
	free(completed);

	return result;
}
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_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.º 6
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.º 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_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.º 10
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.º 11
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.º 12
0
SETUP()
{
	static int option_changed;
	optval_t def = { .str_val = "/tmp" };

	cfg.slow_fs_list = strdup("");

	init_builtin_functions();

	stats.line = wcsdup(L"set ");
	stats.index = wcslen(stats.line);
	stats.curs_pos = 0;
	stats.len = stats.index;
	stats.cmd_pos = -1;
	stats.complete_continue = 0;
	stats.history_search = 0;
	stats.line_buf = NULL;
	stats.complete = &complete_cmd;

	init_commands();

	execute_cmd("command bar a");
	execute_cmd("command baz b");
	execute_cmd("command foo c");

	init_options(&option_changed);
	add_option("fusehome", "fh", OPT_STR, 0, NULL, fusehome_handler, def);

	assert_int_equal(0, chdir("test-data/existing-files"));
}

TEARDOWN()
{
	assert_int_equal(0, chdir("../.."));

	free(cfg.slow_fs_list);
	cfg.slow_fs_list = NULL;

	free(stats.line);
	reset_cmds();
	clear_options();

	function_reset_all();
}

static void
fusehome_handler(OPT_OP op, optval_t val)
{
}

TEST(leave_spaces_at_begin)
{
	char *buf;

	vle_compl_reset();
	assert_int_equal(1, complete_cmd(" qui", NULL));
	buf = vle_compl_next();
	assert_string_equal("quit", buf);
	free(buf);
	buf = vle_compl_next();
	assert_string_equal("quit", buf);
	free(buf);
}

TEST(only_user)
{
	char *buf;

	vle_compl_reset();
	assert_int_equal(8, complete_cmd("command ", NULL));
	buf = vle_compl_next();
	assert_string_equal("bar", buf);
	free(buf);

	vle_compl_reset();
	assert_int_equal(9, complete_cmd(" command ", NULL));
	buf = vle_compl_next();
	assert_string_equal("bar", buf);
	free(buf);

	vle_compl_reset();
	assert_int_equal(10, complete_cmd("  command ", NULL));
	buf = vle_compl_next();
	assert_string_equal("bar", buf);
	free(buf);
}

TEST(test_set_completion)
{
	vle_compl_reset();
	assert_success(line_completion(&stats));
	assert_wstring_equal(L"set all", stats.line);
}

TEST(no_sdquoted_completion_does_nothing)
{
	free(stats.line);
	stats.line = wcsdup(L"command '");
	stats.len = wcslen(stats.line);
	stats.index = stats.len;

	vle_compl_reset();
	assert_success(line_completion(&stats));
	assert_wstring_equal(L"command '", stats.line);
}

static void
prepare_for_line_completion(const wchar_t str[])
{
	free(stats.line);
	stats.line = wcsdup(str);
	stats.len = wcslen(stats.line);
	stats.index = stats.len;
	stats.complete_continue = 0;

	vle_compl_reset();
}
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();
}