You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

MergeMessageFormatterTest.java 6.7KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197
  1. /*
  2. * Copyright (C) 2010, Robin Stocker <robin@nibor.org> and others
  3. *
  4. * This program and the accompanying materials are made available under the
  5. * terms of the Eclipse Distribution License v. 1.0 which is available at
  6. * https://www.eclipse.org/org/documents/edl-v10.php.
  7. *
  8. * SPDX-License-Identifier: BSD-3-Clause
  9. */
  10. package org.eclipse.jgit.merge;
  11. import static org.junit.Assert.assertEquals;
  12. import java.io.IOException;
  13. import java.util.Arrays;
  14. import org.eclipse.jgit.lib.ObjectId;
  15. import org.eclipse.jgit.lib.ObjectIdRef;
  16. import org.eclipse.jgit.lib.Ref;
  17. import org.eclipse.jgit.lib.Ref.Storage;
  18. import org.eclipse.jgit.lib.RefUpdate;
  19. import org.eclipse.jgit.lib.SymbolicRef;
  20. import org.eclipse.jgit.test.resources.SampleDataRepositoryTestCase;
  21. import org.junit.Before;
  22. import org.junit.Test;
  23. /**
  24. * Test construction of merge message by {@link MergeMessageFormatter}.
  25. */
  26. public class MergeMessageFormatterTest extends SampleDataRepositoryTestCase {
  27. private MergeMessageFormatter formatter;
  28. @Override
  29. @Before
  30. public void setUp() throws Exception {
  31. super.setUp();
  32. RefUpdate createRemoteRefA = db
  33. .updateRef("refs/remotes/origin/remote-a");
  34. createRemoteRefA.setNewObjectId(db.resolve("refs/heads/a"));
  35. createRemoteRefA.update();
  36. RefUpdate createRemoteRefB = db
  37. .updateRef("refs/remotes/origin/remote-b");
  38. createRemoteRefB.setNewObjectId(db.resolve("refs/heads/b"));
  39. createRemoteRefB.update();
  40. formatter = new MergeMessageFormatter();
  41. }
  42. @Test
  43. public void testOneBranch() throws IOException {
  44. Ref a = db.exactRef("refs/heads/a");
  45. Ref master = db.exactRef("refs/heads/master");
  46. String message = formatter.format(Arrays.asList(a), master);
  47. assertEquals("Merge branch 'a'", message);
  48. }
  49. @Test
  50. public void testTwoBranches() throws IOException {
  51. Ref a = db.exactRef("refs/heads/a");
  52. Ref b = db.exactRef("refs/heads/b");
  53. Ref master = db.exactRef("refs/heads/master");
  54. String message = formatter.format(Arrays.asList(a, b), master);
  55. assertEquals("Merge branches 'a' and 'b'", message);
  56. }
  57. @Test
  58. public void testThreeBranches() throws IOException {
  59. Ref c = db.exactRef("refs/heads/c");
  60. Ref b = db.exactRef("refs/heads/b");
  61. Ref a = db.exactRef("refs/heads/a");
  62. Ref master = db.exactRef("refs/heads/master");
  63. String message = formatter.format(Arrays.asList(c, b, a), master);
  64. assertEquals("Merge branches 'c', 'b' and 'a'", message);
  65. }
  66. @Test
  67. public void testRemoteBranch() throws Exception {
  68. Ref remoteA = db.exactRef("refs/remotes/origin/remote-a");
  69. Ref master = db.exactRef("refs/heads/master");
  70. String message = formatter.format(Arrays.asList(remoteA), master);
  71. assertEquals("Merge remote-tracking branch 'origin/remote-a'", message);
  72. }
  73. @Test
  74. public void testMixed() throws IOException {
  75. Ref c = db.exactRef("refs/heads/c");
  76. Ref remoteA = db.exactRef("refs/remotes/origin/remote-a");
  77. Ref master = db.exactRef("refs/heads/master");
  78. String message = formatter.format(Arrays.asList(c, remoteA), master);
  79. assertEquals("Merge branch 'c', remote-tracking branch 'origin/remote-a'",
  80. message);
  81. }
  82. @Test
  83. public void testTag() throws IOException {
  84. Ref tagA = db.exactRef("refs/tags/A");
  85. Ref master = db.exactRef("refs/heads/master");
  86. String message = formatter.format(Arrays.asList(tagA), master);
  87. assertEquals("Merge tag 'A'", message);
  88. }
  89. @Test
  90. public void testCommit() throws IOException {
  91. ObjectId objectId = ObjectId
  92. .fromString("6db9c2ebf75590eef973081736730a9ea169a0c4");
  93. Ref commit = new ObjectIdRef.Unpeeled(Storage.LOOSE,
  94. objectId.getName(), objectId);
  95. Ref master = db.exactRef("refs/heads/master");
  96. String message = formatter.format(Arrays.asList(commit), master);
  97. assertEquals("Merge commit '6db9c2ebf75590eef973081736730a9ea169a0c4'",
  98. message);
  99. }
  100. @Test
  101. public void testPullWithUri() throws IOException {
  102. String name = "branch 'test' of http://egit.eclipse.org/jgit.git";
  103. ObjectId objectId = ObjectId
  104. .fromString("6db9c2ebf75590eef973081736730a9ea169a0c4");
  105. Ref remoteBranch = new ObjectIdRef.Unpeeled(Storage.LOOSE, name,
  106. objectId);
  107. Ref master = db.exactRef("refs/heads/master");
  108. String message = formatter.format(Arrays.asList(remoteBranch), master);
  109. assertEquals("Merge branch 'test' of http://egit.eclipse.org/jgit.git",
  110. message);
  111. }
  112. @Test
  113. public void testIntoOtherThanMaster() throws IOException {
  114. Ref a = db.exactRef("refs/heads/a");
  115. Ref b = db.exactRef("refs/heads/b");
  116. String message = formatter.format(Arrays.asList(a), b);
  117. assertEquals("Merge branch 'a' into b", message);
  118. }
  119. @Test
  120. public void testIntoHeadOtherThanMaster() throws IOException {
  121. Ref a = db.exactRef("refs/heads/a");
  122. Ref b = db.exactRef("refs/heads/b");
  123. SymbolicRef head = new SymbolicRef("HEAD", b);
  124. String message = formatter.format(Arrays.asList(a), head);
  125. assertEquals("Merge branch 'a' into b", message);
  126. }
  127. @Test
  128. public void testIntoSymbolicRefHeadPointingToMaster() throws IOException {
  129. Ref a = db.exactRef("refs/heads/a");
  130. Ref master = db.exactRef("refs/heads/master");
  131. SymbolicRef head = new SymbolicRef("HEAD", master);
  132. String message = formatter.format(Arrays.asList(a), head);
  133. assertEquals("Merge branch 'a'", message);
  134. }
  135. @Test
  136. public void testFormatWithConflictsNoFooter() {
  137. String originalMessage = "Header Line\n\nCommit body\n";
  138. String message = formatter.formatWithConflicts(originalMessage,
  139. Arrays.asList(new String[] { "path1" }));
  140. assertEquals("Header Line\n\nCommit body\n\nConflicts:\n\tpath1\n",
  141. message);
  142. }
  143. @Test
  144. public void testFormatWithConflictsNoFooterNoLineBreak() {
  145. String originalMessage = "Header Line\n\nCommit body";
  146. String message = formatter.formatWithConflicts(originalMessage,
  147. Arrays.asList(new String[] { "path1" }));
  148. assertEquals("Header Line\n\nCommit body\n\nConflicts:\n\tpath1\n",
  149. message);
  150. }
  151. @Test
  152. public void testFormatWithConflictsWithFooters() {
  153. String originalMessage = "Header Line\n\nCommit body\n\nChangeId:"
  154. + " I123456789123456789123456789123456789\nBug:1234567\n";
  155. String message = formatter.formatWithConflicts(originalMessage,
  156. Arrays.asList(new String[] { "path1" }));
  157. assertEquals(
  158. "Header Line\n\nCommit body\n\nConflicts:\n\tpath1\n\n"
  159. + "ChangeId: I123456789123456789123456789123456789\nBug:1234567\n",
  160. message);
  161. }
  162. @Test
  163. public void testFormatWithConflictsWithFooterlikeLineInBody() {
  164. String originalMessage = "Header Line\n\nCommit body\nBug:1234567\nMore Body\n\nChangeId:"
  165. + " I123456789123456789123456789123456789\nBug:1234567\n";
  166. String message = formatter.formatWithConflicts(originalMessage,
  167. Arrays.asList(new String[] { "path1" }));
  168. assertEquals(
  169. "Header Line\n\nCommit body\nBug:1234567\nMore Body\n\nConflicts:\n\tpath1\n\n"
  170. + "ChangeId: I123456789123456789123456789123456789\nBug:1234567\n",
  171. message);
  172. }
  173. }