Commit 10ae7526bebb505ddddba01f76ec97d5f7b5e0e5 introduced this feature,
but did not include any tests. This commit fixes this.

Signed-off-by: Felipe Gonçalves Assis <felipegas...@gmail.com>
---

This commit is independent of the proposed feature, so it might be of interest
even if the rest of the patch is rejected.

 t/t3034-merge-recursive-rename-threshold.sh | 146 ++++++++++++++++++++++++++++
 1 file changed, 146 insertions(+)
 create mode 100755 t/t3034-merge-recursive-rename-threshold.sh

diff --git a/t/t3034-merge-recursive-rename-threshold.sh 
b/t/t3034-merge-recursive-rename-threshold.sh
new file mode 100755
index 0000000..f0b3f44
--- /dev/null
+++ b/t/t3034-merge-recursive-rename-threshold.sh
@@ -0,0 +1,146 @@
+#!/bin/sh
+
+test_description='merge-recursive rename threshold option
+
+Test rename detection by examining rename/delete conflicts.
+
+Similarity index:
+R100 a-old a-new
+R075 b-old b-new
+R050 c-old c-new
+R025 d-old d-new
+'
+
+. ./test-lib.sh
+
+test_expect_success setup '
+       get_expected_stages () {
+               git checkout rename -- $1-new &&
+               git ls-files --stage $1-new > expected-stages-undetected-$1
+               sed "s/ 0       / 2     /
+               " < expected-stages-undetected-$1 > expected-stages-detected-$1
+               git read-tree -u --reset HEAD
+       } &&
+
+       rename_detected () {
+               git ls-files --stage $1-old $1-new > stages-actual-$1 &&
+               test_cmp expected-stages-detected-$1 stages-actual-$1
+       } &&
+
+       rename_undetected () {
+               git ls-files --stage $1-old $1-new > stages-actual-$1 &&
+               test_cmp expected-stages-undetected-$1 stages-actual-$1
+       } &&
+
+       check_common () {
+               git ls-files --stage > stages-actual &&
+               test $(wc -l < stages-actual) -eq 4
+       } &&
+
+       check_find_renames_25 () {
+               check_common &&
+               rename_detected a &&
+               rename_detected b &&
+               rename_detected c &&
+               rename_detected d
+       } &&
+
+       check_find_renames_50 () {
+               check_common
+               rename_detected a &&
+               rename_detected b &&
+               rename_detected c &&
+               rename_undetected d
+       } &&
+
+       check_find_renames_75 () {
+               check_common
+               rename_detected a &&
+               rename_detected b &&
+               rename_undetected c &&
+               rename_undetected d
+       } &&
+
+       check_find_renames_100 () {
+               check_common
+               rename_detected a &&
+               rename_undetected b &&
+               rename_undetected c &&
+               rename_undetected d
+       } &&
+
+       check_no_renames () {
+               check_common
+               rename_undetected a &&
+               rename_undetected b &&
+               rename_undetected c &&
+               rename_undetected d
+       } &&
+
+       cat <<-\EOF > a-old &&
+       aa1
+       aa2
+       aa3
+       aa4
+       EOF
+       sed s/aa/bb/ < a-old > b-old &&
+       sed s/aa/cc/ < a-old > c-old &&
+       sed s/aa/dd/ < a-old > d-old &&
+       git add [a-d]-old &&
+       test_tick &&
+       git commit -m base &&
+       git rm [a-d]-old &&
+       test_tick &&
+       git commit -m delete &&
+       git checkout -b rename HEAD^ &&
+       cp a-old a-new &&
+       sed 1,1s/./x/ < b-old > b-new &&
+       sed 1,2s/./x/ < c-old > c-new &&
+       sed 1,3s/./x/ < d-old > d-new &&
+       git add [a-d]-new &&
+       git rm [a-d]-old &&
+       test_tick &&
+       git commit -m rename &&
+       get_expected_stages a &&
+       get_expected_stages b &&
+       get_expected_stages c &&
+       get_expected_stages d
+'
+
+test_expect_success 'the default similarity index is 50%' '
+       git read-tree --reset -u HEAD &&
+       test_must_fail git merge-recursive HEAD^ -- HEAD master &&
+       check_find_renames_50
+'
+
+test_expect_success 'low rename threshold' '
+       git read-tree --reset -u HEAD &&
+       test_must_fail git merge-recursive --rename-threshold=25 HEAD^ -- HEAD 
master &&
+       check_find_renames_25
+'
+
+test_expect_success 'high rename threshold' '
+       git read-tree --reset -u HEAD &&
+       test_must_fail git merge-recursive --rename-threshold=75 HEAD^ -- HEAD 
master &&
+       check_find_renames_75
+'
+
+test_expect_success 'exact renames only' '
+       git read-tree --reset -u HEAD &&
+       test_must_fail git merge-recursive --rename-threshold=100% HEAD^ -- 
HEAD master &&
+       check_find_renames_100
+'
+
+test_expect_success 'rename threshold is truncated' '
+       git read-tree --reset -u HEAD &&
+       test_must_fail git merge-recursive --rename-threshold=200% HEAD^ -- 
HEAD master &&
+       check_find_renames_100
+'
+
+test_expect_success 'last wins in --rename-threshold=<m> 
--rename-threshold=<n>' '
+       git read-tree --reset -u HEAD &&
+       test_must_fail git merge-recursive --rename-threshold=25 
--rename-threshold=75 HEAD^ -- HEAD master &&
+       check_find_renames_75
+'
+
+test_done
-- 
2.7.1.342.gf5bb636

--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to