| /* |
| * Copyright 2000-2009 JetBrains s.r.o. |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| |
| package com.intellij.history.core.changes; |
| |
| import com.intellij.history.core.LocalHistoryTestCase; |
| import com.intellij.history.core.tree.Entry; |
| import com.intellij.history.core.tree.RootEntry; |
| import org.junit.Test; |
| |
| public class ChangesRevertingTest extends LocalHistoryTestCase { |
| private final RootEntry root = new RootEntry(); |
| |
| @Test |
| public void testCreatingFile() { |
| StructuralChange c = createFile(root, "file"); |
| assertTrue(root.hasEntry("file")); |
| |
| c.revertOn(root, true); |
| assertFalse(root.hasEntry("file")); |
| } |
| |
| @Test |
| public void testCreatingDirectory() { |
| StructuralChange c = createDirectory(root, "dir"); |
| assertTrue(root.hasEntry("dir")); |
| |
| c.revertOn(root, true); |
| assertFalse(root.hasEntry("dir")); |
| } |
| |
| @Test |
| public void testCreatingFileUnderDirectory() { |
| StructuralChange c = createFile(root, "dir/file", null, -1, false); |
| |
| c.revertOn(root, true); |
| assertFalse(root.hasEntry("dir/file")); |
| assertTrue(root.hasEntry("dir")); |
| } |
| |
| @Test |
| public void testChangingFileContent() { |
| createFile(root, "file", "old content", 11L, false); |
| StructuralChange c = changeContent(root, "file", "new content", 22L); |
| |
| c.revertOn(root, true); |
| |
| Entry e = root.getEntry("file"); |
| assertContent("old content", e.getContent()); |
| assertEquals(11L, e.getTimestamp()); |
| } |
| |
| @Test |
| public void testRenamingFile() { |
| createFile(root, "file"); |
| StructuralChange c = rename(root, "file", "new file"); |
| |
| assertTrue(root.hasEntry("new file")); |
| |
| c.revertOn(root, true); |
| assertTrue(root.hasEntry("file")); |
| assertFalse(root.hasEntry("new file")); |
| } |
| |
| @Test |
| public void testRenamingDirectoryWithContent() { |
| createFile(root, "dir1/dir2/file"); |
| |
| StructuralChange c = rename(root, "dir1/dir2", "new dir"); |
| |
| assertFalse(root.hasEntry("dir1/dir2/file")); |
| assertTrue(root.hasEntry("dir1/new dir/file")); |
| |
| c.revertOn(root, true); |
| |
| assertTrue(root.hasEntry("dir1/dir2")); |
| assertTrue(root.hasEntry("dir1/dir2/file")); |
| assertFalse(root.hasEntry("dir1/new dir")); |
| } |
| |
| @Test |
| public void testChangingFileROStatus() { |
| createFile(root, "f", null, -1, true); |
| |
| StructuralChange c = changeROStatus(root, "f", false); |
| assertFalse(root.getEntry("f").isReadOnly()); |
| |
| c.revertOn(root, true); |
| assertTrue(root.getEntry("f").isReadOnly()); |
| } |
| |
| @Test |
| public void testMovingFileFromOneDirectoryToAnother() { |
| createDirectory(root, "dir1"); |
| createDirectory(root, "dir2"); |
| createFile(root, "dir1/file"); |
| |
| StructuralChange c = move(root, "dir1/file", "dir2"); |
| |
| assertTrue(root.hasEntry("dir2/file")); |
| assertFalse(root.hasEntry("dir1/file")); |
| |
| c.revertOn(root, true); |
| |
| assertFalse(root.hasEntry("dir2/file")); |
| assertTrue(root.hasEntry("dir1/file")); |
| } |
| |
| @Test |
| public void testMovingDirectory() { |
| createFile(root, "root1/dir/file"); |
| createDirectory(root, "root2"); |
| |
| StructuralChange c = move(root, "root1/dir", "root2"); |
| |
| assertTrue(root.hasEntry("root2/dir")); |
| assertTrue(root.hasEntry("root2/dir/file")); |
| assertFalse(root.hasEntry("root1/dir")); |
| |
| c.revertOn(root, true); |
| |
| assertTrue(root.hasEntry("root1/dir")); |
| assertTrue(root.hasEntry("root1/dir/file")); |
| assertFalse(root.hasEntry("root2/dir")); |
| } |
| |
| @Test |
| public void testDeletingFile() { |
| createFile(root, "file", "content", 18L, true); |
| |
| StructuralChange c = delete(root, "file"); |
| |
| assertFalse(root.hasEntry("file")); |
| |
| c.revertOn(root, true); |
| assertTrue(root.hasEntry("file")); |
| |
| Entry e = root.getEntry("file"); |
| |
| assertContent("content", e.getContent()); |
| assertEquals(18L, e.getTimestamp()); |
| assertTrue(e.isReadOnly()); |
| } |
| |
| @Test |
| public void testDeletionRevertionCopiesRestoredEntry() { |
| createFile(root, "file"); |
| |
| DeleteChange c = delete(root, "file"); |
| |
| assertFalse(root.hasEntry("file")); |
| |
| c.revertOn(root, true); |
| assertTrue(root.hasEntry("file")); |
| |
| Entry restored = root.findEntry("file"); |
| assertNotSame(restored, c.getDeletedEntry()); |
| |
| c.getDeletedEntry().setName("fff"); |
| assertEquals("file", restored.getName()); |
| } |
| |
| @Test |
| public void testDeletingDirectoryWithContent() { |
| createFile(root, "dir1/dir2/file", "content", -1, false); |
| |
| StructuralChange c = delete(root, "dir1"); |
| assertFalse(root.hasEntry("dir1")); |
| |
| c.revertOn(root, true); |
| |
| assertTrue(root.hasEntry("dir1")); |
| assertTrue(root.hasEntry("dir1/dir2")); |
| assertTrue(root.hasEntry("dir1/dir2/file")); |
| |
| assertContent("content", root.getEntry("dir1/dir2/file").getContent()); |
| } |
| } |