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 }