diff options
| author | Ben Straub <bs@github.com> | 2013-08-06 20:35:51 -0700 | 
|---|---|---|
| committer | Ben Straub <bs@github.com> | 2013-08-07 11:47:56 -0700 | 
| commit | 8c8a54901071f7d8372ce901b098507d5a4a5804 (patch) | |
| tree | 6821847f69d8acb534ae763000f3693f7805588e | |
| parent | d85636190f127efa2ec4a6593124c037dfec0ba9 (diff) | |
| download | libgit2-8c8a54901071f7d8372ce901b098507d5a4a5804.tar.gz | |
Add status test for long paths
| -rw-r--r-- | tests-clar/status/status_data.h | 4 | ||||
| -rw-r--r-- | tests-clar/status/worktree.c | 32 | 
2 files changed, 36 insertions, 0 deletions
| diff --git a/tests-clar/status/status_data.h b/tests-clar/status/status_data.h index 3efa934ea..652fe4378 100644 --- a/tests-clar/status/status_data.h +++ b/tests-clar/status/status_data.h @@ -1,5 +1,9 @@  #include "status_helpers.h" +// A utf-8 string with 89 characters, but 267 bytes. +static const char *longname = "\xE5\x8F\x97\xe5\x8f\x97\xe5\x8f\x97\xe5\x8f\x97\xe5\x8f\x97\xe5\x8f\x97\xe5\x8f\x97\xe5\x8f\x97\xe5\x8f\x97\xe5\x8f\x97\xe5\x8f\x97\xe5\x8f\x97\xe5\x8f\x97\xe5\x8f\x97\xe5\x8f\x97\xe5\x8f\x97\xe5\x8f\x97\xe5\x8f\x97\xe5\x8f\x97\xe5\x8f\x97\xe5\x8f\x97\xe5\x8f\x97\xe5\x8f\x97\xe5\x8f\x97\xe5\x8f\x97\xe5\x8f\x97\xe5\x8f\x97\xe5\x8f\x97\xe5\x8f\x97\xe5\x8f\x97\xe5\x8f\x97\xe5\x8f\x97\xe5\x8f\x97\xe5\x8f\x97\xe5\x8f\x97\xe5\x8f\x97\xe5\x8f\x97\xe5\x8f\x97\xe5\x8f\x97\xe5\x8f\x97\xe5\x8f\x97\xe5\x8f\x97\xe5\x8f\x97\xe5\x8f\x97\xe5\x8f\x97\xe5\x8f\x97\xe5\x8f\x97\xe5\x8f\x97\xe5\x8f\x97\xe5\x8f\x97\xe5\x8f\x97\xe5\x8f\x97\xe5\x8f\x97\xe5\x8f\x97\xe5\x8f\x97\xe5\x8f\x97\xe5\x8f\x97\xe5\x8f\x97\xe5\x8f\x97\xe5\x8f\x97\xe5\x8f\x97\xe5\x8f\x97\xe5\x8f\x97\xe5\x8f\x97\xe5\x8f\x97\xe5\x8f\x97\xe5\x8f\x97\xe5\x8f\x97\xe5\x8f\x97\xe5\x8f\x97\xe5\x8f\x97\xe5\x8f\x97\xe5\x8f\x97\xe5\x8f\x97\xe5\x8f\x97\xe5\x8f\x97\xe5\x8f\x97\xe5\x8f\x97\xe5\x8f\x97\xe5\x8f\x97\xe5\x8f\x97\xe5\x8f\x97\xe5\x8f\x97\xe5\x8f\x97\xe5\x8f\x97\xe5\x8f\x97\xe5\x8f\x97\xe5\x8f\x97\xe5\x8f\x97"; + +  /* entries for a plain copy of tests/resources/status */  static const char *entry_paths0[] = { diff --git a/tests-clar/status/worktree.c b/tests-clar/status/worktree.c index 0e315cd60..10efd7473 100644 --- a/tests-clar/status/worktree.c +++ b/tests-clar/status/worktree.c @@ -865,3 +865,35 @@ void test_status_worktree__sorting_by_case(void)  	cl_assert_equal_i(0, counts.wrong_status_flags_count);  	cl_assert_equal_i(0, counts.wrong_sorted_path);  } + +void test_status_worktree__long_filenames(void) +{ +	char path[GIT_WIN_PATH_UTF8]; +	const char *expected_paths[] = {path}; +	const unsigned int expected_statuses[] = {GIT_STATUS_WT_NEW}; + +	git_repository *repo = cl_git_sandbox_init("empty_standard_repo"); +	git_status_options opts = GIT_STATUS_OPTIONS_INIT; +	status_entry_counts counts = {0}; + +	// Create directory with amazingly long filename +	sprintf(path, "empty_standard_repo/%s", longname); +	cl_git_pass(git_futils_mkdir_r(path, NULL, 0777)); +	sprintf(path, "empty_standard_repo/%s/foo", longname); +	cl_git_mkfile(path, "dummy"); + +	sprintf(path, "%s/foo", longname); +	counts.expected_entry_count = 1; +	counts.expected_paths = expected_paths; +	counts.expected_statuses = expected_statuses; + +	opts.show = GIT_STATUS_SHOW_WORKDIR_ONLY; +	opts.flags = GIT_STATUS_OPT_DEFAULTS; + +	cl_git_pass( +		git_status_foreach_ext(repo, &opts, cb_status__normal, &counts) ); +	cl_assert_equal_i(counts.expected_entry_count, counts.entry_count); +	cl_assert_equal_i(0, counts.wrong_status_flags_count); +	cl_assert_equal_i(0, counts.wrong_sorted_path); +} + | 
