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