PageRenderTime 79ms CodeModel.GetById 28ms RepoModel.GetById 0ms app.codeStats 0ms

/plugins/svn4idea/testSource/org/jetbrains/idea/svn/SvnChangesCorrectlyRefreshedTest.java

https://github.com/rfreedman/intellij-community
Java | 287 lines | 203 code | 66 blank | 18 comment | 6 complexity | 49e09a2e43617addf6ed11a4c0175902 MD5 | raw file
Possible License(s): Apache-2.0, AGPL-1.0
  1. /*
  2. * Copyright 2000-2012 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.jetbrains.idea.svn;
  17. import com.intellij.openapi.fileEditor.impl.LoadTextUtil;
  18. import com.intellij.openapi.vcs.VcsConfiguration;
  19. import com.intellij.openapi.vcs.VcsException;
  20. import com.intellij.openapi.vcs.changes.Change;
  21. import com.intellij.openapi.vcs.changes.ChangeListManager;
  22. import com.intellij.openapi.vcs.changes.ChangeListManagerImpl;
  23. import com.intellij.openapi.vcs.changes.VcsDirtyScopeManager;
  24. import com.intellij.openapi.vcs.changes.ui.RollbackWorker;
  25. import com.intellij.openapi.vfs.LocalFileSystem;
  26. import com.intellij.openapi.vfs.VfsUtil;
  27. import com.intellij.openapi.vfs.VirtualFile;
  28. import com.intellij.testFramework.vcs.DuringChangeListManagerUpdateTestScheme;
  29. import org.jetbrains.annotations.Nullable;
  30. import org.junit.Assert;
  31. import org.junit.Test;
  32. import java.io.File;
  33. import java.util.ArrayList;
  34. import java.util.Arrays;
  35. import java.util.Collection;
  36. import java.util.List;
  37. public class SvnChangesCorrectlyRefreshedTest extends Svn17TestCase {
  38. private ChangeListManager clManager;
  39. @Override
  40. public void setUp() throws Exception {
  41. super.setUp();
  42. clManager = ChangeListManager.getInstance(myProject);
  43. enableSilentOperation(VcsConfiguration.StandardConfirmation.ADD);
  44. enableSilentOperation(VcsConfiguration.StandardConfirmation.REMOVE);
  45. }
  46. @Test
  47. public void testModificationAndAfterRevert() throws Exception {
  48. final SubTree subTree = new SubTree(myWorkingCopyDir);
  49. checkin();
  50. sleep(100);
  51. editFileInCommand(myProject, subTree.myS1File, "new content");
  52. final CharSequence text1 = LoadTextUtil.loadText(subTree.myS1File);
  53. Assert.assertEquals("new content", text1.toString());
  54. sleep(100);
  55. LocalFileSystem.getInstance().refreshAndFindFileByIoFile(new File(subTree.myS1File.getPath()));
  56. VcsDirtyScopeManager.getInstance(myProject).markEverythingDirty();
  57. clManager.ensureUpToDate(false);
  58. final VcsException updateException = ((ChangeListManagerImpl)clManager).getUpdateException();
  59. if (updateException != null) {
  60. updateException.printStackTrace();
  61. }
  62. Assert.assertNull(updateException == null ? null : updateException.getMessage(), updateException);
  63. DuringChangeListManagerUpdateTestScheme.checkFilesAreInList(new VirtualFile[] {subTree.myS1File}, clManager.getDefaultListName(), clManager);
  64. final Collection<Change> changes = clManager.getDefaultChangeList().getChanges();
  65. final RollbackWorker worker = new RollbackWorker(myProject);
  66. worker.doRollback(changes, false, null, null);
  67. final CharSequence text = LoadTextUtil.loadText(subTree.myS1File);
  68. Assert.assertEquals(SubTree.ourS1Contents, text.toString());
  69. VcsDirtyScopeManager.getInstance(myProject).markEverythingDirty();
  70. clManager.ensureUpToDate(false);
  71. DuringChangeListManagerUpdateTestScheme.checkFilesAreInList(new VirtualFile[] {}, clManager.getDefaultListName(), clManager);
  72. }
  73. @Test
  74. public void testRenameFileAndAfterRevert() throws Throwable {
  75. final SubTree subTree = new SubTree(myWorkingCopyDir);
  76. checkin();
  77. final String newName = "newName";
  78. renameFileInCommand(subTree.myS1File, newName);
  79. assertVF(subTree.mySourceDir, newName);
  80. sleep(300);
  81. VcsDirtyScopeManager.getInstance(myProject).markEverythingDirty();
  82. clManager.ensureUpToDate(false);
  83. DuringChangeListManagerUpdateTestScheme.checkFilesAreInList(new VirtualFile[] {subTree.myS1File}, clManager.getDefaultListName(), clManager);
  84. final Collection<Change> changes = clManager.getDefaultChangeList().getChanges();
  85. final RollbackWorker worker = new RollbackWorker(myProject);
  86. worker.doRollback(changes, false, null, null);
  87. assertVF(subTree.mySourceDir, "s1.txt");
  88. clManager.ensureUpToDate(false);
  89. DuringChangeListManagerUpdateTestScheme.checkFilesAreInList(new VirtualFile[] {}, clManager.getDefaultListName(), clManager);
  90. }
  91. @Test
  92. public void testMoveFileAndAfterRevert() throws Throwable {
  93. final SubTree subTree = new SubTree(myWorkingCopyDir);
  94. checkin();
  95. moveFileInCommand(subTree.myS1File, subTree.myTargetDir);
  96. assertVF(subTree.myTargetDir, "s1.txt");
  97. sleep(300);
  98. VcsDirtyScopeManager.getInstance(myProject).markEverythingDirty();
  99. clManager.ensureUpToDate(false);
  100. DuringChangeListManagerUpdateTestScheme.checkFilesAreInList(new VirtualFile[] {subTree.myS1File}, clManager.getDefaultListName(), clManager);
  101. final Collection<Change> changes = clManager.getDefaultChangeList().getChanges();
  102. final RollbackWorker worker = new RollbackWorker(myProject);
  103. worker.doRollback(changes, false, null, null);
  104. assertVF(subTree.mySourceDir, "s1.txt");
  105. clManager.ensureUpToDate(false);
  106. DuringChangeListManagerUpdateTestScheme.checkFilesAreInList(new VirtualFile[] {}, clManager.getDefaultListName(), clManager);
  107. }
  108. @Test
  109. public void testRenameDirAndAfterRevert() throws Throwable {
  110. final SubTree subTree = new SubTree(myWorkingCopyDir);
  111. checkin();
  112. final String newName = "newName";
  113. renameFileInCommand(subTree.mySourceDir, newName);
  114. assertVF(subTree.myRootDir, newName);
  115. assertVF(subTree.mySourceDir, "s1.txt");
  116. assertVF(subTree.mySourceDir, "s2.txt");
  117. sleep(300);
  118. VcsDirtyScopeManager.getInstance(myProject).markEverythingDirty();
  119. clManager.ensureUpToDate(false);
  120. DuringChangeListManagerUpdateTestScheme.checkFilesAreInList(new VirtualFile[] {subTree.mySourceDir, subTree.myS1File, subTree.myS2File},
  121. clManager.getDefaultListName(), clManager);
  122. final Collection<Change> changes = clManager.getDefaultChangeList().getChanges();
  123. final RollbackWorker worker = new RollbackWorker(myProject);
  124. worker.doRollback(changes, false, null, null);
  125. subTree.mySourceDir = assertVF(subTree.myRootDir, "source");
  126. Assert.assertTrue(subTree.mySourceDir.getPath().endsWith("/root/source"));
  127. assertVF(subTree.mySourceDir, "s1.txt");
  128. assertVF(subTree.mySourceDir, "s2.txt");
  129. clManager.ensureUpToDate(false);
  130. DuringChangeListManagerUpdateTestScheme.checkFilesAreInList(new VirtualFile[] {}, clManager.getDefaultListName(), clManager);
  131. }
  132. @Test
  133. public void testMoveDirEditFileAndAfterRevert() throws Throwable {
  134. final SubTree subTree = new SubTree(myWorkingCopyDir);
  135. checkin();
  136. moveFileInCommand(subTree.mySourceDir, subTree.myTargetDir);
  137. Assert.assertTrue(subTree.mySourceDir.getPath().endsWith("/target/source"));
  138. assertVF(subTree.myTargetDir, "source");
  139. editFileInCommand(myProject, subTree.myS1File, "new");
  140. final CharSequence text1 = LoadTextUtil.loadText(subTree.myS1File);
  141. Assert.assertEquals("new", text1.toString());
  142. sleep(300);
  143. VcsDirtyScopeManager.getInstance(myProject).markEverythingDirty();
  144. clManager.ensureUpToDate(false);
  145. DuringChangeListManagerUpdateTestScheme.checkFilesAreInList(new VirtualFile[] {subTree.mySourceDir, subTree.myS1File, subTree.myS2File},
  146. clManager.getDefaultListName(), clManager);
  147. final Collection<Change> changes = clManager.getDefaultChangeList().getChanges();
  148. final RollbackWorker worker = new RollbackWorker(myProject);
  149. worker.doRollback(changes, false, null, null);
  150. subTree.mySourceDir = assertVF(subTree.myRootDir, "source");
  151. Assert.assertTrue(subTree.mySourceDir.getPath().endsWith("/root/source"));
  152. subTree.myS1File = assertVF(subTree.mySourceDir, "s1.txt");
  153. subTree.myS2File = assertVF(subTree.mySourceDir, "s2.txt");
  154. final CharSequence text = LoadTextUtil.loadText(subTree.myS1File);
  155. Assert.assertEquals(SubTree.ourS1Contents, text.toString());
  156. clManager.ensureUpToDate(false);
  157. DuringChangeListManagerUpdateTestScheme.checkFilesAreInList(new VirtualFile[] {}, clManager.getDefaultListName(), clManager);
  158. }
  159. @Test
  160. public void testAddDirEditFileAndAfterRevert() throws Throwable {
  161. final SubTree subTree = new SubTree(myWorkingCopyDir);
  162. VcsDirtyScopeManager.getInstance(myProject).markEverythingDirty();
  163. clManager.ensureUpToDate(false);
  164. final List<VirtualFile> files = getAllFiles(subTree);
  165. DuringChangeListManagerUpdateTestScheme.checkFilesAreInList(VfsUtil.toVirtualFileArray(files), clManager.getDefaultListName(), clManager);
  166. final Collection<Change> changes = clManager.getDefaultChangeList().getChanges();
  167. final RollbackWorker worker = new RollbackWorker(myProject);
  168. worker.doRollback(changes, false, null, null);
  169. assertVF(subTree.myRootDir, "source");
  170. assertVF(subTree.mySourceDir, "s1.txt");
  171. assertVF(subTree.myRootDir, "target");
  172. clManager.ensureUpToDate(false);
  173. DuringChangeListManagerUpdateTestScheme.checkFilesAreInList(new VirtualFile[] {}, clManager.getDefaultListName(), clManager);
  174. for (VirtualFile file : files) {
  175. Assert.assertTrue(file.getPath(), clManager.isUnversioned(file));
  176. }
  177. }
  178. private List<VirtualFile> getAllFiles(final SubTree subTree) {
  179. final List<VirtualFile> files = new ArrayList<VirtualFile>();
  180. files.addAll(Arrays.asList(subTree.myRootDir, subTree.mySourceDir, subTree.myS2File, subTree.myS1File, subTree.myTargetDir));
  181. files.addAll(subTree.myTargetFiles);
  182. return files;
  183. }
  184. @Test
  185. public void testDeleteDirEditFileAndAfterRevert() throws Throwable {
  186. final SubTree subTree = new SubTree(myWorkingCopyDir);
  187. checkin();
  188. deleteFileInCommand(subTree.myRootDir);
  189. sleep(300);
  190. VcsDirtyScopeManager.getInstance(myProject).markEverythingDirty();
  191. clManager.ensureUpToDate(false);
  192. final List<VirtualFile> files = getAllFiles(subTree);
  193. DuringChangeListManagerUpdateTestScheme.checkDeletedFilesAreInList(VfsUtil.toVirtualFileArray(files), clManager.getDefaultListName(),
  194. clManager);
  195. final Collection<Change> changes = clManager.getDefaultChangeList().getChanges();
  196. final RollbackWorker worker = new RollbackWorker(myProject);
  197. worker.doRollback(changes, false, null, null);
  198. assertVF(subTree.myRootDir, "source");
  199. assertVF(subTree.mySourceDir, "s1.txt");
  200. assertVF(subTree.myRootDir, "target");
  201. assertVF(subTree.myTargetDir, "t11.txt");
  202. assertVF(subTree.myTargetDir, "t13.txt");
  203. assertVF(subTree.myTargetDir, "t14.txt");
  204. assertVF(subTree.myTargetDir, "t15.txt");
  205. clManager.ensureUpToDate(false);
  206. DuringChangeListManagerUpdateTestScheme.checkFilesAreInList(new VirtualFile[] {}, clManager.getDefaultListName(), clManager);
  207. }
  208. @Nullable
  209. private static VirtualFile assertVF(final VirtualFile parent, final String name) {
  210. final VirtualFile[] files = parent.getChildren();
  211. //final StringBuilder sb = new StringBuilder("Files: ");
  212. for (VirtualFile file : files) {
  213. //sb.append(file.getName()).append(' ');
  214. if (name.equals(file.getName())) return file;
  215. }
  216. System.out.println("not found as child");
  217. Assert.assertNotNull(LocalFileSystem.getInstance().findFileByIoFile(new File(parent.getPath(), name)));
  218. //Assert.assertTrue(sb.toString(), false);
  219. return null;
  220. }
  221. }