From fac43c54cc02e12d5773f6f00d37b22ac95da551 Mon Sep 17 00:00:00 2001 From: Jonah Graham Date: Tue, 25 Oct 2022 12:49:34 -0400 Subject: [PATCH] Fix CDescriptorOldTests.testDescriptorCreation instability This old test had a race condition. The failing test was trying to verify that CDTPROJECT_ADDED was received, but if there was a delay in the startup then another event would come in later. So for this test use the first received event, for the remaining tests use the last received event. Part of #117 --- .../tests/CDescriptorOldTests.java | 75 ++++++++++--------- 1 file changed, 39 insertions(+), 36 deletions(-) diff --git a/core/org.eclipse.cdt.core.tests/misc/org/eclipse/cdt/core/cdescriptor/tests/CDescriptorOldTests.java b/core/org.eclipse.cdt.core.tests/misc/org/eclipse/cdt/core/cdescriptor/tests/CDescriptorOldTests.java index aab755134e9..25ad1cc05e9 100644 --- a/core/org.eclipse.cdt.core.tests/misc/org/eclipse/cdt/core/cdescriptor/tests/CDescriptorOldTests.java +++ b/core/org.eclipse.cdt.core.tests/misc/org/eclipse/cdt/core/cdescriptor/tests/CDescriptorOldTests.java @@ -16,6 +16,9 @@ package org.eclipse.cdt.core.cdescriptor.tests; +import java.util.ArrayList; +import java.util.List; + import org.eclipse.cdt.core.CCorePlugin; import org.eclipse.cdt.core.CDescriptorEvent; import org.eclipse.cdt.core.CProjectNature; @@ -55,7 +58,7 @@ public class CDescriptorOldTests extends TestCase { static String projectId = CTestPlugin.PLUGIN_ID + ".TestProject"; static IProject fProject; static CDescriptorListener listener = new CDescriptorListener(); - static CDescriptorEvent fLastEvent; + static final List fEvents = new ArrayList<>(); /** * Constructor for CDescriptorTest. @@ -113,7 +116,7 @@ static public class CDescriptorListener implements ICDescriptorListener { @Override public void descriptorChanged(CDescriptorEvent event) { - fLastEvent = event; + fEvents.add(event); } } @@ -155,11 +158,11 @@ public void run(IProgressMonitor monitor) throws CoreException { }, null); ICDescriptor desc = CCorePlugin.getDefault().getCProjectDescription(fProject, true); - Assert.assertNotNull(fLastEvent); - Assert.assertEquals(fLastEvent.getDescriptor(), desc); - Assert.assertEquals(fLastEvent.getType(), CDescriptorEvent.CDTPROJECT_ADDED); - Assert.assertEquals(fLastEvent.getFlags(), 0); - fLastEvent = null; + Assert.assertFalse(fEvents.isEmpty()); + Assert.assertEquals(fEvents.get(0).getDescriptor(), desc); + Assert.assertEquals(fEvents.get(0).getType(), CDescriptorEvent.CDTPROJECT_ADDED); + Assert.assertEquals(fEvents.get(0).getFlags(), 0); + fEvents.clear(); Assert.assertEquals(fProject, desc.getProject()); Assert.assertEquals("*", desc.getPlatform()); @@ -185,7 +188,7 @@ public void run() { Element data = desc.getProjectData("testElement0"); data.appendChild(data.getOwnerDocument().createElement("test")); desc.saveProjectData(); - fLastEvent = null; + fEvents.clear(); } // https://bugs.eclipse.org/bugs/show_bug.cgi?id=185930 @@ -254,7 +257,7 @@ public void execute(ICDescriptor descriptor, IProgressMonitor monitor) lastLength += threads.length; // Update last lengths to what we expect assertEquals("Iteration count: " + i, lastLength, lengthAfter); - fLastEvent = null; + fEvents.clear(); } } @@ -298,7 +301,7 @@ public void run() { desc.saveProjectData(); t.join(); - fLastEvent = null; + fEvents.clear(); } } @@ -318,11 +321,11 @@ public void testExtensionCreation() throws Exception { ICDescriptor desc = CCorePlugin.getDefault().getCProjectDescription(fProject, true); ICExtensionReference extRef = desc.create("org.eclipse.cdt.testextension", "org.eclipse.cdt.testextensionID"); - Assert.assertNotNull(fLastEvent); - Assert.assertEquals(fLastEvent.getDescriptor(), desc); - Assert.assertEquals(fLastEvent.getType(), CDescriptorEvent.CDTPROJECT_CHANGED); - Assert.assertEquals(fLastEvent.getFlags(), CDescriptorEvent.EXTENSION_CHANGED); - fLastEvent = null; + Assert.assertNotNull(fEvents); + Assert.assertEquals(fEvents.get(fEvents.size() - 1).getDescriptor(), desc); + Assert.assertEquals(fEvents.get(fEvents.size() - 1).getType(), CDescriptorEvent.CDTPROJECT_CHANGED); + Assert.assertEquals(fEvents.get(fEvents.size() - 1).getFlags(), CDescriptorEvent.EXTENSION_CHANGED); + fEvents.clear(); Assert.assertEquals("org.eclipse.cdt.testextension", extRef.getExtension()); Assert.assertEquals("org.eclipse.cdt.testextensionID", extRef.getID()); @@ -341,11 +344,11 @@ public void testExtensionData() throws Exception { ICExtensionReference extRef[] = desc.get("org.eclipse.cdt.testextension"); extRef[0].setExtensionData("testKey", "testValue"); - Assert.assertNotNull(fLastEvent); - Assert.assertEquals(fLastEvent.getDescriptor(), desc); - Assert.assertEquals(fLastEvent.getType(), CDescriptorEvent.CDTPROJECT_CHANGED); - Assert.assertEquals(fLastEvent.getFlags(), 0); - fLastEvent = null; + Assert.assertNotNull(fEvents); + Assert.assertEquals(fEvents.get(fEvents.size() - 1).getDescriptor(), desc); + Assert.assertEquals(fEvents.get(fEvents.size() - 1).getType(), CDescriptorEvent.CDTPROJECT_CHANGED); + Assert.assertEquals(fEvents.get(fEvents.size() - 1).getFlags(), 0); + fEvents.clear(); Assert.assertEquals("testValue", extRef[0].getExtensionData("testKey")); extRef[0].setExtensionData("testKey", null); @@ -357,11 +360,11 @@ public void testExtensionRemove() throws Exception { ICExtensionReference extRef[] = desc.get("org.eclipse.cdt.testextension"); desc.remove(extRef[0]); - Assert.assertNotNull(fLastEvent); - Assert.assertEquals(fLastEvent.getDescriptor(), desc); - Assert.assertEquals(fLastEvent.getType(), CDescriptorEvent.CDTPROJECT_CHANGED); - Assert.assertEquals(fLastEvent.getFlags(), CDescriptorEvent.EXTENSION_CHANGED); - fLastEvent = null; + Assert.assertNotNull(fEvents); + Assert.assertEquals(fEvents.get(fEvents.size() - 1).getDescriptor(), desc); + Assert.assertEquals(fEvents.get(fEvents.size() - 1).getType(), CDescriptorEvent.CDTPROJECT_CHANGED); + Assert.assertEquals(fEvents.get(fEvents.size() - 1).getFlags(), CDescriptorEvent.EXTENSION_CHANGED); + fEvents.clear(); } @@ -371,11 +374,11 @@ public void testProjectDataCreate() throws Exception { data.appendChild(data.getOwnerDocument().createElement("test")); desc.saveProjectData(); - Assert.assertNotNull(fLastEvent); - Assert.assertEquals(fLastEvent.getDescriptor(), desc); - Assert.assertEquals(fLastEvent.getType(), CDescriptorEvent.CDTPROJECT_CHANGED); - Assert.assertEquals(fLastEvent.getFlags(), 0); - fLastEvent = null; + Assert.assertNotNull(fEvents); + Assert.assertEquals(fEvents.get(fEvents.size() - 1).getDescriptor(), desc); + Assert.assertEquals(fEvents.get(fEvents.size() - 1).getType(), CDescriptorEvent.CDTPROJECT_CHANGED); + Assert.assertEquals(fEvents.get(fEvents.size() - 1).getFlags(), 0); + fEvents.clear(); } public void testProjectDataDelete() throws Exception { @@ -386,11 +389,11 @@ public void testProjectDataDelete() throws Exception { data.removeChild(data.getFirstChild()); desc.saveProjectData(); - Assert.assertNotNull(fLastEvent); - Assert.assertEquals(fLastEvent.getDescriptor(), desc); - Assert.assertEquals(fLastEvent.getType(), CDescriptorEvent.CDTPROJECT_CHANGED); - Assert.assertEquals(fLastEvent.getFlags(), 0); - fLastEvent = null; + Assert.assertNotNull(fEvents); + Assert.assertEquals(fEvents.get(fEvents.size() - 1).getDescriptor(), desc); + Assert.assertEquals(fEvents.get(fEvents.size() - 1).getType(), CDescriptorEvent.CDTPROJECT_CHANGED); + Assert.assertEquals(fEvents.get(fEvents.size() - 1).getFlags(), 0); + fEvents.clear(); } public void testProjectStorageDelete() throws Exception { @@ -410,7 +413,7 @@ public void testProjectStorageDelete() throws Exception { desc = CCorePlugin.getDefault().getCProjectDescription(fProject, true); data = desc.getProjectData("testElement"); assertTrue(data.getChildNodes().getLength() == 0); - fLastEvent = null; + fEvents.clear(); } }