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