blob: 676e570e7aa573dd62655f918115a9cb140439e0 [file] [log] [blame]
package com.intellij.psi.search;
import com.intellij.JavaTestUtil;
import com.intellij.openapi.roots.ModuleRootModificationUtil;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.psi.PsiClass;
import com.intellij.psi.PsiFile;
import com.intellij.psi.PsiReference;
import com.intellij.psi.search.searches.ReferencesSearch;
import com.intellij.testFramework.PsiTestCase;
import com.intellij.testFramework.PsiTestUtil;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
public class SearchInLibsTest extends PsiTestCase {
public void testSearchInProject() throws Exception {
doTest("ProjectClass", new String[]{"ProjectClass.java"}, GlobalSearchScope.projectScope(myProject));
doTest("LibraryClass1", new String[]{"ProjectClass.java"}, GlobalSearchScope.projectScope(myProject));
doTest("LibraryClass2", new String[]{}, GlobalSearchScope.projectScope(myProject));
}
public void testSearchInLibs() throws Exception {
doTest("ProjectClass", new String[]{"ProjectClass.java"}, GlobalSearchScope.allScope(myProject));
doTest("LibraryClass1", new String[]{"LibraryClass2.java", "ProjectClass.java"}, GlobalSearchScope.allScope(myProject));
doTest("LibraryClass2", new String[]{"LibraryClass1.java"}, GlobalSearchScope.allScope(myProject));
}
public void testInnerSourceRoot() throws Exception {
doTest("ProjectClass2", new String[]{"ProjectClass2.java"}, GlobalSearchScope.projectScope(myProject));
}
private void doTest(String classNameToSearch, String[] expectedFileNames, SearchScope scope) throws Exception {
String root = JavaTestUtil.getJavaTestDataPath() + "/psi/search/searchInLibs";
VirtualFile rootFile = PsiTestUtil.createTestProjectStructure(myProject, myModule, root, myFilesToDelete, false);
final VirtualFile projectRoot = rootFile.findChild("project");
assertNotNull(projectRoot);
final VirtualFile innerSourceRoot = projectRoot.findChild("src2");
assertNotNull(innerSourceRoot);
VirtualFile libRoot = rootFile.findChild("lib");
final VirtualFile libClassesRoot = libRoot.findChild("classes");
final VirtualFile libSrcRoot = libRoot.findChild("src");
assertNotNull(libRoot);
PsiTestUtil.removeAllRoots(myModule, null);
PsiTestUtil.addSourceRoot(myModule, projectRoot);
PsiTestUtil.addSourceRoot(myModule, innerSourceRoot);
ModuleRootModificationUtil.addModuleLibrary(myModule, "lib", Collections.singletonList(libClassesRoot.getUrl()), Collections.singletonList(libSrcRoot.getUrl()));
final PsiClass aClass = myJavaFacade.findClass(classNameToSearch);
assertNotNull(aClass);
PsiReference[] refs = ReferencesSearch.search(aClass, scope, false).toArray(new PsiReference[0]);
ArrayList<PsiFile> files = new ArrayList<PsiFile>();
for (int i = 0; i < refs.length; i++) {
PsiReference ref = refs[i];
PsiFile file = ref.getElement().getContainingFile();
if (!files.contains(file)) {
files.add(file);
}
}
assertEquals("files count", expectedFileNames.length, files.size());
Collections.sort(files, new Comparator() {
@Override
public int compare(Object o1, Object o2) {
PsiFile file1 = (PsiFile) o1;
PsiFile file2 = (PsiFile) o2;
return file1.getName().compareTo(file2.getName());
}
});
Arrays.sort(expectedFileNames);
for (int i = 0; i < expectedFileNames.length; i++) {
String name = expectedFileNames[i];
PsiFile file = (PsiFile) files.get(i);
assertEquals(name, file.getName());
}
}
}