1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-04-21 21:52:10 +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 #117
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

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.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();
}

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.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);

View file

@ -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 {

View file

@ -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<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) {
filesToDeleteOnTearDown.add(file);
}