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
82
83
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
105
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 }