Mercurial > hg4j
diff test/org/tmatesoft/hg/test/TestBlame.java @ 625:b4948b159ab1
Refactor internals of blame support, tests
author | Artem Tikhomirov <tikhomirov.artem@gmail.com> |
---|---|
date | Tue, 21 May 2013 17:24:22 +0200 |
parents | 507602cb4fb3 |
children | 6526d8adbc0f |
line wrap: on
line diff
--- a/test/org/tmatesoft/hg/test/TestBlame.java Mon May 20 20:34:33 2013 +0200 +++ b/test/org/tmatesoft/hg/test/TestBlame.java Tue May 21 17:24:22 2013 +0200 @@ -45,12 +45,14 @@ import org.tmatesoft.hg.core.HgCallbackTargetException; import org.tmatesoft.hg.core.HgIterateDirection; import org.tmatesoft.hg.core.HgRepoFacade; +import org.tmatesoft.hg.core.Nodeid; import org.tmatesoft.hg.internal.FileAnnotation; import org.tmatesoft.hg.internal.FileAnnotation.LineDescriptor; import org.tmatesoft.hg.internal.FileAnnotation.LineInspector; import org.tmatesoft.hg.internal.IntVector; import org.tmatesoft.hg.repo.HgBlameInspector; import org.tmatesoft.hg.repo.HgBlameInspector.BlockData; +import org.tmatesoft.hg.repo.HgChangelog; import org.tmatesoft.hg.repo.HgDataFile; import org.tmatesoft.hg.repo.HgLookup; import org.tmatesoft.hg.repo.HgRepository; @@ -71,7 +73,7 @@ public void testSingleParentBlame() throws Exception { HgRepository repo = new HgLookup().detectFromWorkingDir(); final String fname = "src/org/tmatesoft/hg/internal/PatchGenerator.java"; - final int checkChangeset = 539; + final int checkChangeset = repo.getChangelog().getRevisionIndex(Nodeid.fromAscii("946b131962521f9199e1fedbdc2487d3aaef5e46")); // 539 HgDataFile df = repo.getFileNode(fname); ByteArrayOutputStream bos = new ByteArrayOutputStream(); df.annotateSingleRevision(checkChangeset, new DiffOutInspector(new PrintStream(bos))); @@ -91,7 +93,12 @@ HgDataFile df = repo.getFileNode(fname); AnnotateRunner ar = new AnnotateRunner(df.getPath(), null); - for (int cs : new int[] { 539, 541 /*, TIP */}) { + final HgChangelog clog = repo.getChangelog(); + final int[] toTest = new int[] { + clog.getRevisionIndex(Nodeid.fromAscii("946b131962521f9199e1fedbdc2487d3aaef5e46")), // 539 + clog.getRevisionIndex(Nodeid.fromAscii("1e95f48d9886abe79b9711ab371bc877ca5e773e")), // 541 + /*, TIP */}; + for (int cs : toTest) { ar.run(cs, false); FileAnnotateInspector fa = new FileAnnotateInspector(); FileAnnotation.annotate(df, cs, fa); @@ -254,6 +261,45 @@ errorCollector.assertEquals(hgAnnotateLine.trim(), apiLine); } } + + + @Test + public void testDiffTwoRevisions() throws Exception { + HgRepository repo = Configuration.get().find("test-annotate"); + HgDataFile df = repo.getFileNode("file1"); + LineGrepOutputParser gp = new LineGrepOutputParser("^@@.+"); + ExecHelper eh = new ExecHelper(gp, repo.getWorkingDir()); + int[] toTest = { 3, 4, 5 }; // p1 ancestry line, p2 ancestry line, not in ancestry line + for (int cs : toTest) { + ByteArrayOutputStream bos = new ByteArrayOutputStream(); + df.diff(cs, 8, new DiffOutInspector(new PrintStream(bos))); + eh.run("hg", "diff", "-r", String.valueOf(cs), "-r", "8", "-U", "0", df.getPath().toString()); + // + String[] apiResult = splitLines(bos.toString()); + String[] expected = splitLines(gp.result()); + Assert.assertArrayEquals(expected, apiResult); + gp.reset(); + } + } + + /** + * Make sure boundary values are ok (down to BlameHelper#prepare and FileHistory) + */ + @Test + public void testAnnotateFirstFileRev() throws Exception { + HgRepository repo = Configuration.get().find("test-annotate"); + HgDataFile df = repo.getFileNode("file1"); + LineGrepOutputParser gp = new LineGrepOutputParser("^@@.+"); + ExecHelper eh = new ExecHelper(gp, repo.getWorkingDir()); + eh.run("hg", "diff", "-c", "0", "-U", "0", df.getPath().toString()); + // + ByteArrayOutputStream bos = new ByteArrayOutputStream(); + df.annotateSingleRevision(0, new DiffOutInspector(new PrintStream(bos))); + // + String[] apiResult = splitLines(bos.toString()); + String[] expected = splitLines(gp.result()); + Assert.assertArrayEquals(expected, apiResult); + } // TODO HgWorkingCopyStatusCollector (and HgStatusCollector), with their ancestors (rev 59/69) have examples // of *incorrect* assignment of common lines (like "}") - our impl doesn't process common lines in any special way @@ -285,47 +331,6 @@ } - private void aaa() throws Exception { - HgRepository repo = new HgLookup().detectFromWorkingDir(); - final String fname = "src/org/tmatesoft/hg/internal/PatchGenerator.java"; - final int checkChangeset = 539; - HgDataFile df = repo.getFileNode(fname); - DiffOutInspector dump = new DiffOutInspector(System.out); - System.out.println("541 -> 543"); - df.annotateSingleRevision(543, dump); - System.out.println("539 -> 541"); - df.annotateSingleRevision(541, dump); - System.out.println("536 -> 539"); - df.annotateSingleRevision(checkChangeset, dump); - System.out.println("531 -> 536"); - df.annotateSingleRevision(536, dump); - System.out.println(" -1 -> 531"); - df.annotateSingleRevision(531, dump); - - FileAnnotateInspector fai = new FileAnnotateInspector(); - FileAnnotation.annotate(df, 541, fai); - for (int i = 0; i < fai.lineRevisions.length; i++) { - System.out.printf("%3d: LINE %d\n", fai.lineRevisions[i], i+1); - } - } - - private void bbb() throws Exception { - HgRepository repo = new HgLookup().detectFromWorkingDir(); - final String fname = "src/org/tmatesoft/hg/repo/HgManifest.java"; - final int checkChangeset = 415; - HgDataFile df = repo.getFileNode(fname); - DiffOutInspector dump = new DiffOutInspector(System.out); -// System.out.println("413 -> 415"); -// af.diff(df, 413, 415, dump); -// System.out.println("408 -> 415"); -// af.diff(df, 408, 415, dump); -// System.out.println("Combined (with merge):"); -// dump.needRevisions(true); -// af.annotateChange(df, checkChangeset, dump); - dump.needRevisions(true); - df.annotate(checkChangeset, dump, HgIterateDirection.OldToNew); - } - private void ccc() throws Throwable { HgRepository repo = new HgLookup().detect("/home/artem/hg/hgtest-annotate-merge/"); HgDataFile df = repo.getFileNode("file.txt"); @@ -354,10 +359,6 @@ } public static void main(String[] args) throws Throwable { -// System.out.println(Arrays.equals(new String[0], splitLines(""))); -// System.out.println(Arrays.equals(new String[] { "abc" }, splitLines("abc"))); -// System.out.println(Arrays.equals(new String[] { "a", "bc" }, splitLines("a\nbc"))); -// System.out.println(Arrays.equals(new String[] { "a", "bc" }, splitLines("a\nbc\n"))); TestBlame tt = new TestBlame(); tt.ccc(); }