1 package com.aragost.javahg.commands;
2
3 import org.junit.Assert;
4 import org.junit.Test;
5
6 import com.aragost.javahg.Changeset;
7 import com.aragost.javahg.Repository;
8 import com.aragost.javahg.merge.BackoutConflictResolvingContext;
9 import com.aragost.javahg.test.AbstractTestCase;
10
11 public class BackoutCommandTest extends AbstractTestCase {
12
13 @Test
14 public void testBackoutMerge() throws Exception {
15
16 Repository repo = getTestRepository();
17 CommitCommand commitCmd = CommitCommand.on(repo).message("m")
18 .user("user");
19
20 writeFile("a", "boo");
21 writeFile("b", "bar");
22 AddCommand.on(repo).execute();
23 commitCmd.execute();
24
25 writeFile("b", "booo");
26 Changeset backoutCs = commitCmd.execute();
27
28 writeFile("a", "foo");
29 Changeset curCs = commitCmd.execute();
30
31 BackoutCommand.on(repo).rev(backoutCs.getNode()).merge()
32 .message("BackoutMerge").user("user").execute();
33
34 Assert.assertEquals(curCs, repo.workingCopy().getParent1());
35 Assert.assertEquals(backoutCs, repo.workingCopy().getParent2()
36 .getParent1());
37
38 commitCmd.execute();
39
40 Assert.assertEquals("bar", readFile("b"));
41 Assert.assertEquals(5, LogCommand.on(repo).execute().size());
42 }
43
44 @Test
45 public void testBackoutUpdate() throws Exception {
46
47 Repository repo = getTestRepository();
48 CommitCommand commitCmd = CommitCommand.on(repo).message("m")
49 .user("user");
50
51 writeFile("a", "boo");
52 writeFile("b", "bar");
53 AddCommand.on(repo).execute();
54 commitCmd.execute();
55
56 writeFile("b", "booo");
57
58 Changeset backoutCs = commitCmd.execute();
59
60 writeFile("a", "foo");
61 Changeset curCs = commitCmd.execute();
62
63 BackoutCommand.on(repo).rev(backoutCs.getNode())
64 .message("BackoutMerge").user("user").execute();
65
66 Assert.assertEquals(curCs, repo.workingCopy().getParent1());
67 Assert.assertNull(repo.workingCopy().getParent2());
68
69 commitCmd.execute();
70 Assert.assertEquals("bar", readFile("b"));
71 Assert.assertEquals(4, LogCommand.on(repo).execute().size());
72 }
73
74 @Test
75 public void testBackoutMergeConflict() throws Exception {
76
77 Repository repo = getTestRepository();
78 CommitCommand commitCmd = CommitCommand.on(repo).message("m")
79 .user("user");
80
81 writeFile("a", "boo");
82 writeFile("b", "boo");
83 AddCommand.on(repo).execute();
84 commitCmd.execute();
85
86 writeFile("a", "bar");
87 writeFile("b", "bar");
88 Changeset backoutCs = commitCmd.execute();
89
90 writeFile("a", "foo");
91 writeFile("b", "foo");
92 commitCmd.execute();
93
94 BackoutCommand command = BackoutCommand.on(repo)
95 .rev(backoutCs.getNode()).merge().message("BackoutMerge")
96 .user("user");
97 BackoutConflictResolvingContext ctx;
98
99 ctx = command.execute();
100
101 Assert.assertEquals(2, ctx.getMergeConflicts().size());
102 }
103
104 @Test
105 public void testBackoutUpdateConflict() throws Exception {
106
107 Repository repo = getTestRepository();
108 CommitCommand commitCmd = CommitCommand.on(repo).message("m")
109 .user("user");
110
111 writeFile("a", "boo");
112 writeFile("b", "boo");
113 AddCommand.on(repo).execute();
114 commitCmd.execute();
115
116 writeFile("a", "bar");
117 writeFile("b", "bar");
118 Changeset backoutCs = commitCmd.execute();
119
120 writeFile("a", "foo");
121 writeFile("b", "foo");
122 commitCmd.execute();
123
124 BackoutCommand command = BackoutCommand.on(repo)
125 .rev(backoutCs.getNode()).message("BackoutMerge").user("user");
126 BackoutConflictResolvingContext ctx;
127
128 ctx = command.execute();
129
130 Assert.assertEquals(2, ctx.getMergeConflicts().size());
131 }
132
133 @Test
134 public void testBackoutTipMerge() throws Exception {
135
136 Repository repo = getTestRepository();
137 CommitCommand commitCmd = CommitCommand.on(repo).message("m")
138 .user("user");
139
140 writeFile("a", "boo");
141 writeFile("b", "bar");
142 AddCommand.on(repo).execute();
143 commitCmd.execute();
144
145 writeFile("b", "booo");
146 Changeset backoutCs = commitCmd.execute();
147
148 BackoutCommand.on(repo).rev(backoutCs.getNode()).merge()
149 .message("BackoutMerge").user("user").execute();
150
151 Assert.assertEquals(backoutCs, repo.workingCopy().getParent1().getParent1());
152 Assert.assertEquals(null, repo.workingCopy().getParent2());
153 Assert.assertEquals(null, repo.workingCopy().getParent1().getParent2());
154
155 Assert.assertEquals("bar", readFile("b"));
156 Assert.assertEquals(3, LogCommand.on(repo).execute().size());
157 }
158
159 @Test
160 public void testBackoutTipUpdate() throws Exception {
161
162 Repository repo = getTestRepository();
163 CommitCommand commitCmd = CommitCommand.on(repo).message("m")
164 .user("user");
165
166 writeFile("a", "boo");
167 writeFile("b", "bar");
168 AddCommand.on(repo).execute();
169 commitCmd.execute();
170
171 writeFile("b", "booo");
172 Changeset backoutCs = commitCmd.execute();
173
174 BackoutCommand.on(repo).rev(backoutCs.getNode())
175 .message("BackoutMerge").user("user").execute();
176
177 Assert.assertEquals(backoutCs, repo.workingCopy().getParent1().getParent1());
178 Assert.assertEquals(null, repo.workingCopy().getParent2());
179 Assert.assertEquals(null, repo.workingCopy().getParent1().getParent2());
180
181 commitCmd.execute();
182
183 Assert.assertEquals("bar", readFile("b"));
184 Assert.assertEquals(3, LogCommand.on(repo).execute().size());
185 }
186 }