Merge branch 'master' of git.labs.intellij.net:idea/community
[idea/community.git] / plugins / hg4idea / testSrc / org / zmlx / hg4idea / test / HgDeleteTestCase.java
1 // Copyright 2008-2010 Victor Iacoban
2 //
3 // Licensed under the Apache License, Version 2.0 (the "License");
4 // you may not use this file except in compliance with the License.
5 // You may obtain a copy of the License at
6 //
7 // http://www.apache.org/licenses/LICENSE-2.0
8 //
9 // Unless required by applicable law or agreed to in writing, software distributed under
10 // the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
11 // either express or implied. See the License for the specific language governing permissions and
12 // limitations under the License.
13 package org.zmlx.hg4idea.test;
14
15 import com.intellij.openapi.vcs.VcsConfiguration;
16 import com.intellij.openapi.vfs.VirtualFile;
17 import org.testng.Assert;
18 import org.testng.annotations.Test;
19
20 import java.io.File;
21
22 import static org.testng.Assert.fail;
23
24 public class HgDeleteTestCase extends HgSingleUserTestCase {
25
26   @Test
27   public void testDeleteUnmodifiedFile() throws Exception {
28     VirtualFile file = createFileInCommand("a.txt", "new file content");
29     runHgOnProjectRepo("commit", "-m", "added file");
30     deleteFileInCommand(file);
31     verify(runHgOnProjectRepo("status"), HgTestOutputParser.removed("a.txt"));
32   }
33
34   @Test
35   public void testDeleteUnversionedFile() throws Exception {
36     VirtualFile file = makeFile(new File(myWorkingCopyDir.getPath(), "a.txt"));
37     verify(runHgOnProjectRepo("status"), HgTestOutputParser.unknown("a.txt"));
38     deleteFileInCommand(file);
39     Assert.assertFalse(file.exists());
40   }
41
42   @Test
43   public void testDeleteNewFile() throws Exception {
44     VirtualFile file = createFileInCommand("a.txt", "new file content");
45     deleteFileInCommand(file);
46     Assert.assertFalse(file.exists());
47   }
48
49   @Test
50   public void testDeleteModifiedFile() throws Exception {
51     VirtualFile file = createFileInCommand("a.txt", "new file content");
52     runHgOnProjectRepo("commit", "-m", "added file");
53     editFileInCommand(myProject, file, "even newer content");
54     verify(runHgOnProjectRepo("status"), HgTestOutputParser.modified("a.txt"));
55     deleteFileInCommand(file);
56     verify(runHgOnProjectRepo("status"), HgTestOutputParser.removed("a.txt"));
57   }
58
59   @Test
60   public void testDeleteDirWithFiles() throws Exception {
61     VirtualFile parent = createDirInCommand(myWorkingCopyDir, "com");
62     createFileInCommand(parent, "a.txt", "new file content");
63     runHgOnProjectRepo("commit", "-m", "added file");
64     deleteFileInCommand(parent);
65     verify(runHgOnProjectRepo("status"), HgTestOutputParser.removed("com", "a.txt"));
66   }
67
68   /**
69    * When deleting a file which was newly added to repository, this file shouldn't be prompted for removal from the repository.
70    * 1. Create a file and add it to the repository.
71    * 2. Remove the file from disk.
72    * 3. File shouldn't be prompted for removal from repository.
73    */
74   @Test
75   public void testNewlyAddedFileShouldNotBePromptedForRemoval() throws Exception {
76     showConfirmation(VcsConfiguration.StandardConfirmation.REMOVE);
77     final VirtualFile vf = createFileInCommand("a.txt", null);
78     final HgMockVcsHelper helper = registerMockVcsHelper();
79     helper.addListener(new VcsHelperListener() {
80       @Override
81       public void dialogInvoked() {
82         fail("No dialog should be invoked, because newly added file should be silently removed from the repository");
83       }
84     });
85     deleteFileInCommand(vf);
86   }
87
88   /**
89    * A file is also considered to be newly added, if it has a history, but the last action was removal of that file.
90    * 1. Create a file, add it to the repository and commit.
91    * 2. Delete the file and commit it.
92    * 3. Create the file again and add it to the repository.
93    * 4. Delete the file.
94    * 5. File shouldn't be prompted for removal from repository.
95    */
96   @Test
97   public void testJustDeletedAndThenAddedFileShouldNotBePromptedForRemoval() throws Exception {
98     VirtualFile vf = createFileInCommand("a.txt", null);
99     myChangeListManager.commitFiles(vf);
100     deleteFileInCommand(vf);
101     myChangeListManager.commitFiles(vf);
102
103     showConfirmation(VcsConfiguration.StandardConfirmation.REMOVE);
104     vf = createFileInCommand("a.txt", null);
105     final HgMockVcsHelper helper = registerMockVcsHelper();
106     helper.addListener(new VcsHelperListener() {
107       @Override
108       public void dialogInvoked() {
109         fail("No dialog should be invoked, because newly added file should be silently removed from the repository");
110       }
111     });
112     deleteFileInCommand(myProject, vf);
113   }
114
115 }