1#!/bin/sh
2#
3# Copyright (c) 2005 Junio C Hamano
4#
5
6test_description='git apply boundary tests'
7
8. ./test-lib.sh
9
10L="c d e f g h i j k l m n o p q r s t u v w x"
11
12test_expect_success setup '
13	test_write_lines b $L y >victim &&
14	cat victim >original &&
15	git update-index --add victim &&
16
17	# add to the head
18	test_write_lines a b $L y >victim &&
19	cat victim >add-a-expect &&
20	git diff victim >add-a-patch.with &&
21	git diff --unified=0 >add-a-patch.without &&
22
23	# insert at line two
24	test_write_lines b a $L y >victim &&
25	cat victim >insert-a-expect &&
26	git diff victim >insert-a-patch.with &&
27	git diff --unified=0 >insert-a-patch.without &&
28
29	# modify at the head
30	test_write_lines a $L y >victim &&
31	cat victim >mod-a-expect &&
32	git diff victim >mod-a-patch.with &&
33	git diff --unified=0 >mod-a-patch.without &&
34
35	# remove from the head
36	test_write_lines $L y >victim &&
37	cat victim >del-a-expect &&
38	git diff victim >del-a-patch.with &&
39	git diff --unified=0 >del-a-patch.without &&
40
41	# add to the tail
42	test_write_lines b $L y z >victim &&
43	cat victim >add-z-expect &&
44	git diff victim >add-z-patch.with &&
45	git diff --unified=0 >add-z-patch.without &&
46
47	# modify at the tail
48	test_write_lines b $L z >victim &&
49	cat victim >mod-z-expect &&
50	git diff victim >mod-z-patch.with &&
51	git diff --unified=0 >mod-z-patch.without &&
52
53	# remove from the tail
54	test_write_lines b $L >victim &&
55	cat victim >del-z-expect &&
56	git diff victim >del-z-patch.with &&
57	git diff --unified=0 >del-z-patch.without
58
59	# done
60'
61
62for with in with without
63do
64	case "$with" in
65	with) u= ;;
66	without) u=--unidiff-zero ;;
67	esac
68	for kind in add-a add-z insert-a mod-a mod-z del-a del-z
69	do
70		test_expect_success "apply $kind-patch $with context" '
71			cat original >victim &&
72			git update-index victim &&
73			git apply --index $u "$kind-patch.$with" &&
74			test_cmp "$kind-expect" victim
75		'
76	done
77done
78
79for kind in add-a add-z insert-a mod-a mod-z del-a del-z
80do
81	rm -f $kind-ng.without
82	sed	-e "s/^diff --git /diff /" \
83		-e '/^index /d' \
84		<$kind-patch.without >$kind-ng.without
85	test_expect_success "apply non-git $kind-patch without context" '
86		cat original >victim &&
87		git update-index victim &&
88		git apply --unidiff-zero --index "$kind-ng.without" &&
89		test_cmp "$kind-expect" victim
90	'
91done
92
93test_expect_success 'two lines' '
94	>file &&
95	git add file &&
96	echo aaa >file &&
97	git diff >patch &&
98	git add file &&
99	echo bbb >file &&
100	git add file &&
101	test_must_fail git apply --check patch
102'
103
104test_expect_success 'apply patch with 3 context lines matching at end' '
105	test_write_lines a b c d >file &&
106	git add file &&
107	echo e >>file &&
108	git diff >patch &&
109	>file &&
110	test_must_fail git apply patch
111'
112
113test_done
114