mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
tests refactoring: extracted base class from DirectoryIndexTest
DirectoryIndexTest is too big now and it's better to write new tests in separate classes. Also initializing the whole directory structure in 'setUp' method looks overcomplicated, because many test methods use only some of these directories.
This commit is contained in:
+6
-57
@@ -26,17 +26,18 @@ import com.intellij.openapi.module.StdModuleTypes;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.roots.*;
|
||||
import com.intellij.openapi.roots.ex.ProjectRootManagerEx;
|
||||
import com.intellij.openapi.roots.impl.DirectoryIndex;
|
||||
import com.intellij.openapi.roots.impl.DirectoryIndexImpl;
|
||||
import com.intellij.openapi.roots.impl.DirectoryIndexTestCase;
|
||||
import com.intellij.openapi.roots.impl.DirectoryInfo;
|
||||
import com.intellij.openapi.roots.impl.ModuleFileIndexImpl;
|
||||
import com.intellij.openapi.util.EmptyRunnable;
|
||||
import com.intellij.openapi.util.io.FileUtil;
|
||||
import com.intellij.openapi.vfs.*;
|
||||
import com.intellij.openapi.vfs.ex.http.HttpFileSystem;
|
||||
import com.intellij.testFramework.*;
|
||||
import com.intellij.testFramework.PlatformTestCase;
|
||||
import com.intellij.testFramework.PlatformTestUtil;
|
||||
import com.intellij.testFramework.PsiTestUtil;
|
||||
import com.intellij.testFramework.VfsTestUtil;
|
||||
import com.intellij.util.containers.ContainerUtil;
|
||||
import gnu.trove.THashSet;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.jetbrains.jps.model.java.JavaResourceRootType;
|
||||
@@ -47,8 +48,7 @@ import java.io.File;
|
||||
import java.util.*;
|
||||
|
||||
@PlatformTestCase.WrapInCommand
|
||||
public class DirectoryIndexTest extends IdeaTestCase {
|
||||
private DirectoryIndexImpl myIndex;
|
||||
public class DirectoryIndexTest extends DirectoryIndexTestCase {
|
||||
|
||||
private Module myModule2, myModule3;
|
||||
private VirtualFile myRootVFile;
|
||||
@@ -65,7 +65,6 @@ public class DirectoryIndexTest extends IdeaTestCase {
|
||||
private VirtualFile myModule1OutputDir;
|
||||
private VirtualFile myResDir, myTestResDir;
|
||||
private VirtualFile myExcludedLibSrcDir, myExcludedLibClsDir;
|
||||
private ProjectFileIndex myFileIndex;
|
||||
|
||||
@Override
|
||||
protected void setUp() throws Exception {
|
||||
@@ -192,16 +191,12 @@ public class DirectoryIndexTest extends IdeaTestCase {
|
||||
}
|
||||
});
|
||||
|
||||
myIndex = (DirectoryIndexImpl)DirectoryIndex.getInstance(myProject);
|
||||
myFileIndex = ProjectRootManager.getInstance(myProject).getFileIndex();
|
||||
// to not interfere with previous test firing vfs events
|
||||
VirtualFileManager.getInstance().syncRefresh();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void tearDown() throws Exception {
|
||||
myFileIndex = null;
|
||||
myIndex = null;
|
||||
myModule2 = null;
|
||||
myModule3 = null;
|
||||
super.tearDown();
|
||||
@@ -747,25 +742,6 @@ public class DirectoryIndexTest extends IdeaTestCase {
|
||||
assertIteratedContent(myFileIndex, Arrays.asList(fileSourceRoot, fileTestSourceRoot), Collections.singletonList(fileRoot));
|
||||
}
|
||||
|
||||
private void assertIteratedContent(Module module, @Nullable List<VirtualFile> contains, @Nullable List<VirtualFile> doesntContain) {
|
||||
assertIteratedContent(ModuleRootManager.getInstance(module).getFileIndex(), contains, doesntContain);
|
||||
assertIteratedContent(myFileIndex, contains, doesntContain);
|
||||
}
|
||||
|
||||
private static void assertIteratedContent(FileIndex fileIndex,
|
||||
@Nullable List<VirtualFile> contains,
|
||||
@Nullable List<VirtualFile> doesntContain) {
|
||||
final Set<VirtualFile> collected = new THashSet<>();
|
||||
fileIndex.iterateContent(fileOrDir -> {
|
||||
if (!collected.add(fileOrDir)) {
|
||||
fail(fileOrDir + " visited twice");
|
||||
}
|
||||
return true;
|
||||
});
|
||||
if (contains != null) assertContainsElements(collected, contains);
|
||||
if (doesntContain != null) assertDoesntContain(collected, doesntContain);
|
||||
}
|
||||
|
||||
public void testFileSourceRootsUnderDirContentRoot() {
|
||||
VirtualFile fileSourceRoot = createChildData(myModule1Dir, "fileSourceRoot.txt");
|
||||
assertTrue(myFileIndex.isInContent(fileSourceRoot));
|
||||
@@ -989,33 +965,6 @@ public class DirectoryIndexTest extends IdeaTestCase {
|
||||
}
|
||||
}
|
||||
|
||||
private void assertNotInProject(VirtualFile file) {
|
||||
DirectoryInfo info = myIndex.getInfoForFile(file);
|
||||
assertFalse(info.toString(), info.isInProject());
|
||||
assertFalse(info.toString(), info.isExcluded());
|
||||
}
|
||||
|
||||
private void assertExcluded(VirtualFile file, Module module) {
|
||||
DirectoryInfo info = myIndex.getInfoForFile(file);
|
||||
assertTrue(info.toString(), info.isExcluded());
|
||||
assertEquals(module, info.getModule());
|
||||
}
|
||||
|
||||
private DirectoryInfo assertInProject(VirtualFile file) {
|
||||
DirectoryInfo info = myIndex.getInfoForFile(file);
|
||||
assertTrue(file.toString(), info.isInProject());
|
||||
myIndex.assertConsistency(info);
|
||||
return info;
|
||||
}
|
||||
|
||||
private void assertNotExcluded(VirtualFile file) {
|
||||
assertFalse(myIndex.getInfoForFile(file).isExcluded());
|
||||
}
|
||||
|
||||
private void assertExcludedFromProject(VirtualFile file) {
|
||||
assertExcluded(file, null);
|
||||
}
|
||||
|
||||
private void checkPackage(String packageName, boolean includeLibrarySources, VirtualFile... expectedDirs) {
|
||||
VirtualFile[] actualDirs = myIndex.getDirectoriesByPackageName(packageName, includeLibrarySources).toArray(VirtualFile.EMPTY_ARRAY);
|
||||
assertNotNull(actualDirs);
|
||||
|
||||
@@ -0,0 +1,97 @@
|
||||
/*
|
||||
* Copyright 2000-2017 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.openapi.roots.impl;
|
||||
|
||||
import com.intellij.openapi.module.Module;
|
||||
import com.intellij.openapi.roots.FileIndex;
|
||||
import com.intellij.openapi.roots.ModuleRootManager;
|
||||
import com.intellij.openapi.roots.ProjectFileIndex;
|
||||
import com.intellij.openapi.roots.ProjectRootManager;
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
import com.intellij.testFramework.IdeaTestCase;
|
||||
import gnu.trove.THashSet;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
/**
|
||||
* @author nik
|
||||
*/
|
||||
public abstract class DirectoryIndexTestCase extends IdeaTestCase {
|
||||
protected DirectoryIndexImpl myIndex;
|
||||
protected ProjectFileIndex myFileIndex;
|
||||
|
||||
@Override
|
||||
protected void setUp() throws Exception {
|
||||
super.setUp();
|
||||
myIndex = (DirectoryIndexImpl)DirectoryIndex.getInstance(myProject);
|
||||
myFileIndex = ProjectRootManager.getInstance(myProject).getFileIndex();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void tearDown() throws Exception {
|
||||
myFileIndex = null;
|
||||
myIndex = null;
|
||||
super.tearDown();
|
||||
}
|
||||
|
||||
protected void assertNotInProject(VirtualFile file) {
|
||||
DirectoryInfo info = myIndex.getInfoForFile(file);
|
||||
assertFalse(info.toString(), info.isInProject(file));
|
||||
assertFalse(info.toString(), info.isExcluded(file));
|
||||
}
|
||||
|
||||
protected void assertExcluded(VirtualFile file, Module module) {
|
||||
DirectoryInfo info = myIndex.getInfoForFile(file);
|
||||
assertTrue(info.toString(), info.isExcluded(file));
|
||||
assertEquals(module, info.getModule());
|
||||
}
|
||||
|
||||
protected DirectoryInfo assertInProject(VirtualFile file) {
|
||||
DirectoryInfo info = myIndex.getInfoForFile(file);
|
||||
assertTrue(file.toString(), info.isInProject(file));
|
||||
myIndex.assertConsistency(info);
|
||||
return info;
|
||||
}
|
||||
|
||||
protected void assertNotExcluded(VirtualFile file) {
|
||||
assertFalse(myIndex.getInfoForFile(file).isExcluded(file));
|
||||
}
|
||||
|
||||
protected void assertExcludedFromProject(VirtualFile file) {
|
||||
assertExcluded(file, null);
|
||||
}
|
||||
|
||||
protected void assertIteratedContent(Module module, @Nullable List<VirtualFile> contains, @Nullable List<VirtualFile> doesntContain) {
|
||||
assertIteratedContent(ModuleRootManager.getInstance(module).getFileIndex(), contains, doesntContain);
|
||||
assertIteratedContent(myFileIndex, contains, doesntContain);
|
||||
}
|
||||
|
||||
protected static void assertIteratedContent(FileIndex fileIndex,
|
||||
@Nullable List<VirtualFile> contains,
|
||||
@Nullable List<VirtualFile> doesntContain) {
|
||||
final Set<VirtualFile> collected = new THashSet<>();
|
||||
fileIndex.iterateContent(fileOrDir -> {
|
||||
if (!collected.add(fileOrDir)) {
|
||||
fail(fileOrDir + " visited twice");
|
||||
}
|
||||
return true;
|
||||
});
|
||||
if (contains != null) assertContainsElements(collected, contains);
|
||||
if (doesntContain != null) assertDoesntContain(collected, doesntContain);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user