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.

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179
  1. /*
  2. * Copyright (C) 2008, Google Inc. 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.patch;
  11. import static org.junit.Assert.assertEquals;
  12. import static org.junit.Assert.assertSame;
  13. import static org.junit.Assert.assertTrue;
  14. import static org.junit.Assert.fail;
  15. import java.io.IOException;
  16. import java.io.InputStream;
  17. import org.eclipse.jgit.diff.DiffEntry;
  18. import org.eclipse.jgit.junit.JGitTestUtil;
  19. import org.eclipse.jgit.lib.FileMode;
  20. import org.junit.Test;
  21. public class PatchCcTest {
  22. @Test
  23. public void testParse_OneFileCc() throws IOException {
  24. final Patch p = parseTestPatchFile();
  25. assertEquals(1, p.getFiles().size());
  26. assertTrue(p.getErrors().isEmpty());
  27. final CombinedFileHeader cfh = (CombinedFileHeader) p.getFiles().get(0);
  28. assertEquals("org.spearce.egit.ui/src/org/spearce/egit/ui/UIText.java",
  29. cfh.getNewPath());
  30. assertEquals(cfh.getNewPath(), cfh.getOldPath());
  31. assertEquals(98, cfh.startOffset);
  32. assertEquals(2, cfh.getParentCount());
  33. assertSame(cfh.getOldId(0), cfh.getOldId());
  34. assertEquals("169356b", cfh.getOldId(0).name());
  35. assertEquals("dd8c317", cfh.getOldId(1).name());
  36. assertEquals("fd85931", cfh.getNewId().name());
  37. assertSame(cfh.getOldMode(0), cfh.getOldMode());
  38. assertSame(FileMode.REGULAR_FILE, cfh.getOldMode(0));
  39. assertSame(FileMode.REGULAR_FILE, cfh.getOldMode(1));
  40. assertSame(FileMode.EXECUTABLE_FILE, cfh.getNewMode());
  41. assertSame(FileHeader.ChangeType.MODIFY, cfh.getChangeType());
  42. assertSame(FileHeader.PatchType.UNIFIED, cfh.getPatchType());
  43. assertEquals(1, cfh.getHunks().size());
  44. {
  45. final CombinedHunkHeader h = cfh.getHunks().get(0);
  46. assertSame(cfh, h.getFileHeader());
  47. assertEquals(346, h.startOffset);
  48. assertEquals(764, h.endOffset);
  49. assertSame(h.getOldImage(0), h.getOldImage());
  50. assertSame(cfh.getOldId(0), h.getOldImage(0).getId());
  51. assertSame(cfh.getOldId(1), h.getOldImage(1).getId());
  52. assertEquals(55, h.getOldImage(0).getStartLine());
  53. assertEquals(12, h.getOldImage(0).getLineCount());
  54. assertEquals(3, h.getOldImage(0).getLinesAdded());
  55. assertEquals(0, h.getOldImage(0).getLinesDeleted());
  56. assertEquals(163, h.getOldImage(1).getStartLine());
  57. assertEquals(13, h.getOldImage(1).getLineCount());
  58. assertEquals(2, h.getOldImage(1).getLinesAdded());
  59. assertEquals(0, h.getOldImage(1).getLinesDeleted());
  60. assertEquals(163, h.getNewStartLine());
  61. assertEquals(15, h.getNewLineCount());
  62. assertEquals(10, h.getLinesContext());
  63. }
  64. }
  65. @Test
  66. public void testParse_CcNewFile() throws IOException {
  67. final Patch p = parseTestPatchFile();
  68. assertEquals(1, p.getFiles().size());
  69. assertTrue(p.getErrors().isEmpty());
  70. final CombinedFileHeader cfh = (CombinedFileHeader) p.getFiles().get(0);
  71. assertSame(DiffEntry.DEV_NULL, cfh.getOldPath());
  72. assertEquals("d", cfh.getNewPath());
  73. assertEquals(187, cfh.startOffset);
  74. assertEquals(2, cfh.getParentCount());
  75. assertSame(cfh.getOldId(0), cfh.getOldId());
  76. assertEquals("0000000", cfh.getOldId(0).name());
  77. assertEquals("0000000", cfh.getOldId(1).name());
  78. assertEquals("4bcfe98", cfh.getNewId().name());
  79. assertSame(cfh.getOldMode(0), cfh.getOldMode());
  80. assertSame(FileMode.MISSING, cfh.getOldMode(0));
  81. assertSame(FileMode.MISSING, cfh.getOldMode(1));
  82. assertSame(FileMode.REGULAR_FILE, cfh.getNewMode());
  83. assertSame(FileHeader.ChangeType.ADD, cfh.getChangeType());
  84. assertSame(FileHeader.PatchType.UNIFIED, cfh.getPatchType());
  85. assertEquals(1, cfh.getHunks().size());
  86. {
  87. final CombinedHunkHeader h = cfh.getHunks().get(0);
  88. assertSame(cfh, h.getFileHeader());
  89. assertEquals(273, h.startOffset);
  90. assertEquals(300, h.endOffset);
  91. assertSame(h.getOldImage(0), h.getOldImage());
  92. assertSame(cfh.getOldId(0), h.getOldImage(0).getId());
  93. assertSame(cfh.getOldId(1), h.getOldImage(1).getId());
  94. assertEquals(1, h.getOldImage(0).getStartLine());
  95. assertEquals(0, h.getOldImage(0).getLineCount());
  96. assertEquals(1, h.getOldImage(0).getLinesAdded());
  97. assertEquals(0, h.getOldImage(0).getLinesDeleted());
  98. assertEquals(1, h.getOldImage(1).getStartLine());
  99. assertEquals(0, h.getOldImage(1).getLineCount());
  100. assertEquals(1, h.getOldImage(1).getLinesAdded());
  101. assertEquals(0, h.getOldImage(1).getLinesDeleted());
  102. assertEquals(1, h.getNewStartLine());
  103. assertEquals(1, h.getNewLineCount());
  104. assertEquals(0, h.getLinesContext());
  105. }
  106. }
  107. @Test
  108. public void testParse_CcDeleteFile() throws IOException {
  109. final Patch p = parseTestPatchFile();
  110. assertEquals(1, p.getFiles().size());
  111. assertTrue(p.getErrors().isEmpty());
  112. final CombinedFileHeader cfh = (CombinedFileHeader) p.getFiles().get(0);
  113. assertEquals("a", cfh.getOldPath());
  114. assertSame(DiffEntry.DEV_NULL, cfh.getNewPath());
  115. assertEquals(187, cfh.startOffset);
  116. assertEquals(2, cfh.getParentCount());
  117. assertSame(cfh.getOldId(0), cfh.getOldId());
  118. assertEquals("7898192", cfh.getOldId(0).name());
  119. assertEquals("2e65efe", cfh.getOldId(1).name());
  120. assertEquals("0000000", cfh.getNewId().name());
  121. assertSame(cfh.getOldMode(0), cfh.getOldMode());
  122. assertSame(FileMode.REGULAR_FILE, cfh.getOldMode(0));
  123. assertSame(FileMode.REGULAR_FILE, cfh.getOldMode(1));
  124. assertSame(FileMode.MISSING, cfh.getNewMode());
  125. assertSame(FileHeader.ChangeType.DELETE, cfh.getChangeType());
  126. assertSame(FileHeader.PatchType.UNIFIED, cfh.getPatchType());
  127. assertTrue(cfh.getHunks().isEmpty());
  128. }
  129. private Patch parseTestPatchFile() throws IOException {
  130. final String patchFile = JGitTestUtil.getName() + ".patch";
  131. try (InputStream in = getClass().getResourceAsStream(patchFile)) {
  132. if (in == null) {
  133. fail("No " + patchFile + " test vector");
  134. return null; // Never happens
  135. }
  136. final Patch p = new Patch();
  137. p.parse(in);
  138. return p;
  139. }
  140. }
  141. }