1
2
3
4
5
6
7
8
9
10 package org.eclipse.jgit.merge;
11
12 import static org.junit.Assert.assertEquals;
13
14 import java.io.IOException;
15 import java.util.Arrays;
16 import java.util.List;
17
18 import org.eclipse.jgit.lib.ObjectId;
19 import org.eclipse.jgit.lib.ObjectIdRef;
20 import org.eclipse.jgit.lib.Ref;
21 import org.eclipse.jgit.lib.Ref.Storage;
22 import org.eclipse.jgit.lib.RefUpdate;
23 import org.eclipse.jgit.lib.SymbolicRef;
24 import org.eclipse.jgit.test.resources.SampleDataRepositoryTestCase;
25 import org.junit.Before;
26 import org.junit.Test;
27
28
29
30
31 public class MergeMessageFormatterTest extends SampleDataRepositoryTestCase {
32
33 private MergeMessageFormatter formatter;
34
35 @Override
36 @Before
37 public void setUp() throws Exception {
38 super.setUp();
39
40 RefUpdate createRemoteRefA = db
41 .updateRef("refs/remotes/origin/remote-a");
42 createRemoteRefA.setNewObjectId(db.resolve("refs/heads/a"));
43 createRemoteRefA.update();
44
45 RefUpdate createRemoteRefB = db
46 .updateRef("refs/remotes/origin/remote-b");
47 createRemoteRefB.setNewObjectId(db.resolve("refs/heads/b"));
48 createRemoteRefB.update();
49
50 formatter = new MergeMessageFormatter();
51 }
52
53 @Test
54 public void testOneBranch() throws IOException {
55 Ref a = db.exactRef("refs/heads/a");
56 Ref master = db.exactRef("refs/heads/master");
57 String message = formatter.format(Arrays.asList(a), master);
58 assertEquals("Merge branch 'a'", message);
59 }
60
61 @Test
62 public void testTwoBranches() throws IOException {
63 Ref a = db.exactRef("refs/heads/a");
64 Ref b = db.exactRef("refs/heads/b");
65 Ref master = db.exactRef("refs/heads/master");
66 String message = formatter.format(Arrays.asList(a, b), master);
67 assertEquals("Merge branches 'a' and 'b'", message);
68 }
69
70 @Test
71 public void testThreeBranches() throws IOException {
72 Ref c = db.exactRef("refs/heads/c");
73 Ref b = db.exactRef("refs/heads/b");
74 Ref a = db.exactRef("refs/heads/a");
75 Ref master = db.exactRef("refs/heads/master");
76 String message = formatter.format(Arrays.asList(c, b, a), master);
77 assertEquals("Merge branches 'c', 'b' and 'a'", message);
78 }
79
80 @Test
81 public void testRemoteBranch() throws Exception {
82 Ref remoteA = db.exactRef("refs/remotes/origin/remote-a");
83 Ref master = db.exactRef("refs/heads/master");
84 String message = formatter.format(Arrays.asList(remoteA), master);
85 assertEquals("Merge remote-tracking branch 'origin/remote-a'", message);
86 }
87
88 @Test
89 public void testMixed() throws IOException {
90 Ref c = db.exactRef("refs/heads/c");
91 Ref remoteA = db.exactRef("refs/remotes/origin/remote-a");
92 Ref master = db.exactRef("refs/heads/master");
93 String message = formatter.format(Arrays.asList(c, remoteA), master);
94 assertEquals("Merge branch 'c', remote-tracking branch 'origin/remote-a'",
95 message);
96 }
97
98 @Test
99 public void testTag() throws IOException {
100 Ref tagA = db.exactRef("refs/tags/A");
101 Ref master = db.exactRef("refs/heads/master");
102 String message = formatter.format(Arrays.asList(tagA), master);
103 assertEquals("Merge tag 'A'", message);
104 }
105
106 @Test
107 public void testCommit() throws IOException {
108 ObjectId objectId = ObjectId
109 .fromString("6db9c2ebf75590eef973081736730a9ea169a0c4");
110 Ref commit = new ObjectIdRef.Unpeeled(Storage.LOOSE,
111 objectId.getName(), objectId);
112 Ref master = db.exactRef("refs/heads/master");
113 String message = formatter.format(Arrays.asList(commit), master);
114 assertEquals("Merge commit '6db9c2ebf75590eef973081736730a9ea169a0c4'",
115 message);
116 }
117
118 @Test
119 public void testPullWithUri() throws IOException {
120 String name = "branch 'test' of http://egit.eclipse.org/jgit.git";
121 ObjectId objectId = ObjectId
122 .fromString("6db9c2ebf75590eef973081736730a9ea169a0c4");
123 Ref remoteBranch = new ObjectIdRef.Unpeeled(Storage.LOOSE, name,
124 objectId);
125 Ref master = db.exactRef("refs/heads/master");
126 String message = formatter.format(Arrays.asList(remoteBranch), master);
127 assertEquals("Merge branch 'test' of http://egit.eclipse.org/jgit.git",
128 message);
129 }
130
131 @Test
132 public void testIntoOtherThanMaster() throws IOException {
133 Ref a = db.exactRef("refs/heads/a");
134 Ref b = db.exactRef("refs/heads/b");
135 String message = formatter.format(Arrays.asList(a), b);
136 assertEquals("Merge branch 'a' into b", message);
137 }
138
139 @Test
140 public void testIntoHeadOtherThanMaster() throws IOException {
141 Ref a = db.exactRef("refs/heads/a");
142 Ref b = db.exactRef("refs/heads/b");
143 SymbolicRef head = new SymbolicRef("HEAD", b);
144 String message = formatter.format(Arrays.asList(a), head);
145 assertEquals("Merge branch 'a' into b", message);
146 }
147
148 @Test
149 public void testIntoSymbolicRefHeadPointingToMaster() throws IOException {
150 Ref a = db.exactRef("refs/heads/a");
151 Ref master = db.exactRef("refs/heads/master");
152 SymbolicRef head = new SymbolicRef("HEAD", master);
153 String message = formatter.format(Arrays.asList(a), head);
154 assertEquals("Merge branch 'a'", message);
155 }
156
157 @Test
158 public void testFormatWithConflictsNoFooter() {
159 String originalMessage = "Header Line\n\nCommit body\n";
160 String message = formatter.formatWithConflicts(originalMessage,
161 List.of("path1"), '#');
162 assertEquals("Header Line\n\nCommit body\n\n# Conflicts:\n#\tpath1\n",
163 message);
164 }
165
166 @Test
167 public void testFormatWithConflictsNoFooterNoLineBreak() {
168 String originalMessage = "Header Line\n\nCommit body";
169 String message = formatter.formatWithConflicts(originalMessage,
170 List.of("path1"), '#');
171 assertEquals("Header Line\n\nCommit body\n\n# Conflicts:\n#\tpath1\n",
172 message);
173 }
174
175 @Test
176 public void testFormatWithConflictsCustomCharacter() {
177 String originalMessage = "Header Line\n\nCommit body";
178 String message = formatter.formatWithConflicts(originalMessage,
179 List.of("path1"), ';');
180 assertEquals("Header Line\n\nCommit body\n\n; Conflicts:\n;\tpath1\n",
181 message);
182 }
183
184 @Test
185 public void testFormatWithConflictsWithFooters() {
186 String originalMessage = "Header Line\n\nCommit body\n\nChangeId:"
187 + " I123456789123456789123456789123456789\nBug:1234567\n";
188 String message = formatter.formatWithConflicts(originalMessage,
189 List.of("path1"), '#');
190 assertEquals(
191 "Header Line\n\nCommit body\n\n# Conflicts:\n#\tpath1\n\n"
192 + "ChangeId: I123456789123456789123456789123456789\nBug:1234567\n",
193 message);
194 }
195
196 @Test
197 public void testFormatWithConflictsWithFooterlikeLineInBody() {
198 String originalMessage = "Header Line\n\nCommit body\nBug:1234567\nMore Body\n\nChangeId:"
199 + " I123456789123456789123456789123456789\nBug:1234567\n";
200 String message = formatter.formatWithConflicts(originalMessage,
201 List.of("path1"), '#');
202 assertEquals(
203 "Header Line\n\nCommit body\nBug:1234567\nMore Body\n\n# Conflicts:\n#\tpath1\n\n"
204 + "ChangeId: I123456789123456789123456789123456789\nBug:1234567\n",
205 message);
206 }
207 }