let test AST loading filters be more robust to test failures

This commit is contained in:
peter
2013-11-28 17:52:43 +01:00
parent 50d1e11808
commit 2eb0332443
12 changed files with 35 additions and 50 deletions
@@ -19,6 +19,7 @@
*/
package com.intellij.psi.impl;
import com.intellij.openapi.Disposable;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.vfs.VirtualFileFilter;
import com.intellij.psi.JavaPsiFacade;
@@ -41,5 +42,5 @@ public abstract class JavaPsiFacadeEx extends JavaPsiFacade {
}
@TestOnly
public abstract void setAssertOnFileLoadingFilter(@NotNull VirtualFileFilter filter);
public abstract void setAssertOnFileLoadingFilter(@NotNull VirtualFileFilter filter, Disposable parentDisposable);
}
@@ -15,6 +15,7 @@
*/
package com.intellij.psi.impl;
import com.intellij.openapi.Disposable;
import com.intellij.openapi.application.ReadActionProcessor;
import com.intellij.openapi.progress.ProgressIndicatorProvider;
import com.intellij.openapi.project.DumbAware;
@@ -467,7 +468,7 @@ public class JavaPsiFacadeImpl extends JavaPsiFacadeEx {
@TestOnly
@Override
public void setAssertOnFileLoadingFilter(@NotNull final VirtualFileFilter filter) {
((PsiManagerImpl)PsiManager.getInstance(myProject)).setAssertOnFileLoadingFilter(filter);
public void setAssertOnFileLoadingFilter(@NotNull final VirtualFileFilter filter, Disposable parentDisposable) {
((PsiManagerImpl)PsiManager.getInstance(myProject)).setAssertOnFileLoadingFilter(filter, parentDisposable);
}
}
@@ -232,13 +232,11 @@ public class ClsRepositoryUseTest extends PsiTestCase {
}
public void testFindClass() {
getJavaFacade().setAssertOnFileLoadingFilter(VirtualFileFilter.ALL);
getJavaFacade().setAssertOnFileLoadingFilter(VirtualFileFilter.ALL, myTestRootDisposable);
PsiClass aClass = myJavaFacade.findClass("pack.MyClass", GlobalSearchScope.allScope(myProject));
assertNotNull(aClass);
checkValid(aClass);
getJavaFacade().setAssertOnFileLoadingFilter(VirtualFileFilter.NONE);
}
public void testIsInterface() {
@@ -40,7 +40,7 @@ public class ModifyAnnotationsTest extends PsiTestCase {
public void testReplaceAnnotation() throws Exception {
//be sure not to load tree
getJavaFacade().setAssertOnFileLoadingFilter(VirtualFileFilter.ALL);
getJavaFacade().setAssertOnFileLoadingFilter(VirtualFileFilter.ALL, myTestRootDisposable);
PsiClass aClass = myJavaFacade.findClass("Test", GlobalSearchScope.allScope(myProject));
assertNotNull(aClass);
final PsiAnnotation[] annotations = aClass.getModifierList().getAnnotations();
@@ -48,7 +48,7 @@ public class ModifyAnnotationsTest extends PsiTestCase {
assertEquals("A", annotations[0].getNameReferenceElement().getReferenceName());
final PsiAnnotation newAnnotation = myJavaFacade.getElementFactory().createAnnotationFromText("@B", null);
//here the tree is going to be loaded
getJavaFacade().setAssertOnFileLoadingFilter(VirtualFileFilter.NONE);
getJavaFacade().setAssertOnFileLoadingFilter(VirtualFileFilter.NONE, myTestRootDisposable);
CommandProcessor.getInstance().executeCommand(myProject, new Runnable() {
@Override
public void run() {
@@ -299,7 +299,7 @@ public class Src15RepositoryUseTest extends PsiTestCase {
public boolean accept(final VirtualFile file) {
return !"package-info.java".equals(file.getName());
}
});
}, myTestRootDisposable);
final PsiClass annotationTypeClass = findClass("annotations.AnnotationType");
assertTrue(annotationTypeClass.isAnnotationType());
@@ -321,11 +321,11 @@ public class Src15RepositoryUseTest extends PsiTestCase {
}
private void setupLoadingFilter() {
getJavaFacade().setAssertOnFileLoadingFilter(VirtualFileFilter.ALL);
getJavaFacade().setAssertOnFileLoadingFilter(VirtualFileFilter.ALL, myTestRootDisposable);
}
private void tearDownLoadingFilter() {
getJavaFacade().setAssertOnFileLoadingFilter(VirtualFileFilter.NONE);
getJavaFacade().setAssertOnFileLoadingFilter(VirtualFileFilter.NONE, myTestRootDisposable);
}
@NotNull
@@ -584,11 +584,11 @@ public class SrcRepositoryUseTest extends PsiTestCase{
}
private void teardownLoadingFilter() {
getJavaFacade().setAssertOnFileLoadingFilter(VirtualFileFilter.NONE);
getJavaFacade().setAssertOnFileLoadingFilter(VirtualFileFilter.NONE, myTestRootDisposable);
}
private void setupLoadingFilter() {
getJavaFacade().setAssertOnFileLoadingFilter(VirtualFileFilter.ALL);
getJavaFacade().setAssertOnFileLoadingFilter(VirtualFileFilter.ALL, myTestRootDisposable);
}
public void testAnonymousClass2() throws Exception {
@@ -320,15 +320,11 @@ public abstract class DaemonAnalyzerTestCase extends CodeInsightTestCase {
}
final JavaPsiFacadeEx facade = getJavaFacade();
if (facade != null) {
facade.setAssertOnFileLoadingFilter(myFileTreeAccessFilter); // check repository work
facade.setAssertOnFileLoadingFilter(myFileTreeAccessFilter, myTestRootDisposable); // check repository work
}
Collection<HighlightInfo> infos = doHighlighting();
if (facade != null) {
facade.setAssertOnFileLoadingFilter(VirtualFileFilter.NONE);
}
String text = myEditor.getDocument().getText();
data.checkLineMarkers(DaemonCodeAnalyzerImpl.getLineMarkers(getDocument(getFile()), getProject()), text);
data.checkResult(infos, text);
@@ -105,7 +105,7 @@ public abstract class LightDaemonAnalyzerTestCase extends LightCodeInsightTestCa
}
protected void doTestConfiguredFile(boolean checkWarnings, boolean checkWeakWarnings, boolean checkInfos, @Nullable String filePath) {
getJavaFacade().setAssertOnFileLoadingFilter(VirtualFileFilter.NONE);
getJavaFacade().setAssertOnFileLoadingFilter(VirtualFileFilter.NONE, myTestRootDisposable);
ExpectedHighlightingData data = new ExpectedHighlightingData(getEditor().getDocument(), checkWarnings, checkWeakWarnings, checkInfos);
checkHighlighting(data, composeLocalPath(filePath));
@@ -122,12 +122,10 @@ public abstract class LightDaemonAnalyzerTestCase extends LightCodeInsightTestCa
PsiDocumentManager.getInstance(getProject()).commitAllDocuments();
getFile().getText(); //to load text
myJavaFilesFilter.allowTreeAccessForFile(getVFile());
getJavaFacade().setAssertOnFileLoadingFilter(myJavaFilesFilter); // check repository work
getJavaFacade().setAssertOnFileLoadingFilter(myJavaFilesFilter, myTestRootDisposable); // check repository work
Collection<HighlightInfo> infos = doHighlighting();
getJavaFacade().setAssertOnFileLoadingFilter(VirtualFileFilter.NONE);
data.checkResult(infos, getEditor().getDocument().getText(), filePath);
}
@@ -143,9 +143,15 @@ public class PsiManagerImpl extends PsiManagerEx {
}
@TestOnly
public void setAssertOnFileLoadingFilter(@NotNull VirtualFileFilter filter) {
public void setAssertOnFileLoadingFilter(@NotNull VirtualFileFilter filter, Disposable parentDisposable) {
// Find something to ensure there's no changed files waiting to be processed in repository indices.
myAssertOnFileLoadingFilter = filter;
Disposer.register(parentDisposable, new Disposable() {
@Override
public void dispose() {
myAssertOnFileLoadingFilter = VirtualFileFilter.NONE;
}
});
}
@Override
@@ -1437,17 +1437,12 @@ public class CodeInsightTestFixtureImpl extends BaseFixture implements CodeInsig
List<HighlightInfo> infos;
final long start = System.currentTimeMillis();
try {
((PsiManagerImpl)PsiManager.getInstance(project)).setAssertOnFileLoadingFilter(myJavaFilesFilter);
((PsiManagerImpl)PsiManager.getInstance(project)).setAssertOnFileLoadingFilter(myJavaFilesFilter, myTestRootDisposable);
// ProfilingUtil.startCPUProfiling();
infos = doHighlighting();
removeDuplicatedRangesForInjected(infos);
// ProfilingUtil.captureCPUSnapshot("testing");
}
finally {
((PsiManagerImpl)PsiManager.getInstance(project)).setAssertOnFileLoadingFilter(VirtualFileFilter.NONE);
}
// ProfilingUtil.startCPUProfiling();
infos = doHighlighting();
removeDuplicatedRangesForInjected(infos);
// ProfilingUtil.captureCPUSnapshot("testing");
final long elapsed = System.currentTimeMillis() - start;
data.checkResult(infos, file.getText());
@@ -44,17 +44,12 @@ public abstract class PyMultiFileResolveTestCase extends PyResolveTestCase {
FileType fileType = file.getFileType();
return fileType == PythonFileType.INSTANCE;
}
});
try {
final ResolveResult[] resolveResults = ref.multiResolve(false);
if (resolveResults.length == 0) {
return null;
}
return resolveResults[0].isValidResult() ? resolveResults[0].getElement() : null;
}
finally {
psiManager.setAssertOnFileLoadingFilter(VirtualFileFilter.NONE);
}, myTestRootDisposable);
final ResolveResult[] resolveResults = ref.multiResolve(false);
if (resolveResults.length == 0) {
return null;
}
return resolveResults[0].isValidResult() ? resolveResults[0].getElement() : null;
}
@@ -114,12 +114,7 @@ public class DomStubUsingTest extends DomStubTest {
public void testFileLoading() throws Exception {
XmlFile file = prepareFile("foo.xml");
((PsiManagerImpl)getPsiManager()).setAssertOnFileLoadingFilter(VirtualFileFilter.ALL);
try {
DomManager.getDomManager(getProject()).getFileElement(file, Foo.class);
}
finally {
((PsiManagerImpl)getPsiManager()).setAssertOnFileLoadingFilter(VirtualFileFilter.NONE);
}
((PsiManagerImpl)getPsiManager()).setAssertOnFileLoadingFilter(VirtualFileFilter.ALL, myTestRootDisposable);
DomManager.getDomManager(getProject()).getFileElement(file, Foo.class);
}
}