From a4df78acf6b5c3a207e1c28d98075d5c9a7a93ae Mon Sep 17 00:00:00 2001 From: Nikita Skvortsov Date: Tue, 16 Apr 2019 13:00:47 +0300 Subject: [PATCH] [maven] improve test teardown safety --- .../idea/maven/MavenImportingTestCase.java | 24 +++++------ .../jetbrains/idea/maven/MavenTestCase.java | 40 +++++++++---------- 2 files changed, 30 insertions(+), 34 deletions(-) diff --git a/plugins/maven/src/test/java/org/jetbrains/idea/maven/MavenImportingTestCase.java b/plugins/maven/src/test/java/org/jetbrains/idea/maven/MavenImportingTestCase.java index a2ee815d99b3..4febe8b40216 100644 --- a/plugins/maven/src/test/java/org/jetbrains/idea/maven/MavenImportingTestCase.java +++ b/plugins/maven/src/test/java/org/jetbrains/idea/maven/MavenImportingTestCase.java @@ -22,6 +22,7 @@ import com.intellij.openapi.vfs.VfsUtilCore; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.openapi.vfs.newvfs.impl.VfsRootAccess; import com.intellij.testFramework.IdeaTestUtil; +import com.intellij.testFramework.RunAll; import com.intellij.util.PathUtil; import com.intellij.util.ui.UIUtil; import org.intellij.lang.annotations.Language; @@ -59,20 +60,15 @@ public abstract class MavenImportingTestCase extends MavenTestCase { @Override protected void tearDown() throws Exception { - try { - JavaAwareProjectJdkTableImpl.removeInternalJdkInTests(); - Messages.setTestDialog(TestDialog.DEFAULT); - removeFromLocalRepository("test"); - ExternalSystemTestCase.deleteBuildSystemDirectory(); - } - catch (Throwable e) { - addSuppressedException(e); - } - finally { - myProjectsManager = null; - myProjectsTree = null; - super.tearDown(); - } + new RunAll( + () -> JavaAwareProjectJdkTableImpl.removeInternalJdkInTests(), + () -> Messages.setTestDialog(TestDialog.DEFAULT), + () -> removeFromLocalRepository("test"), + () -> ExternalSystemTestCase.deleteBuildSystemDirectory(), + () -> myProjectsManager = null, + () -> myProjectsTree = null, + () -> super.tearDown() + ).run(); } @Override diff --git a/plugins/maven/src/test/java/org/jetbrains/idea/maven/MavenTestCase.java b/plugins/maven/src/test/java/org/jetbrains/idea/maven/MavenTestCase.java index dda021d145cd..737b78d3e642 100644 --- a/plugins/maven/src/test/java/org/jetbrains/idea/maven/MavenTestCase.java +++ b/plugins/maven/src/test/java/org/jetbrains/idea/maven/MavenTestCase.java @@ -20,6 +20,7 @@ import com.intellij.openapi.vfs.VirtualFile; import com.intellij.rt.execution.junit.FileComparisonFailure; import com.intellij.testFramework.EdtTestUtil; import com.intellij.testFramework.PsiTestUtil; +import com.intellij.testFramework.RunAll; import com.intellij.testFramework.UsefulTestCase; import com.intellij.testFramework.fixtures.IdeaProjectTestFixture; import com.intellij.testFramework.fixtures.IdeaTestFixtureFactory; @@ -103,26 +104,25 @@ public abstract class MavenTestCase extends UsefulTestCase { @Override protected void tearDown() throws Exception { - try { - MavenServerManager.getInstance().shutdown(true); - MavenArtifactDownloader.awaitQuiescence(100, TimeUnit.SECONDS); - myProject = null; - EdtTestUtil.runInEdtAndWait(() -> tearDownFixtures()); - - MavenIndicesManager.getInstance().clear(); - } - finally { - super.tearDown(); - FileUtil.delete(myDir); - // cannot use reliably the result of the com.intellij.openapi.util.io.FileUtil.delete() method - // because com.intellij.openapi.util.io.FileUtilRt.deleteRecursivelyNIO() does not honor this contract - if (myDir.exists()) { - System.err.println("Cannot delete " + myDir); - //printDirectoryContent(myDir); - myDir.deleteOnExit(); - } - resetClassFields(getClass()); - } + new RunAll( + () -> MavenServerManager.getInstance().shutdown(true), + () -> MavenArtifactDownloader.awaitQuiescence(100, TimeUnit.SECONDS), + () -> myProject = null, + () -> EdtTestUtil.runInEdtAndWait(() -> tearDownFixtures()), + () -> MavenIndicesManager.getInstance().clear(), + () -> super.tearDown(), + () -> { + FileUtil.delete(myDir); + // cannot use reliably the result of the com.intellij.openapi.util.io.FileUtil.delete() method + // because com.intellij.openapi.util.io.FileUtilRt.deleteRecursivelyNIO() does not honor this contract + if (myDir.exists()) { + System.err.println("Cannot delete " + myDir); + //printDirectoryContent(myDir); + myDir.deleteOnExit(); + } + }, + () -> resetClassFields(getClass()) + ).run(); } private void ensureTempDirCreated() throws IOException {