diff --git a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/internal/index/tests/Bug246129.java b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/internal/index/tests/Bug246129.java index 09cbafbb0c1..03b42ad1377 100644 --- a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/internal/index/tests/Bug246129.java +++ b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/internal/index/tests/Bug246129.java @@ -32,7 +32,9 @@ import org.eclipse.cdt.core.model.ICProject; import org.eclipse.cdt.core.model.IPathEntry; import org.eclipse.cdt.core.model.ITranslationUnit; import org.eclipse.cdt.core.testplugin.CProjectHelper; +import org.eclipse.cdt.core.testplugin.ResourceHelper; import org.eclipse.cdt.core.testplugin.TestScannerProvider; +import org.eclipse.cdt.core.testplugin.util.BaseTestCase5; import org.eclipse.cdt.internal.core.pdom.indexer.IndexerPreferences; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IFolder; @@ -147,7 +149,9 @@ public class Bug246129 extends IndexTestBase { fExternalIncludeFolder.delete(); fTmpDir.delete(); - + ResourceHelper.cleanUp(getName()); + CProjectHelper.delete(fProject); + BaseTestCase5.assertWorkspaceIsEmpty(); super.tearDown(); } diff --git a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/internal/index/tests/IndexSearchTest.java b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/internal/index/tests/IndexSearchTest.java index e67be0df2ce..c89160033c9 100644 --- a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/internal/index/tests/IndexSearchTest.java +++ b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/internal/index/tests/IndexSearchTest.java @@ -32,6 +32,7 @@ import org.eclipse.cdt.core.index.IIndexBinding; import org.eclipse.cdt.core.index.IndexFilter; import org.eclipse.cdt.core.model.ICProject; import org.eclipse.cdt.core.testplugin.CProjectHelper; +import org.eclipse.cdt.core.testplugin.util.BaseTestCase5; import org.eclipse.cdt.internal.core.index.CIndex; import org.eclipse.cdt.internal.core.pdom.PDOM; import org.eclipse.cdt.internal.core.pdom.dom.PDOMBinding; @@ -68,14 +69,12 @@ public class IndexSearchTest extends IndexTestBase { @Override public void tearDown() throws Exception { fIndex.releaseReadLock(); + CProjectHelper.delete(fProject); + + BaseTestCase5.assertWorkspaceIsEmpty(); super.tearDown(); } - public void deleteProject() { - if (fProject != null) { - CProjectHelper.delete(fProject); - } - } private void checkIsClass(IIndexBinding binding) { assertTrue(binding instanceof ICPPClassType); diff --git a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/internal/index/tests/IndexTestBase.java b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/internal/index/tests/IndexTestBase.java index 84c535968d4..25028a3432d 100644 --- a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/internal/index/tests/IndexTestBase.java +++ b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/internal/index/tests/IndexTestBase.java @@ -41,7 +41,7 @@ public abstract class IndexTestBase extends BaseTestCase { workspace.run(new IWorkspaceRunnable() { @Override public void run(IProgressMonitor monitor) throws CoreException { - String name = "IndexTest_" + System.currentTimeMillis(); + String name = "IndexTest_" + getName() + "_" + System.currentTimeMillis(); if (useCpp) { result[0] = CProjectHelper.createCCProject(name, null, IPDOMManager.ID_NO_INDEXER); } else { diff --git a/core/org.eclipse.cdt.core.tests/suite/org/eclipse/cdt/core/testplugin/util/BaseTestCase5.java b/core/org.eclipse.cdt.core.tests/suite/org/eclipse/cdt/core/testplugin/util/BaseTestCase5.java index 36cad3fdf69..2cd4278fc83 100644 --- a/core/org.eclipse.cdt.core.tests/suite/org/eclipse/cdt/core/testplugin/util/BaseTestCase5.java +++ b/core/org.eclipse.cdt.core.tests/suite/org/eclipse/cdt/core/testplugin/util/BaseTestCase5.java @@ -24,7 +24,10 @@ import static org.junit.jupiter.api.Assertions.fail; import java.io.File; import java.io.IOException; import java.util.ArrayDeque; +import java.util.ArrayList; +import java.util.Arrays; import java.util.Deque; +import java.util.List; import org.eclipse.cdt.core.dom.ast.IASTName; import org.eclipse.cdt.core.dom.ast.IValue; @@ -39,12 +42,14 @@ import org.eclipse.cdt.internal.core.pdom.CModelListener; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IResource; +import org.eclipse.core.resources.IWorkspaceRoot; import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.MultiStatus; import org.eclipse.core.runtime.NullProgressMonitor; import org.eclipse.core.runtime.Status; import org.eclipse.core.runtime.jobs.Job; +import org.junit.jupiter.api.AfterAll; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Tag; @@ -140,6 +145,33 @@ public abstract class BaseTestCase5 { BaseTestCase5.removeLeftOverProjects(); } + /** + * assert that the virtual workspace is empty and that + * there are no files left on disk in the workspace directory + * this latter one is important because a new project can + * be created with the same named and then those old files + * will end up part of the project unexpectedly + */ + @AfterAll + public static void assertWorkspaceIsEmpty() throws CoreException { + IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot(); + // use lists because error messages are nicer + assertEquals(List.of(), Arrays.asList(root.members())); + + File workspaceFile = root.getLocation().toFile(); + + // Special permission for an empty "tmp" directory so + // that ResourceHelper.createTemporaryFolder() does not + // need to be reworked + File file = new File(workspaceFile, "tmp"); + List permitted = new ArrayList<>(List.of(".metadata")); + if (file.isDirectory()) { + assertEquals(List.of(), Arrays.asList(file.list())); + permitted.add("tmp"); + } + assertEquals(List.of(), Arrays.asList(workspaceFile.list((dir, name) -> !permitted.contains(name)))); + } + protected void deleteOnTearDown(File file) { filesToDeleteOnTearDown.add(file); }