#!/bin/sh
#
# Copyright (c) 2009 Giuseppe Bilotta
#

test_description='git-apply --ignore-whitespace.

'
. ./test-lib.sh

# This primes main.c file that indents without using HT at all.
# Various patches with HT and other spaces are attempted in the test.

cat > patch1.patch <<\EOF
diff --git a/main.c b/main.c
new file mode 100644
--- /dev/null
+++ b/main.c
@@ -0,0 +1,22 @@
+#include <stdio.h>
+
+void print_int(int num);
+int func(int num);
+
+int main() {
+       int i;
+
+       for (i = 0; i < 10; i++) {
+               print_int(func(i)); /* stuff */
+       }
+
+       return 0;
+}
+
+int func(int num) {
+       return num * num;
+}
+
+void print_int(int num) {
+       printf("%d", num);
+}
EOF

# Since whitespace is very significant and we want to prevent whitespace
# mangling when creating this test from a patch, we protect 'fixable'
# whitespace by replacing spaces with Z and replacing them at patch
# creation time, hence the sed trick.

# This patch will fail unless whitespace differences are being ignored

sed -e 's/Z/ /g' > patch2.patch <<\EOF
diff --git a/main.c b/main.c
--- a/main.c
+++ b/main.c
@@ -10,6 +10,8 @@
Z		print_int(func(i)); /* stuff */
Z	}
Z
+	printf("\n");
+
Z	return 0;
Z}
Z
EOF

# This patch will fail even if whitespace differences are being ignored,
# because of the missing string at EOL. TODO: this testcase should be
# improved by creating a line that has the same hash with and without
# the final string.

sed -e 's/Z/ /g' > patch3.patch <<\EOF
diff --git a/main.c b/main.c
--- a/main.c
+++ b/main.c
@@ -10,3 +10,4 @@
Z	for (i = 0; i < 10; i++) {
Z		print_int(func(i));Z
+		/* stuff */
Z	}
EOF

# This patch will fail even if whitespace differences are being ignored,
# because of the missing EOL at EOF.

sed -e 's/Z/ /g' > patch4.patch <<\EOF
diff --git a/main.c b/main.c
--- a/main.c
+++ b/main.c
@@ -21,1 +21,1 @@
-	};Z
\ No newline at end of file
+	};
EOF

# This patch will fail unless whitespace differences are being ignored.

sed -e 's/Z/ /g' > patch5.patch <<\EOF
diff --git a/main.c b/main.c
--- a/main.c
+++ b/main.c
@@ -2,2 +2,3 @@
Z	void print_int(int num);
+	/* a comment */
Z	int func(int num);
EOF

# And this is how the final output should be.  Patches introduce
# HTs but the original SP indents are mostly kept.

sed -e 's/T/	/g' > main.c.final <<\EOF
#include <stdio.h>

void print_int(int num);
T/* a comment */
int func(int num);

int main() {
       int i;

       for (i = 0; i < 10; i++) {
               print_int(func(i)); /* stuff */
       }

Tprintf("\n");

       return 0;
}

int func(int num) {
       return num * num;
}

void print_int(int num) {
       printf("%d", num);
}
EOF

test_expect_success 'file creation' '
	git apply patch1.patch
'

test_expect_success 'patch2 fails (retab)' '
	test_must_fail git apply patch2.patch
'

test_expect_success 'patch2 applies with --ignore-whitespace' '
	git apply --ignore-whitespace patch2.patch
'

test_expect_success 'patch2 reverse applies with --ignore-space-change' '
	git apply -R --ignore-space-change patch2.patch
'

git config apply.ignorewhitespace change

test_expect_success 'patch2 applies (apply.ignorewhitespace = change)' '
	git apply patch2.patch
'

test_expect_success 'patch3 fails (missing string at EOL)' '
	test_must_fail git apply patch3.patch
'

test_expect_success 'patch4 fails (missing EOL at EOF)' '
	test_must_fail git apply patch4.patch
'

test_expect_success 'patch5 applies (leading whitespace)' '
	git apply patch5.patch
'

test_expect_success 'patches do not mangle whitespace' '
	test_cmp main.c main.c.final
'

test_expect_success 're-create file (with --ignore-whitespace)' '
	rm -f main.c &&
	git apply patch1.patch
'

test_expect_success 'patch5 fails (--no-ignore-whitespace)' '
	test_must_fail git apply --no-ignore-whitespace patch5.patch
'

test_done
