| # Helpers shared by the test scripts for diff algorithms (patience, | |
| # histogram, etc). | |
| test_diff_frobnitz() { | |
| cat >file1 <<\EOF | |
| #include <stdio.h> | |
| // Frobs foo heartily | |
| int frobnitz(int foo) | |
| { | |
| int i; | |
| for(i = 0; i < 10; i++) | |
| { | |
| printf("Your answer is: "); | |
| printf("%d\n", foo); | |
| } | |
| } | |
| int fact(int n) | |
| { | |
| if(n > 1) | |
| { | |
| return fact(n-1) * n; | |
| } | |
| return 1; | |
| } | |
| int main(int argc, char **argv) | |
| { | |
| frobnitz(fact(10)); | |
| } | |
| EOF | |
| cat >file2 <<\EOF | |
| #include <stdio.h> | |
| int fib(int n) | |
| { | |
| if(n > 2) | |
| { | |
| return fib(n-1) + fib(n-2); | |
| } | |
| return 1; | |
| } | |
| // Frobs foo heartily | |
| int frobnitz(int foo) | |
| { | |
| int i; | |
| for(i = 0; i < 10; i++) | |
| { | |
| printf("%d\n", foo); | |
| } | |
| } | |
| int main(int argc, char **argv) | |
| { | |
| frobnitz(fib(10)); | |
| } | |
| EOF | |
| file1=$(git rev-parse --short $(git hash-object file1)) | |
| file2=$(git rev-parse --short $(git hash-object file2)) | |
| cat >expect <<EOF | |
| diff --git a/file1 b/file2 | |
| index $file1..$file2 100644 | |
| --- a/file1 | |
| +++ b/file2 | |
| @@ -1,26 +1,25 @@ | |
| #include <stdio.h> | |
| +int fib(int n) | |
| +{ | |
| + if(n > 2) | |
| + { | |
| + return fib(n-1) + fib(n-2); | |
| + } | |
| + return 1; | |
| +} | |
| + | |
| // Frobs foo heartily | |
| int frobnitz(int foo) | |
| { | |
| int i; | |
| for(i = 0; i < 10; i++) | |
| { | |
| - printf("Your answer is: "); | |
| printf("%d\n", foo); | |
| } | |
| } | |
| -int fact(int n) | |
| -{ | |
| - if(n > 1) | |
| - { | |
| - return fact(n-1) * n; | |
| - } | |
| - return 1; | |
| -} | |
| - | |
| int main(int argc, char **argv) | |
| { | |
| - frobnitz(fact(10)); | |
| + frobnitz(fib(10)); | |
| } | |
| EOF | |
| STRATEGY=$1 | |
| test_expect_success "$STRATEGY diff" ' | |
| test_must_fail git diff --no-index "--$STRATEGY" file1 file2 > output && | |
| test_cmp expect output | |
| ' | |
| test_expect_success "$STRATEGY diff output is valid" ' | |
| mv file2 expect && | |
| git apply < output && | |
| test_cmp expect file2 | |
| ' | |
| } | |
| test_diff_unique() { | |
| cat >uniq1 <<\EOF | |
| 1 | |
| 2 | |
| 3 | |
| 4 | |
| 5 | |
| 6 | |
| EOF | |
| cat >uniq2 <<\EOF | |
| a | |
| b | |
| c | |
| d | |
| e | |
| f | |
| EOF | |
| uniq1=$(git rev-parse --short $(git hash-object uniq1)) | |
| uniq2=$(git rev-parse --short $(git hash-object uniq2)) | |
| cat >expect <<EOF | |
| diff --git a/uniq1 b/uniq2 | |
| index $uniq1..$uniq2 100644 | |
| --- a/uniq1 | |
| +++ b/uniq2 | |
| @@ -1,6 +1,6 @@ | |
| -1 | |
| -2 | |
| -3 | |
| -4 | |
| -5 | |
| -6 | |
| +a | |
| +b | |
| +c | |
| +d | |
| +e | |
| +f | |
| EOF | |
| STRATEGY=$1 | |
| test_expect_success 'completely different files' ' | |
| test_must_fail git diff --no-index "--$STRATEGY" uniq1 uniq2 > output && | |
| test_cmp expect output | |
| ' | |
| } | |