reverted
[idea/community.git] / plugins / hg4idea / testSrc / org / zmlx / hg4idea / test / HgTestChangeListManager.java
1 /*
2  * Copyright 2000-2010 JetBrains s.r.o.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 package org.zmlx.hg4idea.test;
17
18 import com.intellij.openapi.application.ApplicationManager;
19 import com.intellij.openapi.project.Project;
20 import com.intellij.openapi.vcs.changes.Change;
21 import com.intellij.openapi.vcs.changes.ChangeListManagerImpl;
22 import com.intellij.openapi.vcs.changes.LocalChangeList;
23 import com.intellij.openapi.vfs.VirtualFile;
24 import com.intellij.util.containers.HashSet;
25 import org.testng.Assert;
26
27 import java.io.IOException;
28 import java.util.ArrayList;
29 import java.util.Arrays;
30 import java.util.Collection;
31 import java.util.List;
32
33 import static org.testng.Assert.assertNotNull;
34
35 /**
36  * The ChangeListManagerImpl extension with some useful helper methods for tests.
37  * @author Kirill Likhodedov
38  */
39 public class HgTestChangeListManager {
40
41   private ChangeListManagerImpl peer;
42
43   public HgTestChangeListManager(Project project) {
44     peer = ChangeListManagerImpl.getInstanceImpl(project);
45   }
46
47   /**
48    * Adds the specified unversioned files to the repository (to the default change list).
49    * Shortcut for ChangeListManagerImpl.addUnversionedFiles().
50    */
51   public void addUnversionedFilesToVcs(VirtualFile... files) {
52     peer.addUnversionedFiles(peer.getDefaultChangeList(), Arrays.asList(files));
53   }
54
55   /**
56    * Updates the change list manager and checks that the given files are in the default change list.
57    * @param only Set this to true if you want ONLY the specified files to be in the change list.
58    *             If set to false, the change list may contain some other files apart from the given ones.
59    * @param files Files to be checked.
60    */
61   public void checkFilesAreInList(boolean only, VirtualFile... files) {
62     peer.ensureUpToDate(false);
63
64     final Collection<Change> changes = peer.getDefaultChangeList().getChanges();
65     if (only) {
66       Assert.assertEquals(changes.size(), files.length);
67     }
68     final Collection<VirtualFile> filesInChangeList = new HashSet<VirtualFile>();
69     for (Change c : changes) {
70       filesInChangeList.add(c.getVirtualFile());
71     }
72     for (VirtualFile f : files) {
73       Assert.assertTrue(filesInChangeList.contains(f));
74     }
75   }
76
77   /**
78    * Commits all changes of the given files.
79    */
80   public void commitFiles(VirtualFile... files) {
81     final List<Change> changes = new ArrayList<Change>(files.length);
82     for (VirtualFile f : files) {
83       changes.addAll(peer.getChangesIn(f));
84     }
85     final LocalChangeList list = peer.getDefaultChangeList();
86     assertNotNull(list);
87     list.setComment("A comment to a commit");
88     Assert.assertTrue(peer.commitChangesSynchronouslyWithResult(list, changes));
89   }
90
91   public void removeFiles(final VirtualFile file) {
92      ApplicationManager.getApplication().runWriteAction(new Runnable() {
93        @Override
94        public void run() {
95          try {
96            file.delete(this);
97          }
98          catch (IOException e) {
99            e.printStackTrace();
100          }
101        }
102      });
103   }
104
105 }