]> git.proxmox.com Git - libgit2.git/commitdiff
Add status test for long paths
authorBen Straub <bs@github.com>
Wed, 7 Aug 2013 03:35:51 +0000 (20:35 -0700)
committerBen Straub <bs@github.com>
Wed, 7 Aug 2013 18:47:56 +0000 (11:47 -0700)
tests-clar/status/status_data.h
tests-clar/status/worktree.c

index 3efa934ea7a26382335057a548e55478609d8f05..652fe43788012fa4cd5b608b050d75f0c22d9bb4 100644 (file)
@@ -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[] = {
index 0e315cd602205684cda0d4dc14987cca9ed07ad5..10efd74734a2754157ffee5f0de92887fa9c9819 100644 (file)
@@ -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);
+}
+