View Javadoc

1   package com.aragost.javahg.commands;
2   
3   import java.io.IOException;
4   import java.util.List;
5   
6   import org.junit.Assert;
7   import org.junit.Assume;
8   import org.junit.Test;
9   
10  import com.aragost.javahg.BaseRepository;
11  import com.aragost.javahg.Changeset;
12  import com.aragost.javahg.UnknownCommandException;
13  import com.aragost.javahg.internals.Utils;
14  import com.aragost.javahg.merge.ConflictResolvingContext;
15  import com.aragost.javahg.merge.GraftContext;
16  import com.aragost.javahg.merge.KeepDeleteConflict;
17  import com.aragost.javahg.merge.MergeConflict;
18  import com.aragost.javahg.test.AbstractTestCase;
19  
20  public class GraftCommandTest extends AbstractTestCase {
21  
22      private boolean isGraftSupported() {
23          BaseRepository repo = getTestRepository();
24          try {
25              PhaseCommand.on(repo).rev(Changeset.NULL_ID).execute();
26              return true;
27          } catch (UnknownCommandException e) {
28              return false;
29          }
30      }
31  
32      @Test
33      public void testGraftSelf() throws IOException {
34          Assume.assumeTrue(isGraftSupported());
35          BaseRepository repo = getTestRepository();
36          Changeset cs = createChangeset();
37          GraftCommand.on(repo).execute(cs);
38          List<Changeset> heads = repo.heads();
39          assertSingleton(cs, heads);
40      }
41  
42      @Test
43      public void test() throws IOException {
44          Assume.assumeTrue(isGraftSupported());
45          BaseRepository repo = getTestRepository();
46          Changeset base = createChangeset();
47          writeFile("a");
48          Changeset cs = commit();
49          update(base);
50          writeFile("b");
51          commit();
52          ConflictResolvingContext r = GraftCommand.on(repo).execute(cs);
53          Assert.assertNull(r);
54          Changeset tip = repo.tip();
55          String source = tip.getExtra().getString("source");
56          Assert.assertEquals(cs.getNode(), source);
57      }
58  
59      @Test
60      public void testKeepDeleteConflict() throws IOException {
61          Assume.assumeTrue(isGraftSupported());
62          BaseRepository repo = getTestRepository();
63          writeFile("file", "");
64          Changeset base = commit();
65          writeFile("file", "X");
66          Changeset changed = commit();
67          update(base);
68          RemoveCommand.on(repo).execute("file");
69          Changeset removed = commit();
70  
71          GraftContext ctx = GraftCommand.on(repo).execute(changed);
72          Assert.assertNotNull(ctx);
73          Assert.assertTrue(ctx.getFlagConflicts().isEmpty());
74          Assert.assertTrue(ctx.getMergeConflicts().isEmpty());
75          KeepDeleteConflict kdc = Utils.single(ctx.getKeepDeleteConflicts());
76          Assert.assertNotNull(kdc);
77          Assert.assertSame(removed, repo.tip());
78          Assert.assertEquals("file", kdc.getFilename());
79          Assert.assertSame(changed, ctx.getSource());
80          kdc.delete();
81          // TODO commiting results in an error, see issue 3261
82          // Changeset cs = ctx.commit();
83          // Assert.assertNotNull(cs);
84      }
85  
86      @Test
87      public void testMergeConflict() throws IOException {
88          Assume.assumeTrue(isGraftSupported());
89          BaseRepository repo = getTestRepository();
90          writeFile("file", "");
91          Changeset base = commit();
92          writeFile("file", "X");
93          Changeset changed1 = commit();
94          update(base);
95          writeFile("file", "Y");
96          commit();
97  
98          GraftContext ctx = GraftCommand.on(repo).execute(changed1);
99          Assert.assertNotNull(ctx);
100         Assert.assertTrue(ctx.getFlagConflicts().isEmpty());
101         Assert.assertTrue(ctx.getKeepDeleteConflicts().isEmpty());
102         MergeConflict mergeConflict = Utils.single(ctx.getMergeConflicts());
103         Assert.assertNotNull(mergeConflict);
104         // Mercurial 2.2 will skip empty commits, so we must resolve
105         // with new content.
106         writeFile("file", "XY");
107         mergeConflict.markResolved();
108         Changeset cs = ctx.commit();
109         Assert.assertNotNull(cs);
110         Assert.assertEquals(changed1.getNode(), cs.getExtra().getString("source"));
111     }
112 
113 }