comparison test/org/tmatesoft/hg/test/TestHistory.java @ 691:72fc7774b87e

Fix file.isCopy() for blame/annotate. Refactor status and blame to use newly introduced FileHistory helper that builds file rename history
author Artem Tikhomirov <tikhomirov.artem@gmail.com>
date Fri, 02 Aug 2013 23:07:23 +0200
parents 6526d8adbc0f
children
comparison
equal deleted inserted replaced
690:b286222158be 691:72fc7774b87e
19 import static org.hamcrest.CoreMatchers.equalTo; 19 import static org.hamcrest.CoreMatchers.equalTo;
20 import static org.hamcrest.CoreMatchers.is; 20 import static org.hamcrest.CoreMatchers.is;
21 import static org.junit.Assert.assertEquals; 21 import static org.junit.Assert.assertEquals;
22 import static org.junit.Assert.assertTrue; 22 import static org.junit.Assert.assertTrue;
23 import static org.tmatesoft.hg.core.HgIterateDirection.NewToOld; 23 import static org.tmatesoft.hg.core.HgIterateDirection.NewToOld;
24 import static org.tmatesoft.hg.core.HgIterateDirection.OldToNew;
24 25
25 import java.util.ArrayList; 26 import java.util.ArrayList;
26 import java.util.Collections; 27 import java.util.Collections;
27 import java.util.Comparator; 28 import java.util.Comparator;
28 import java.util.Iterator; 29 import java.util.Iterator;
67 private HgRepository repo; 68 private HgRepository repo;
68 private final ExecHelper eh; 69 private final ExecHelper eh;
69 private LogOutputParser changelogParser; 70 private LogOutputParser changelogParser;
70 71
71 public static void main(String[] args) throws Throwable { 72 public static void main(String[] args) throws Throwable {
72 TestHistory th = new TestHistory(); 73 TestHistory th = new TestHistory(new HgLookup().detectFromWorkingDir());
73 th.testCompleteLog(); 74 th.testCompleteLog();
74 th.testFollowHistory(); 75 th.testFollowHistory();
75 th.errorCollector.verify(); 76 th.errorCollector.verify();
76 // th.testPerformance(); 77 // th.testPerformance();
77 th.testOriginalTestLogRepo(); 78 th.testOriginalTestLogRepo();
79 th.testBranches(); 80 th.testBranches();
80 // 81 //
81 th.errorCollector.verify(); 82 th.errorCollector.verify();
82 } 83 }
83 84
84 public TestHistory() throws Exception { 85 public TestHistory() {
85 this(new HgLookup().detectFromWorkingDir()); 86 eh = new ExecHelper(changelogParser = new LogOutputParser(true), null);
86 // this(new HgLookup().detect("\\temp\\hg\\hello"));
87 } 87 }
88 88
89 private TestHistory(HgRepository hgRepo) { 89 private TestHistory(HgRepository hgRepo) {
90 this();
90 repo = hgRepo; 91 repo = hgRepo;
91 eh = new ExecHelper(changelogParser = new LogOutputParser(true), repo.getWorkingDir()); 92 eh.cwd(repo.getWorkingDir());
92 93 }
93 } 94
94
95 @Test 95 @Test
96 public void testCompleteLog() throws Exception { 96 public void testCompleteLog() throws Exception {
97 if (repo == null) {
98 repo = Configuration.get().own();
99 eh.cwd(repo.getWorkingDir());
100 }
97 changelogParser.reset(); 101 changelogParser.reset();
98 eh.run("hg", "log", "--debug"); 102 eh.run("hg", "log", "--debug");
99 List<HgChangeset> r = new HgLogCommand(repo).execute(); 103 List<HgChangeset> r = new HgLogCommand(repo).execute();
100 report("hg log - COMPLETE REPO HISTORY", r, true); 104 report("hg log - COMPLETE REPO HISTORY", r, true);
101 105
103 report("hg log - COMPLETE REPO HISTORY, FROM NEW TO OLD", r, false); 107 report("hg log - COMPLETE REPO HISTORY, FROM NEW TO OLD", r, false);
104 } 108 }
105 109
106 @Test 110 @Test
107 public void testFollowHistory() throws Exception { 111 public void testFollowHistory() throws Exception {
112 if (repo == null) {
113 repo = Configuration.get().own();
114 eh.cwd(repo.getWorkingDir());
115 }
108 final Path f = Path.create("cmdline/org/tmatesoft/hg/console/Remote.java"); 116 final Path f = Path.create("cmdline/org/tmatesoft/hg/console/Remote.java");
109 assertTrue(repo.getFileNode(f).exists()); 117 assertTrue(repo.getFileNode(f).exists());
110 changelogParser.reset(); 118 changelogParser.reset();
111 eh.run("hg", "log", "--debug", "--follow", f.toString()); 119 eh.run("hg", "log", "--debug", "--follow", f.toString());
112 120
407 errorCollector.assertEquals(1, rh.renames.size()); 415 errorCollector.assertEquals(1, rh.renames.size());
408 assertRename(fname1, fname2, rh.renames.get(0)); 416 assertRename(fname1, fname2, rh.renames.get(0));
409 report("HgChangesetHandler+RenameHandler with followRenames = false, new2old iteration order", h1.getChanges(), false); 417 report("HgChangesetHandler+RenameHandler with followRenames = false, new2old iteration order", h1.getChanges(), false);
410 report("HgChangesetTreeHandler+RenameHandler with followRenames = false, new2old iteration order", h2.getResult(), false); 418 report("HgChangesetTreeHandler+RenameHandler with followRenames = false, new2old iteration order", h2.getResult(), false);
411 } 419 }
420
421 @Test
422 public void testFollowMultipleRenames() throws Exception {
423 repo = Configuration.get().find("log-renames");
424 String fname = "a";
425 eh.run("hg", "log", "--debug", "--follow", fname, "--cwd", repo.getLocation());
426 HgLogCommand cmd = new HgLogCommand(repo);
427 cmd.file(fname, true, true);
428 CollectWithRenameHandler h1;
429 //
430 cmd.order(OldToNew).execute(h1 = new CollectWithRenameHandler());
431 errorCollector.assertEquals(2, h1.rh.renames.size());
432 report("Follow a->c->b, old2new:", h1.getChanges(), true);
433 //
434 cmd.order(NewToOld).execute(h1 = new CollectWithRenameHandler());
435 errorCollector.assertEquals(2, h1.rh.renames.size());
436 report("Follow a->c->b, new2old:", h1.getChanges(), false);
437 //
438 //
439 TreeCollectHandler h2 = new TreeCollectHandler(false);
440 RenameCollector rh = new RenameCollector(h2);
441 cmd.order(OldToNew).execute(h2);
442 errorCollector.assertEquals(2, rh.renames.size());
443 report("Tree. Follow a->c->b, old2new:", h2.getResult(), true);
444 //
445 h2 = new TreeCollectHandler(false);
446 rh = new RenameCollector(h2);
447 cmd.order(NewToOld).execute(h2);
448 errorCollector.assertEquals(2, rh.renames.size());
449 report("Tree. Follow a->c->b, new2old:", h2.getResult(), false);
450 }
412 451
413 private void assertRename(String fnameFrom, String fnameTo, Pair<HgFileRevision, HgFileRevision> rename) { 452 private void assertRename(String fnameFrom, String fnameTo, Pair<HgFileRevision, HgFileRevision> rename) {
414 errorCollector.assertEquals(fnameFrom, rename.first().getPath().toString()); 453 errorCollector.assertEquals(fnameFrom, rename.first().getPath().toString());
415 errorCollector.assertEquals(fnameTo, rename.second().getPath().toString()); 454 errorCollector.assertEquals(fnameTo, rename.second().getPath().toString());
416 } 455 }