/* * 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.DirectoryEntry; import com.intellij.history.core.tree.Entry; import com.intellij.history.core.tree.RootEntry; import org.junit.Ignore; import org.junit.Test; public class RootEntryDirectoriesTest extends LocalHistoryTestCase { private final RootEntry root = new RootEntry(); @Test public void testCeatingDirectory() { assertFalse(root.hasEntry("dir")); createDirectory(root, "dir"); assertTrue(root.hasEntry("dir")); Entry e = root.getEntry("dir"); assertEquals(DirectoryEntry.class, e.getClass()); assertTrue(e.getChildren().isEmpty()); } @Test public void testCreatingFilesUnderDirectory() { createDirectory(root, "dir"); createFile(root, "dir/file"); assertTrue(root.hasEntry("dir")); assertTrue(root.hasEntry("dir/file")); Entry dir = root.getEntry("dir"); Entry file = root.getEntry("dir/file"); assertEquals(1, dir.getChildren().size()); assertSame(file, dir.getChildren().get(0)); assertSame(dir, file.getParent()); } @Test public void testCreatingFilesUnderNonExistingDirectoryCreatesIt() { createFile(root, "dir/file"); assertTrue(root.hasEntry("dir")); assertTrue(root.hasEntry("dir/file")); } @Test public void testChangingFileContentUnderDirectory() { createDirectory(root, "dir"); createFile(root, "dir/file", "content"); changeContent(root, "dir/file", "new content"); assertContent("new content", root.getEntry("dir/file").getContent()); } @Test public void testRenamingDirectories() { createFile(root, "dir"); rename(root, "dir", "new dir"); assertTrue(root.hasEntry("new dir")); assertFalse(root.hasEntry("dir")); } @Test public void testRenamingFilesUnderDirectory() { createDirectory(root, "dir"); createFile(root, "dir/file", "content"); rename(root, "dir/file", "new file"); assertFalse(root.hasEntry("dir/file")); assertTrue(root.hasEntry("dir/new file")); assertContent("content", root.getEntry("dir/new file").getContent()); } @Test @Ignore public void testRenamingFilesUnderDirectoryToExistingNameThrowsException() { createDirectory(root, "dir"); createFile(root, "dir/file1"); createFile(root, "dir/file2"); try { rename(root, "dir/file1", "file2"); fail(); } catch (RuntimeException e) { } } @Test public void testRenamingSubdirectories() { createDirectory(root, "dir1"); createFile(root, "dir1/dir2"); rename(root, "dir1/dir2", "new dir"); assertTrue(root.hasEntry("dir1/new dir")); assertFalse(root.hasEntry("dir1/dir2")); } @Test public void testRenamingDirectoryWithContent() { createDirectory(root, "dir"); createFile(root, "dir/file"); rename(root, "dir", "new dir"); assertTrue(root.hasEntry("new dir")); assertTrue(root.hasEntry("new dir/file")); assertFalse(root.hasEntry("dir")); assertFalse(root.hasEntry("dir/file")); } @Test @Ignore public void testRenamingDirectoryToExistingFileNameThrowsException() { createDirectory(root, "dir1"); createDirectory(root, "dir1/dir2"); createFile(root, "dir1/file"); try { rename(root, "dir1/dir2", "file"); fail(); } catch (RuntimeException e) { } } @Test public void testMovingFilesBetweenDirectories() { createDirectory(root, "dir1"); createDirectory(root, "dir2"); createFile(root, "dir1/file", "content"); move(root, "dir1/file", "dir2"); assertTrue(root.hasEntry("dir2/file")); assertFalse(root.hasEntry("dir1/file")); Entry e = root.getEntry("dir2/file"); assertContent("content", e.getContent()); } @Test public void testMovingDirectories() { createDirectory(root, "root1"); createDirectory(root, "root2"); createDirectory(root, "root1/dir"); createFile(root, "root1/dir/file"); move(root, "root1/dir", "root2"); assertTrue(root.hasEntry("root2/dir")); assertTrue(root.hasEntry("root2/dir/file")); assertFalse(root.hasEntry("root1/dir")); } @Test public void testMovingEntryFromRootToDirectory() { createDirectory(root, "dir"); createFile(root, "file"); move(root, "file", "dir"); assertTrue(root.hasEntry("dir/file")); assertFalse(root.hasEntry("file")); } @Test public void testMovingEntriesToAnotherLevelInTree() { createDirectory(root, "dir1"); createDirectory(root, "dir1/dir2"); createFile(root, "dir1/file1"); createFile(root, "dir1/dir2/file2"); move(root, "dir1/file1", "dir1/dir2"); move(root, "dir1/dir2/file2", "dir1"); assertTrue(root.hasEntry("dir1/file2")); assertTrue(root.hasEntry("dir1/dir2/file1")); } @Test public void testMovingDirectoryToItsChildThrowsException() { createDirectory(root, "dir1"); createDirectory(root, "dir1/dir2"); try { move(root, "dir1", "dir1/dir2"); fail(); } catch (RuntimeException e) { } } @Test public void testMovingEntryToNotADirectoryThrowsException() { createFile(root, "file1"); createFile(root, "file2"); try { move(root, "file1", "file1/file2"); fail(); } catch (RuntimeException e) { } } @Test public void testMovingEntryToSameDirectory() { createDirectory(root, "dir"); createFile(root, "dir/file"); move(root, "dir/file", "dir"); assertTrue(root.hasEntry("dir/file")); } @Test public void testDeletingDirectory() { createDirectory(root, "dir"); assertTrue(root.hasEntry("dir")); delete(root, "dir"); assertFalse(root.hasEntry("dir")); } @Test public void testDeletingSubdirectory() { createDirectory(root, "dir1"); createDirectory(root, "dir1/dir2"); assertTrue(root.hasEntry("dir1")); assertTrue(root.hasEntry("dir1/dir2")); delete(root, "dir1/dir2"); assertFalse(root.hasEntry("dir1/dir2")); assertTrue(root.hasEntry("dir1")); } @Test public void testDeletingDirectoryWithContent() { createDirectory(root, "dir1"); createDirectory(root, "dir1/dir2"); delete(root, "dir1"); assertFalse(root.hasEntry("dir1/dir2")); assertFalse(root.hasEntry("dir1")); } @Test public void testDeletingFilesUnderDirectory() { createDirectory(root, "dir"); createFile(root, "dir/file"); assertTrue(root.hasEntry("dir/file")); delete(root, "dir/file"); assertFalse(root.hasEntry("dir/file")); } }