comparison test/org/tmatesoft/hg/test/TestBlame.java @ 573:e49f9d9513fa

Partial blame when start/end revisions are in the middle of a single filename history
author Artem Tikhomirov <tikhomirov.artem@gmail.com>
date Fri, 12 Apr 2013 19:50:21 +0200
parents 36853bb80a35
children 707b5c7c6fa4
comparison
equal deleted inserted replaced
572:becd2a1310a2 573:e49f9d9513fa
16 */ 16 */
17 package org.tmatesoft.hg.test; 17 package org.tmatesoft.hg.test;
18 18
19 import static org.junit.Assert.assertEquals; 19 import static org.junit.Assert.assertEquals;
20 import static org.junit.Assert.assertTrue; 20 import static org.junit.Assert.assertTrue;
21 import static org.tmatesoft.hg.core.HgIterateDirection.NewToOld;
22 import static org.tmatesoft.hg.core.HgIterateDirection.OldToNew;
21 import static org.tmatesoft.hg.repo.HgRepository.NO_REVISION; 23 import static org.tmatesoft.hg.repo.HgRepository.NO_REVISION;
22 import static org.tmatesoft.hg.repo.HgRepository.TIP; 24 import static org.tmatesoft.hg.repo.HgRepository.TIP;
23 25
24 import java.io.ByteArrayOutputStream; 26 import java.io.ByteArrayOutputStream;
25 import java.io.File; 27 import java.io.File;
28 import java.io.IOException;
29 import java.io.OutputStream;
26 import java.io.PrintStream; 30 import java.io.PrintStream;
27 import java.util.ArrayList; 31 import java.util.ArrayList;
28 import java.util.Arrays; 32 import java.util.Arrays;
29 import java.util.LinkedHashSet; 33 import java.util.LinkedHashSet;
30 import java.util.LinkedList; 34 import java.util.LinkedList;
184 } 188 }
185 } 189 }
186 errorCollector.assertTrue(String.format("Annotate API reported excessive diff: %s ", apiResult.toString()), apiResult.isEmpty()); 190 errorCollector.assertTrue(String.format("Annotate API reported excessive diff: %s ", apiResult.toString()), apiResult.isEmpty());
187 } 191 }
188 192
193
194 @Test
195 public void testPartialHistoryFollow() throws Exception {
196 HgRepository repo = Configuration.get().find("test-annotate2");
197 HgDataFile df = repo.getFileNode("file1b.txt");
198 // rev3: file1 -> file1a, rev7: file1a -> file1b, tip: rev10
199 HgBlameFacility bf = new HgBlameFacility(df);
200 DiffOutInspector insp = new DiffOutInspector(new PrintStream(new OutputStream() {
201 @Override
202 public void write(int b) throws IOException {
203 // NULL OutputStream
204 }
205 }));
206 // rev6 changes rev4, rev4 changes rev3. Plus, anything changed
207 // earlier than rev2 shall be reported as new from change3
208 int[] change_2_8_new2old = new int[] {4, 6, 3, 4, -1, 3};
209 int[] change_2_8_old2new = new int[] {-1, 3, 3, 4, 4, 6 };
210 bf.annotate(2, 8, insp, NewToOld);
211 Assert.assertArrayEquals(change_2_8_new2old, insp.getReportedRevisionPairs());
212 insp.reset();
213 bf.annotate(2, 8, insp, OldToNew);
214 Assert.assertArrayEquals(change_2_8_old2new, insp.getReportedRevisionPairs());
215 // same as 2 to 8, with addition of rev9 changes rev7 (rev6 to rev7 didn't change content, only name)
216 int[] change_3_9_new2old = new int[] {7, 9, 4, 6, 3, 4, -1, 3 };
217 int[] change_3_9_old2new = new int[] {-1, 3, 3, 4, 4, 6, 7, 9 };
218 insp.reset();
219 bf.annotate(3, 9, insp, NewToOld);
220 Assert.assertArrayEquals(change_3_9_new2old, insp.getReportedRevisionPairs());
221 insp.reset();
222 bf.annotate(3, 9, insp, OldToNew);
223 Assert.assertArrayEquals(change_3_9_old2new, insp.getReportedRevisionPairs());
224 }
225
189 @Test 226 @Test
190 public void testAnnotateCmdFollowNoFollow() throws Exception { 227 public void testAnnotateCmdFollowNoFollow() throws Exception {
191 HgRepoFacade hgRepoFacade = new HgRepoFacade(); 228 HgRepoFacade hgRepoFacade = new HgRepoFacade();
192 HgRepository repo = Configuration.get().find("test-annotate2"); 229 HgRepository repo = Configuration.get().find("test-annotate2");
193 hgRepoFacade.init(repo); 230 hgRepoFacade.init(repo);
367 x[i++] = v; 404 x[i++] = v;
368 } 405 }
369 return x; 406 return x;
370 } 407 }
371 408
409 int[] getReportedRevisionPairs() {
410 return reportedRevisionPairs.toArray();
411 }
412
413 void reset() {
414 reportedRevisionPairs.clear();
415 }
416
372 public void same(EqualBlock block) { 417 public void same(EqualBlock block) {
373 // nothing 418 // nothing
374 } 419 }
375 420
376 public void deleted(DeleteBlock block) { 421 public void deleted(DeleteBlock block) {