1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-07-05 16:15:25 +02:00

Fail test if there are any files left over in the workspace directory

Some tests sort of clean up after themselves, but still leave files
around.

Part of 
This commit is contained in:
Jonah Graham 2022-10-26 21:51:56 -04:00
parent 46e9c97372
commit 858a194b68
4 changed files with 42 additions and 7 deletions
core/org.eclipse.cdt.core.tests
parser/org/eclipse/cdt/internal/index/tests
suite/org/eclipse/cdt/core/testplugin/util

View file

@ -32,7 +32,9 @@ import org.eclipse.cdt.core.model.ICProject;
import org.eclipse.cdt.core.model.IPathEntry; import org.eclipse.cdt.core.model.IPathEntry;
import org.eclipse.cdt.core.model.ITranslationUnit; import org.eclipse.cdt.core.model.ITranslationUnit;
import org.eclipse.cdt.core.testplugin.CProjectHelper; 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.TestScannerProvider;
import org.eclipse.cdt.core.testplugin.util.BaseTestCase5;
import org.eclipse.cdt.internal.core.pdom.indexer.IndexerPreferences; import org.eclipse.cdt.internal.core.pdom.indexer.IndexerPreferences;
import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IFolder; import org.eclipse.core.resources.IFolder;
@ -147,7 +149,9 @@ public class Bug246129 extends IndexTestBase {
fExternalIncludeFolder.delete(); fExternalIncludeFolder.delete();
fTmpDir.delete(); fTmpDir.delete();
ResourceHelper.cleanUp(getName());
CProjectHelper.delete(fProject);
BaseTestCase5.assertWorkspaceIsEmpty();
super.tearDown(); super.tearDown();
} }

View file

@ -32,6 +32,7 @@ import org.eclipse.cdt.core.index.IIndexBinding;
import org.eclipse.cdt.core.index.IndexFilter; import org.eclipse.cdt.core.index.IndexFilter;
import org.eclipse.cdt.core.model.ICProject; import org.eclipse.cdt.core.model.ICProject;
import org.eclipse.cdt.core.testplugin.CProjectHelper; 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.index.CIndex;
import org.eclipse.cdt.internal.core.pdom.PDOM; import org.eclipse.cdt.internal.core.pdom.PDOM;
import org.eclipse.cdt.internal.core.pdom.dom.PDOMBinding; import org.eclipse.cdt.internal.core.pdom.dom.PDOMBinding;
@ -68,14 +69,12 @@ public class IndexSearchTest extends IndexTestBase {
@Override @Override
public void tearDown() throws Exception { public void tearDown() throws Exception {
fIndex.releaseReadLock(); fIndex.releaseReadLock();
CProjectHelper.delete(fProject);
BaseTestCase5.assertWorkspaceIsEmpty();
super.tearDown(); super.tearDown();
} }
public void deleteProject() {
if (fProject != null) {
CProjectHelper.delete(fProject);
}
}
private void checkIsClass(IIndexBinding binding) { private void checkIsClass(IIndexBinding binding) {
assertTrue(binding instanceof ICPPClassType); assertTrue(binding instanceof ICPPClassType);

View file

@ -41,7 +41,7 @@ public abstract class IndexTestBase extends BaseTestCase {
workspace.run(new IWorkspaceRunnable() { workspace.run(new IWorkspaceRunnable() {
@Override @Override
public void run(IProgressMonitor monitor) throws CoreException { public void run(IProgressMonitor monitor) throws CoreException {
String name = "IndexTest_" + System.currentTimeMillis(); String name = "IndexTest_" + getName() + "_" + System.currentTimeMillis();
if (useCpp) { if (useCpp) {
result[0] = CProjectHelper.createCCProject(name, null, IPDOMManager.ID_NO_INDEXER); result[0] = CProjectHelper.createCCProject(name, null, IPDOMManager.ID_NO_INDEXER);
} else { } else {

View file

@ -24,7 +24,10 @@ import static org.junit.jupiter.api.Assertions.fail;
import java.io.File; import java.io.File;
import java.io.IOException; import java.io.IOException;
import java.util.ArrayDeque; import java.util.ArrayDeque;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Deque; import java.util.Deque;
import java.util.List;
import org.eclipse.cdt.core.dom.ast.IASTName; import org.eclipse.cdt.core.dom.ast.IASTName;
import org.eclipse.cdt.core.dom.ast.IValue; 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.IFile;
import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IResource; import org.eclipse.core.resources.IResource;
import org.eclipse.core.resources.IWorkspaceRoot;
import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.MultiStatus; import org.eclipse.core.runtime.MultiStatus;
import org.eclipse.core.runtime.NullProgressMonitor; import org.eclipse.core.runtime.NullProgressMonitor;
import org.eclipse.core.runtime.Status; import org.eclipse.core.runtime.Status;
import org.eclipse.core.runtime.jobs.Job; import org.eclipse.core.runtime.jobs.Job;
import org.junit.jupiter.api.AfterAll;
import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Tag; import org.junit.jupiter.api.Tag;
@ -140,6 +145,33 @@ public abstract class BaseTestCase5 {
BaseTestCase5.removeLeftOverProjects(); 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<String> 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) { protected void deleteOnTearDown(File file) {
filesToDeleteOnTearDown.add(file); filesToDeleteOnTearDown.add(file);
} }