791699be0f9f6b27c6c1bd62d3fbde2885543174
[idea/community.git] / plugins / hg4idea / testSrc / org / zmlx / hg4idea / test / TestChangeListManager.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.vfs.VirtualFile;
23 import com.intellij.util.containers.HashSet;
24 import org.testng.Assert;
25
26 import java.io.IOException;
27 import java.util.ArrayList;
28 import java.util.Arrays;
29 import java.util.Collection;
30 import java.util.List;
31
32 /**
33  * The ChangeListManagerImpl extension with some useful helper methods for tests.
34  * @author Kirill Likhodedov
35  */
36 public class TestChangeListManager {
37
38   private ChangeListManagerImpl peer;
39
40   public TestChangeListManager(Project project) {
41     peer = ChangeListManagerImpl.getInstanceImpl(project);
42   }
43
44   /**
45    * Adds the specified unversioned files to the repository (to the default change list).
46    * Shortcut for ChangeListManagerImpl.addUnversionedFiles().
47    */
48   public void addUnversionedFilesToVcs(VirtualFile... files) {
49     peer.addUnversionedFiles(peer.getDefaultChangeList(), Arrays.asList(files));
50   }
51
52   /**
53    * Updates the change list manager and checks that the given files are in the default change list.
54    * @param only Set this to true if you want ONLY the specified files to be in the change list.
55    *             If set to false, the change list may contain some other files apart from the given ones.
56    * @param files Files to be checked.
57    */
58   public void checkFilesAreInList(boolean only, VirtualFile... files) {
59     peer.ensureUpToDate(false);
60
61     final Collection<Change> changes = peer.getDefaultChangeList().getChanges();
62     if (only) {
63       Assert.assertEquals(changes.size(), files.length);
64     }
65     final Collection<VirtualFile> filesInChangeList = new HashSet<VirtualFile>();
66     for (Change c : changes) {
67       filesInChangeList.add(c.getVirtualFile());
68     }
69     for (VirtualFile f : files) {
70       Assert.assertTrue(filesInChangeList.contains(f));
71     }
72   }
73
74   /**
75    * Commits all changes of the given files.
76    */
77   public void commitFiles(VirtualFile... files) {
78     final List<Change> changes = new ArrayList<Change>(files.length);
79     for (VirtualFile f : files) {
80       changes.addAll(peer.getChangesIn(f));
81     }
82     Assert.assertTrue(peer.commitChangesSynchronouslyWithResult(peer.getDefaultChangeList(), changes));
83   }
84
85   public void removeFiles(final VirtualFile file) {
86      ApplicationManager.getApplication().runWriteAction(new Runnable() {
87        @Override
88        public void run() {
89          try {
90            file.delete(this);
91          }
92          catch (IOException e) {
93            e.printStackTrace();
94          }
95        }
96      });
97   }
98
99 }