Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPawel Piech2010-02-26 19:09:04 +0000
committerPawel Piech2010-02-26 19:09:04 +0000
commitaf98c3645fb2064df6e6c8a517989c2c54ef92c6 (patch)
tree95284b524808eadf5a03d1cf1caffa8affe13bc2 /org.eclipse.debug.tests
parent6ca8251c8c4154667f4d4ece629896788019a666 (diff)
downloadeclipse.platform.debug-af98c3645fb2064df6e6c8a517989c2c54ef92c6.tar.gz
eclipse.platform.debug-af98c3645fb2064df6e6c8a517989c2c54ef92c6.tar.xz
eclipse.platform.debug-af98c3645fb2064df6e6c8a517989c2c54ef92c6.zip
[304066] Added more failure reporting to tests.
Diffstat (limited to 'org.eclipse.debug.tests')
-rw-r--r--org.eclipse.debug.tests/src/org/eclipe/debug/tests/viewer/model/CheckTests.java9
-rw-r--r--org.eclipse.debug.tests/src/org/eclipe/debug/tests/viewer/model/ContentTests.java9
-rw-r--r--org.eclipse.debug.tests/src/org/eclipe/debug/tests/viewer/model/DeltaTests.java9
-rw-r--r--org.eclipse.debug.tests/src/org/eclipe/debug/tests/viewer/model/ITestModelUpdatesListenerConstants.java39
-rw-r--r--org.eclipse.debug.tests/src/org/eclipe/debug/tests/viewer/model/PerformanceTests.java9
-rw-r--r--org.eclipse.debug.tests/src/org/eclipe/debug/tests/viewer/model/StateTests.java11
-rw-r--r--org.eclipse.debug.tests/src/org/eclipe/debug/tests/viewer/model/TestModelUpdatesListener.java203
-rw-r--r--org.eclipse.debug.tests/src/org/eclipe/debug/tests/viewer/model/UpdateTests.java30
8 files changed, 242 insertions, 77 deletions
diff --git a/org.eclipse.debug.tests/src/org/eclipe/debug/tests/viewer/model/CheckTests.java b/org.eclipse.debug.tests/src/org/eclipe/debug/tests/viewer/model/CheckTests.java
index 13b56003c..c6bef8d6a 100644
--- a/org.eclipse.debug.tests/src/org/eclipe/debug/tests/viewer/model/CheckTests.java
+++ b/org.eclipse.debug.tests/src/org/eclipe/debug/tests/viewer/model/CheckTests.java
@@ -13,6 +13,7 @@ package org.eclipe.debug.tests.viewer.model;
import junit.framework.TestCase;
import org.eclipe.debug.tests.viewer.model.TestModel.TestElement;
+import org.eclipse.core.commands.ExecutionException;
import org.eclipse.debug.internal.ui.viewers.model.ITreeModelContentProviderTarget;
import org.eclipse.debug.internal.ui.viewers.model.ITreeModelViewer;
import org.eclipse.debug.internal.ui.viewers.model.provisional.ModelDelta;
@@ -70,6 +71,14 @@ abstract public class CheckTests extends TestCase {
while (!fShell.isDisposed()) if (!fDisplay.readAndDispatch ()) fDisplay.sleep ();
}
+ protected void runTest() throws Throwable {
+ try {
+ super.runTest();
+ } catch (Throwable t) {
+ throw new ExecutionException("Test failed: " + t.getMessage() + "\n fListener = " + fListener.toString(), t);
+ }
+ }
+
public void testSimpleSingleLevel() {
// Create the model with test data
TestModel model = TestModel.simpleSingleLevel();
diff --git a/org.eclipse.debug.tests/src/org/eclipe/debug/tests/viewer/model/ContentTests.java b/org.eclipse.debug.tests/src/org/eclipe/debug/tests/viewer/model/ContentTests.java
index 3c1ded4f3..1c1fcca1b 100644
--- a/org.eclipse.debug.tests/src/org/eclipe/debug/tests/viewer/model/ContentTests.java
+++ b/org.eclipse.debug.tests/src/org/eclipe/debug/tests/viewer/model/ContentTests.java
@@ -12,6 +12,7 @@ package org.eclipe.debug.tests.viewer.model;
import junit.framework.TestCase;
+import org.eclipse.core.commands.ExecutionException;
import org.eclipse.debug.internal.ui.viewers.model.ITreeModelContentProviderTarget;
import org.eclipse.debug.internal.ui.viewers.model.ITreeModelViewer;
import org.eclipse.jface.viewers.TreePath;
@@ -67,6 +68,14 @@ abstract public class ContentTests extends TestCase {
while (!fShell.isDisposed()) if (!fDisplay.readAndDispatch ()) fDisplay.sleep ();
}
+ protected void runTest() throws Throwable {
+ try {
+ super.runTest();
+ } catch (Throwable t) {
+ throw new ExecutionException("Test failed: " + t.getMessage() + "\n fListener = " + fListener.toString(), t);
+ }
+ }
+
public void testSimpleSingleLevel() {
// Create the model with test data
TestModel model = TestModel.simpleSingleLevel();
diff --git a/org.eclipse.debug.tests/src/org/eclipe/debug/tests/viewer/model/DeltaTests.java b/org.eclipse.debug.tests/src/org/eclipe/debug/tests/viewer/model/DeltaTests.java
index 63d1ca7bc..f71982d79 100644
--- a/org.eclipse.debug.tests/src/org/eclipe/debug/tests/viewer/model/DeltaTests.java
+++ b/org.eclipse.debug.tests/src/org/eclipe/debug/tests/viewer/model/DeltaTests.java
@@ -17,6 +17,7 @@ import junit.framework.Assert;
import junit.framework.TestCase;
import org.eclipe.debug.tests.viewer.model.TestModel.TestElement;
+import org.eclipse.core.commands.ExecutionException;
import org.eclipse.debug.internal.ui.viewers.model.ITreeModelContentProviderTarget;
import org.eclipse.debug.internal.ui.viewers.model.ITreeModelViewer;
import org.eclipse.debug.internal.ui.viewers.model.provisional.IModelDelta;
@@ -73,6 +74,14 @@ abstract public class DeltaTests extends TestCase {
while (!fShell.isDisposed()) if (!fDisplay.readAndDispatch ()) fDisplay.sleep ();
}
+ protected void runTest() throws Throwable {
+ try {
+ super.runTest();
+ } catch (Throwable t) {
+ throw new ExecutionException("Test failed: " + t.getMessage() + "\n fListener = " + fListener.toString(), t);
+ }
+ }
+
public void testUpdateLabel() {
//TreeModelViewerAutopopulateAgent autopopulateAgent = new TreeModelViewerAutopopulateAgent(fViewer);
diff --git a/org.eclipse.debug.tests/src/org/eclipe/debug/tests/viewer/model/ITestModelUpdatesListenerConstants.java b/org.eclipse.debug.tests/src/org/eclipe/debug/tests/viewer/model/ITestModelUpdatesListenerConstants.java
index 10aa25c03..af922ef60 100644
--- a/org.eclipse.debug.tests/src/org/eclipe/debug/tests/viewer/model/ITestModelUpdatesListenerConstants.java
+++ b/org.eclipse.debug.tests/src/org/eclipe/debug/tests/viewer/model/ITestModelUpdatesListenerConstants.java
@@ -17,24 +17,31 @@ package org.eclipe.debug.tests.viewer.model;
*/
public interface ITestModelUpdatesListenerConstants {
- public static final int LABEL_UPDATES_COMPLETE = 0X0001;
- public static final int CONTENT_UPDATES_COMPLETE = 0X0002;
- public static final int LABEL_UPDATES = 0X0004;
- public static final int HAS_CHILDREN_UPDATES = 0X0008;
- public static final int CHILDREN_COUNT_UPDATES = 0X0010;
- public static final int CHILDREN_UPDATES = 0X0020;
- public static final int MODEL_CHANGED_COMPLETE = 0X0040;
- public static final int MODEL_PROXIES_INSTALLED = 0X0080;
- public static final int STATE_SAVE_COMPLETE = 0X0100;
- public static final int STATE_RESTORE_COMPLETE = 0X0200;
- public static final int STATE_UPDATES = 0X0400;
+ public static final int LABEL_UPDATES_COMPLETE = 0X00000001;
+ public static final int CONTENT_UPDATES_COMPLETE = 0X00000002;
+ public static final int LABEL_UPDATES = 0X00000004;
+ public static final int LABEL_UPDATES_STARTED = 0X00040000;
+ public static final int HAS_CHILDREN_UPDATES = 0X00000008;
+ public static final int HAS_CHILDREN_UPDATES_STARTED = 0X00080000;
+ public static final int CHILD_COUNT_UPDATES = 0X00000010;
+ public static final int CHILD_COUNT_UPDATES_STARTED = 0X00100000;
+ public static final int CHILDREN_UPDATES = 0X00000020;
+ public static final int CHILDREN_UPDATES_STARTED = 0X00200000;
+ public static final int MODEL_CHANGED_COMPLETE = 0X00000040;
+ public static final int MODEL_PROXIES_INSTALLED = 0X00000080;
+ public static final int STATE_SAVE_COMPLETE = 0X00000100;
+ public static final int STATE_RESTORE_COMPLETE = 0X00000200;
+ public static final int STATE_UPDATES = 0X00000400;
+ public static final int STATE_UPDATES_STARTED = 0X04000000;
- public static final int VIEWER_UPDATES_RUNNING = 0X0800;
- public static final int LABEL_UPDATES_RUNNING = 0X1000;
-
- public static final int LABEL_COMPLETE = LABEL_UPDATES_COMPLETE | LABEL_UPDATES;
+ public static final int VIEWER_UPDATES_RUNNING = 0X00001000;
+ public static final int LABEL_UPDATES_RUNNING = 0X00002000;
+
+ public static final int VIEWER_UPDATES_STARTED = HAS_CHILDREN_UPDATES_STARTED | CHILD_COUNT_UPDATES_STARTED | CHILDREN_UPDATES_STARTED;
+
+ public static final int LABEL_COMPLETE = LABEL_UPDATES_COMPLETE | LABEL_UPDATES | LABEL_UPDATES_RUNNING;
public static final int CONTENT_COMPLETE =
- CONTENT_UPDATES_COMPLETE | HAS_CHILDREN_UPDATES | CHILDREN_COUNT_UPDATES | CHILDREN_UPDATES;
+ CONTENT_UPDATES_COMPLETE | HAS_CHILDREN_UPDATES | CHILD_COUNT_UPDATES | CHILDREN_UPDATES | VIEWER_UPDATES_RUNNING;
public static final int ALL_UPDATES_COMPLETE = LABEL_COMPLETE | CONTENT_COMPLETE | MODEL_PROXIES_INSTALLED | LABEL_UPDATES_RUNNING | VIEWER_UPDATES_RUNNING;
}
diff --git a/org.eclipse.debug.tests/src/org/eclipe/debug/tests/viewer/model/PerformanceTests.java b/org.eclipse.debug.tests/src/org/eclipe/debug/tests/viewer/model/PerformanceTests.java
index 46c33bda5..b8d47d390 100644
--- a/org.eclipse.debug.tests/src/org/eclipe/debug/tests/viewer/model/PerformanceTests.java
+++ b/org.eclipse.debug.tests/src/org/eclipe/debug/tests/viewer/model/PerformanceTests.java
@@ -13,6 +13,7 @@ package org.eclipe.debug.tests.viewer.model;
import junit.framework.TestCase;
import org.eclipe.debug.tests.viewer.model.TestModel.TestElement;
+import org.eclipse.core.commands.ExecutionException;
import org.eclipse.debug.internal.ui.viewers.model.ITreeModelContentProviderTarget;
import org.eclipse.debug.internal.ui.viewers.model.ITreeModelViewer;
import org.eclipse.debug.internal.ui.viewers.model.provisional.IModelDelta;
@@ -67,6 +68,14 @@ abstract public class PerformanceTests extends TestCase implements ITestModelUpd
fShell.close();
while (!fShell.isDisposed()) if (!fDisplay.readAndDispatch ()) fDisplay.sleep ();
}
+
+ protected void runTest() throws Throwable {
+ try {
+ super.runTest();
+ } catch (Throwable t) {
+ throw new ExecutionException("Test failed: " + t.getMessage() + "\n fListener = " + fListener.toString(), t);
+ }
+ }
/**
* Depth (size) of the test model to be used in the tests. This number allows
diff --git a/org.eclipse.debug.tests/src/org/eclipe/debug/tests/viewer/model/StateTests.java b/org.eclipse.debug.tests/src/org/eclipe/debug/tests/viewer/model/StateTests.java
index 1e52875e2..f1c79cb2f 100644
--- a/org.eclipse.debug.tests/src/org/eclipe/debug/tests/viewer/model/StateTests.java
+++ b/org.eclipse.debug.tests/src/org/eclipe/debug/tests/viewer/model/StateTests.java
@@ -18,6 +18,7 @@ import junit.framework.Assert;
import junit.framework.TestCase;
import org.eclipe.debug.tests.viewer.model.TestModel.TestElement;
+import org.eclipse.core.commands.ExecutionException;
import org.eclipse.debug.internal.ui.viewers.model.ITreeModelContentProviderTarget;
import org.eclipse.debug.internal.ui.viewers.model.ITreeModelViewer;
import org.eclipse.debug.internal.ui.viewers.model.provisional.IModelDelta;
@@ -76,6 +77,14 @@ abstract public class StateTests extends TestCase implements ITestModelUpdatesLi
while (!fShell.isDisposed()) if (!fDisplay.readAndDispatch ()) fDisplay.sleep ();
}
+ protected void runTest() throws Throwable {
+ try {
+ super.runTest();
+ } catch (Throwable t) {
+ throw new ExecutionException("Test failed: " + t.getMessage() + "\n fListener = " + fListener.toString(), t);
+ }
+ }
+
protected ITreeModelContentProviderTarget getCTargetViewer() {
return (ITreeModelContentProviderTarget)fViewer;
}
@@ -226,7 +235,7 @@ abstract public class StateTests extends TestCase implements ITestModelUpdatesLi
TreePath elementPath = model.findElement(element.getLabel());
fListener.addUpdates(
elementPath, element, 1,
- CHILDREN_COUNT_UPDATES | (waitForAllUpdates ? CHILDREN_UPDATES : 0) );
+ CHILD_COUNT_UPDATES | (waitForAllUpdates ? CHILDREN_UPDATES : 0) );
delta = delta.addNode(element, index, IModelDelta.EXPAND, element.getChildren().length);
element = element.getChildren()[0];
index = 0;
diff --git a/org.eclipse.debug.tests/src/org/eclipe/debug/tests/viewer/model/TestModelUpdatesListener.java b/org.eclipse.debug.tests/src/org/eclipe/debug/tests/viewer/model/TestModelUpdatesListener.java
index 75b4ef81a..fdca40864 100644
--- a/org.eclipse.debug.tests/src/org/eclipe/debug/tests/viewer/model/TestModelUpdatesListener.java
+++ b/org.eclipse.debug.tests/src/org/eclipe/debug/tests/viewer/model/TestModelUpdatesListener.java
@@ -42,13 +42,25 @@ public class TestModelUpdatesListener
private final ITreeModelViewer fViewer;
private boolean fFailOnRedundantUpdates;
+ private Set fRedundantUpdates = new HashSet();
+
private boolean fFailOnMultipleModelUpdateSequences;
+ private boolean fMultipleModelUpdateSequencesObserved;
private boolean fFailOnMultipleLabelUpdateSequences;
+ private boolean fMultipleLabelUpdateSequencesObserved;
- private Set fHasChildrenUpdates = new HashSet();
- private Map fChildrenUpdates = new HashMap();
- private Set fChildCountUpdates = new HashSet();
+ private Set fHasChildrenUpdatesScheduled = new HashSet();
+ private Set fHasChildrenUpdatesRunning = new HashSet();
+ private Set fHasChildrenUpdatesCompleted = new HashSet();
+ private Map fChildrenUpdatesScheduled = new HashMap();
+ private Set fChildrenUpdatesRunning = new HashSet();
+ private Set fChildrenUpdatesCompleted = new HashSet();
+ private Set fChildCountUpdatesScheduled = new HashSet();
+ private Set fChildCountUpdatesRunning = new HashSet();
+ private Set fChildCountUpdatesCompleted = new HashSet();
private Set fLabelUpdates = new HashSet();
+ private Set fLabelUpdatesRunning = new HashSet();
+ private Set fLabelUpdatesCompleted = new HashSet();
private Set fProxyModels = new HashSet();
private Set fStateUpdates = new HashSet();
private boolean fViewerUpdatesComplete;
@@ -56,9 +68,9 @@ public class TestModelUpdatesListener
private boolean fModelChangedComplete;
private boolean fStateSaveComplete;
private boolean fStateRestoreComplete;
- private int fViewerUpdatesRunning;
- private int fLabelUpdatesRunning;
- private int fTimeoutInterval = 600000;
+ private int fViewerUpdatesCounter;
+ private int fLabelUpdatesCounter;
+ private int fTimeoutInterval = 60000;
private long fTimeoutTime;
@@ -121,10 +133,21 @@ public class TestModelUpdatesListener
}
public void reset() {
- fHasChildrenUpdates.clear();
- fChildrenUpdates.clear();
- fChildCountUpdates.clear();
+ fRedundantUpdates.clear();
+ fMultipleLabelUpdateSequencesObserved = false;
+ fMultipleModelUpdateSequencesObserved = false;
+ fHasChildrenUpdatesScheduled.clear();
+ fHasChildrenUpdatesRunning.clear();
+ fHasChildrenUpdatesCompleted.clear();
+ fChildrenUpdatesScheduled.clear();
+ fChildrenUpdatesRunning.clear();
+ fChildrenUpdatesCompleted.clear();
+ fChildCountUpdatesScheduled.clear();
+ fChildCountUpdatesRunning.clear();
+ fChildCountUpdatesCompleted.clear();
fLabelUpdates.clear();
+ fLabelUpdatesRunning.clear();
+ fLabelUpdatesCompleted.clear();
fProxyModels.clear();
fViewerUpdatesComplete = false;
fLabelUpdatesComplete = false;
@@ -139,36 +162,36 @@ public class TestModelUpdatesListener
}
public void addHasChildrenUpdate(TreePath path) {
- fHasChildrenUpdates.add(path);
+ fHasChildrenUpdatesScheduled.add(path);
}
public void removeHasChildrenUpdate(TreePath path) {
- fHasChildrenUpdates.remove(path);
+ fHasChildrenUpdatesScheduled.remove(path);
}
public void addChildreCountUpdate(TreePath path) {
- fChildCountUpdates.add(path);
+ fChildCountUpdatesScheduled.add(path);
}
public void removeChildreCountUpdate(TreePath path) {
- fChildCountUpdates.remove(path);
+ fChildCountUpdatesScheduled.remove(path);
}
public void addChildreUpdate(TreePath path, int index) {
- Set childrenIndexes = (Set)fChildrenUpdates.get(path);
+ Set childrenIndexes = (Set)fChildrenUpdatesScheduled.get(path);
if (childrenIndexes == null) {
childrenIndexes = new TreeSet();
- fChildrenUpdates.put(path, childrenIndexes);
+ fChildrenUpdatesScheduled.put(path, childrenIndexes);
}
childrenIndexes.add(new Integer(index));
}
public void removeChildrenUpdate(TreePath path, int index) {
- Set childrenIndexes = (Set)fChildrenUpdates.get(path);
+ Set childrenIndexes = (Set)fChildrenUpdatesScheduled.get(path);
if (childrenIndexes != null) {
childrenIndexes.remove(new Integer(index));
if (childrenIndexes.isEmpty()) {
- fChildrenUpdates.remove(path);
+ fChildrenUpdatesScheduled.remove(path);
}
}
}
@@ -199,22 +222,22 @@ public class TestModelUpdatesListener
fLabelUpdates.add(path);
}
if ((flags & HAS_CHILDREN_UPDATES) != 0) {
- fHasChildrenUpdates.add(path);
+ fHasChildrenUpdatesScheduled.add(path);
}
}
if (levels-- != 0) {
TestElement[] children = element.getChildren();
if (children.length > 0 && (viewer == null || path.getSegmentCount() == 0 || viewer.getExpandedState(path))) {
- if ((flags & CHILDREN_COUNT_UPDATES) != 0) {
- fChildCountUpdates.add(path);
+ if ((flags & CHILD_COUNT_UPDATES) != 0) {
+ fChildCountUpdatesScheduled.add(path);
}
if ((flags & CHILDREN_UPDATES) != 0) {
Set childrenIndexes = new HashSet();
for (int i = 0; i < children.length; i++) {
childrenIndexes.add(new Integer(i));
}
- fChildrenUpdates.put(path, childrenIndexes);
+ fChildrenUpdatesScheduled.put(path, childrenIndexes);
}
if ((flags & STATE_UPDATES) != 0 && viewer != null) {
@@ -253,23 +276,45 @@ public class TestModelUpdatesListener
throw new RuntimeException("Timed Out: " + toString(flags));
}
+ if (fFailOnRedundantUpdates && !fRedundantUpdates.isEmpty()) {
+ Assert.fail("Redundant Updates: " + fRedundantUpdates.toString());
+ }
+ if (fFailOnMultipleLabelUpdateSequences && !fMultipleLabelUpdateSequencesObserved) {
+ Assert.fail("Multiple label update sequences detected");
+ }
+ if (fFailOnMultipleModelUpdateSequences && fMultipleModelUpdateSequencesObserved) {
+ Assert.fail("Multiple viewer update sequences detected");
+ }
+
if ( (flags & LABEL_UPDATES_COMPLETE) != 0) {
if (!fLabelUpdatesComplete) return false;
}
+ if ( (flags & LABEL_UPDATES_STARTED) != 0) {
+ if (fLabelUpdatesRunning.isEmpty() && fLabelUpdatesCompleted.isEmpty()) return false;
+ }
if ( (flags & LABEL_UPDATES) != 0) {
if (!fLabelUpdates.isEmpty()) return false;
}
if ( (flags & CONTENT_UPDATES_COMPLETE) != 0) {
if (!fViewerUpdatesComplete) return false;
}
+ if ( (flags & HAS_CHILDREN_UPDATES_STARTED) != 0) {
+ if (fHasChildrenUpdatesRunning.isEmpty() && fHasChildrenUpdatesCompleted.isEmpty()) return false;
+ }
if ( (flags & HAS_CHILDREN_UPDATES) != 0) {
- if (!fHasChildrenUpdates.isEmpty()) return false;
+ if (!fHasChildrenUpdatesScheduled.isEmpty()) return false;
+ }
+ if ( (flags & CHILD_COUNT_UPDATES_STARTED) != 0) {
+ if (fChildCountUpdatesRunning.isEmpty() && fChildCountUpdatesCompleted.isEmpty()) return false;
}
- if ( (flags & CHILDREN_COUNT_UPDATES) != 0) {
- if (!fChildCountUpdates.isEmpty()) return false;
+ if ( (flags & CHILD_COUNT_UPDATES) != 0) {
+ if (!fChildCountUpdatesScheduled.isEmpty()) return false;
+ }
+ if ( (flags & CHILDREN_UPDATES_STARTED) != 0) {
+ if (fChildrenUpdatesRunning.isEmpty() && fChildrenUpdatesCompleted.isEmpty()) return false;
}
if ( (flags & CHILDREN_UPDATES) != 0) {
- if (!fChildrenUpdates.isEmpty()) return false;
+ if (!fChildrenUpdatesScheduled.isEmpty()) return false;
}
if ( (flags & MODEL_CHANGED_COMPLETE) != 0) {
if (!fModelChangedComplete) return false;
@@ -284,53 +329,68 @@ public class TestModelUpdatesListener
if (fProxyModels.size() != 0) return false;
}
if ( (flags & VIEWER_UPDATES_RUNNING) != 0) {
- if (fViewerUpdatesRunning != 0) {
+ if (fViewerUpdatesCounter != 0) {
return false;
}
}
if ( (flags & LABEL_UPDATES_RUNNING) != 0) {
- if (fLabelUpdatesRunning != 0) {
+ if (fLabelUpdatesCounter != 0) {
return false;
}
}
+
return true;
}
public void updateStarted(IViewerUpdate update) {
synchronized (this) {
- fViewerUpdatesRunning++;
+ fViewerUpdatesCounter++;
+ if (update instanceof IHasChildrenUpdate) {
+ fHasChildrenUpdatesRunning.add(update);
+ } if (update instanceof IChildrenCountUpdate) {
+ fChildCountUpdatesRunning.add(update);
+ } else if (update instanceof IChildrenUpdate) {
+ fChildCountUpdatesRunning.add(update);
+ }
}
}
public void updateComplete(IViewerUpdate update) {
synchronized (this) {
- fViewerUpdatesRunning--;
+ fViewerUpdatesCounter--;
}
if (!update.isCanceled()) {
if (update instanceof IHasChildrenUpdate) {
- if (!fHasChildrenUpdates.remove(update.getElementPath()) && fFailOnRedundantUpdates) {
- Assert.fail("Redundant update: " + update);
+ fHasChildrenUpdatesRunning.remove(update);
+ fHasChildrenUpdatesCompleted.add(update);
+ if (!fHasChildrenUpdatesScheduled.remove(update.getElementPath()) && fFailOnRedundantUpdates) {
+ fRedundantUpdates.add(update);
}
} if (update instanceof IChildrenCountUpdate) {
- if (!fChildCountUpdates.remove(update.getElementPath()) && fFailOnRedundantUpdates) {
- Assert.fail("Redundant update: " + update);
+ fChildCountUpdatesRunning.remove(update);
+ fChildCountUpdatesCompleted.add(update);
+ if (!fChildCountUpdatesScheduled.remove(update.getElementPath()) && fFailOnRedundantUpdates) {
+ fRedundantUpdates.add(update);
}
} else if (update instanceof IChildrenUpdate) {
+ fChildrenUpdatesRunning.remove(update);
+ fChildrenUpdatesCompleted.add(update);
+
int start = ((IChildrenUpdate)update).getOffset();
int end = start + ((IChildrenUpdate)update).getLength();
- Set childrenIndexes = (Set)fChildrenUpdates.get(update.getElementPath());
+ Set childrenIndexes = (Set)fChildrenUpdatesScheduled.get(update.getElementPath());
if (childrenIndexes != null) {
for (int i = start; i < end; i++) {
childrenIndexes.remove(new Integer(i));
}
if (childrenIndexes.isEmpty()) {
- fChildrenUpdates.remove(update.getElementPath());
+ fChildrenUpdatesScheduled.remove(update.getElementPath());
}
} else if (fFailOnRedundantUpdates) {
- Assert.fail("Redundant update: " + update);
+ fRedundantUpdates.add(update);
}
}
}
@@ -342,14 +402,16 @@ public class TestModelUpdatesListener
public void viewerUpdatesComplete() {
if (fFailOnMultipleModelUpdateSequences && fViewerUpdatesComplete) {
- Assert.fail("Multiple viewer update sequences detected");
+ fMultipleModelUpdateSequencesObserved = true;
}
fViewerUpdatesComplete = true;
}
public void labelUpdateComplete(ILabelUpdate update) {
synchronized (this) {
- fLabelUpdatesRunning--;
+ fLabelUpdatesRunning.remove(update);
+ fLabelUpdatesCompleted.add(update);
+ fLabelUpdatesCounter--;
}
if (!fLabelUpdates.remove(update.getElementPath()) && fFailOnRedundantUpdates) {
Assert.fail("Redundant update: " + update);
@@ -358,7 +420,8 @@ public class TestModelUpdatesListener
public void labelUpdateStarted(ILabelUpdate update) {
synchronized (this) {
- fLabelUpdatesRunning++;
+ fLabelUpdatesRunning.add(update);
+ fLabelUpdatesCounter++;
}
}
@@ -367,7 +430,7 @@ public class TestModelUpdatesListener
public void labelUpdatesComplete() {
if (fFailOnMultipleLabelUpdateSequences && fLabelUpdatesComplete) {
- Assert.fail("Multiple label update sequences detected");
+ fMultipleLabelUpdateSequencesObserved = true;
}
fLabelUpdatesComplete = true;
}
@@ -406,14 +469,34 @@ public class TestModelUpdatesListener
private String toString(int flags) {
StringBuffer buf = new StringBuffer("Viewer Update Listener");
-
+
+ if (fFailOnRedundantUpdates) {
+ buf.append("\n\t");
+ buf.append("fRedundantUpdates = " + fRedundantUpdates);
+ }
+ if (fFailOnMultipleLabelUpdateSequences) {
+ buf.append("\n\t");
+ buf.append("fMultipleLabelUpdateSequencesObserved = " + fMultipleLabelUpdateSequencesObserved);
+ }
+ if (fFailOnMultipleModelUpdateSequences) {
+ buf.append("\n\t");
+ buf.append("fMultipleModelUpdateSequencesObserved = " + fMultipleModelUpdateSequencesObserved);
+ }
if ( (flags & LABEL_UPDATES_COMPLETE) != 0) {
buf.append("\n\t");
buf.append("fLabelUpdatesComplete = " + fLabelUpdatesComplete);
}
if ( (flags & LABEL_UPDATES_RUNNING) != 0) {
buf.append("\n\t");
- buf.append("fLabelUpdatesRunning = " + fLabelUpdatesRunning);
+ buf.append("fLabelUpdatesRunning = " + fLabelUpdatesCounter);
+ }
+ if ( (flags & LABEL_UPDATES_STARTED) != 0) {
+ buf.append("\n\t");
+ buf.append("fLabelUpdatesRunning = ");
+ buf.append( fLabelUpdatesRunning );
+ buf.append("\n\t");
+ buf.append("fLabelUpdatesCompleted = ");
+ buf.append( fLabelUpdatesCompleted );
}
if ( (flags & LABEL_UPDATES) != 0) {
buf.append("\n\t");
@@ -426,22 +509,46 @@ public class TestModelUpdatesListener
}
if ( (flags & VIEWER_UPDATES_RUNNING) != 0) {
buf.append("\n\t");
- buf.append("fViewerUpdatesRunning = " + fViewerUpdatesRunning);
+ buf.append("fViewerUpdatesRunning = " + fViewerUpdatesCounter);
+ }
+ if ( (flags & HAS_CHILDREN_UPDATES_STARTED) != 0) {
+ buf.append("\n\t");
+ buf.append("fHasChildrenUpdatesRunning = ");
+ buf.append( fHasChildrenUpdatesRunning );
+ buf.append("\n\t");
+ buf.append("fHasChildrenUpdatesCompleted = ");
+ buf.append( fHasChildrenUpdatesCompleted );
}
if ( (flags & HAS_CHILDREN_UPDATES) != 0) {
buf.append("\n\t");
buf.append("fHasChildrenUpdates = ");
- buf.append( toString(fHasChildrenUpdates) );
+ buf.append( toString(fHasChildrenUpdatesScheduled) );
}
- if ( (flags & CHILDREN_COUNT_UPDATES) != 0) {
+ if ( (flags & CHILD_COUNT_UPDATES_STARTED) != 0) {
+ buf.append("\n\t");
+ buf.append("fChildCountUpdatesRunning = ");
+ buf.append( fChildCountUpdatesRunning );
+ buf.append("\n\t");
+ buf.append("fChildCountUpdatesCompleted = ");
+ buf.append( fChildCountUpdatesCompleted );
+ }
+ if ( (flags & CHILD_COUNT_UPDATES) != 0) {
buf.append("\n\t");
buf.append("fChildCountUpdates = ");
- buf.append( toString(fChildCountUpdates) );
+ buf.append( toString(fChildCountUpdatesScheduled) );
+ }
+ if ( (flags & CHILDREN_UPDATES_STARTED) != 0) {
+ buf.append("\n\t");
+ buf.append("fChildrenUpdatesRunning = ");
+ buf.append( fChildrenUpdatesRunning );
+ buf.append("\n\t");
+ buf.append("fChildrenUpdatesCompleted = ");
+ buf.append( fChildrenUpdatesCompleted );
}
if ( (flags & CHILDREN_UPDATES) != 0) {
buf.append("\n\t");
buf.append("fChildrenUpdates = ");
- buf.append( toString(fChildrenUpdates) );
+ buf.append( toString(fChildrenUpdatesScheduled) );
}
if ( (flags & MODEL_CHANGED_COMPLETE) != 0) {
buf.append("\n\t");
@@ -507,7 +614,7 @@ public class TestModelUpdatesListener
}
public String toString() {
- return toString(ALL_UPDATES_COMPLETE | MODEL_CHANGED_COMPLETE | STATE_RESTORE_COMPLETE);
+ return toString(ALL_UPDATES_COMPLETE | MODEL_CHANGED_COMPLETE | STATE_RESTORE_COMPLETE | VIEWER_UPDATES_STARTED | LABEL_UPDATES_STARTED);
}
}
diff --git a/org.eclipse.debug.tests/src/org/eclipe/debug/tests/viewer/model/UpdateTests.java b/org.eclipse.debug.tests/src/org/eclipe/debug/tests/viewer/model/UpdateTests.java
index eed6f61cb..2380ce8f9 100644
--- a/org.eclipse.debug.tests/src/org/eclipe/debug/tests/viewer/model/UpdateTests.java
+++ b/org.eclipse.debug.tests/src/org/eclipe/debug/tests/viewer/model/UpdateTests.java
@@ -13,6 +13,7 @@ package org.eclipe.debug.tests.viewer.model;
import junit.framework.TestCase;
import org.eclipe.debug.tests.viewer.model.TestModel.TestElement;
+import org.eclipse.core.commands.ExecutionException;
import org.eclipse.debug.internal.ui.viewers.model.ITreeModelViewer;
import org.eclipse.debug.internal.ui.viewers.model.provisional.IModelDelta;
import org.eclipse.debug.internal.ui.viewers.model.provisional.ModelDelta;
@@ -68,6 +69,14 @@ abstract public class UpdateTests extends TestCase implements ITestModelUpdatesL
while (!fShell.isDisposed()) if (!fDisplay.readAndDispatch ()) fDisplay.sleep ();
}
+ protected void runTest() throws Throwable {
+ try {
+ super.runTest();
+ } catch (Throwable t) {
+ throw new ExecutionException("Test failed: " + t.getMessage() + "\n fListener = " + fListener.toString(), t);
+ }
+ }
+
/**
* This test:
* - creates a simple model
@@ -213,19 +222,21 @@ abstract public class UpdateTests extends TestCase implements ITestModelUpdatesL
// Update the model
removeElement(model, 2, true);
- insertElement(model, "3-new", 3, true);
+ addElement(model, "3-new", 3, true);
removeElement(model, 4, true);
- insertElement(model, "5-new", 5, true);
+ addElement(model, "5-new", 5, true);
removeElement(model, 1, true);
- insertElement(model, "1-new", 1, true);
+ addElement(model, "1-new", 1, true);
removeElement(model, 3, true);
- insertElement(model, "4-new", 4, true);
+ addElement(model, "4-new", 4, true);
}
/**
* This test case attempts to create a race condition between processing
* of the content updates and processing of add/remove model deltas.
+ * <br>
+ * See <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=304066">bug 304066</a>
*/
public void _X_testContentPlusAddRemoveUpdateRaceConditionsElement() {
TestModel model = TestModel.simpleSingleLevel();
@@ -251,8 +262,6 @@ abstract public class UpdateTests extends TestCase implements ITestModelUpdatesL
model.postDelta(new ModelDelta(model.getRootElement(), IModelDelta.CONTENT));
// Wait until the delta is processed
while (!fListener.isFinished(MODEL_CHANGED_COMPLETE)) if (!fDisplay.readAndDispatch ()) fDisplay.sleep ();
- // And then wait for the viewer updates to start.
- while (fListener.isFinished(VIEWER_UPDATES_RUNNING)) if (!fDisplay.readAndDispatch ()) fDisplay.sleep ();
removeElement(model, 5, false);
removeElement(model, 4, false);
@@ -263,7 +272,7 @@ abstract public class UpdateTests extends TestCase implements ITestModelUpdatesL
// Wait until the children count update is completed using the count from
// before elements were removed.
- while (!childrenCountUpdateListener.isFinished(CHILDREN_COUNT_UPDATES))
+ while (!childrenCountUpdateListener.isFinished(CHILD_COUNT_UPDATES))
if (!fDisplay.readAndDispatch ()) fDisplay.sleep ();
insertElement(model, "1 - " + pass, 0, false);
@@ -304,15 +313,12 @@ abstract public class UpdateTests extends TestCase implements ITestModelUpdatesL
// Refresh the viewer so that updates are generated.
TestElement rootElement = model.getRootElement();
fListener.reset();
- fListener.addUpdates(TreePath.EMPTY, model.getRootElement(), 1, CHILDREN_COUNT_UPDATES);
+ fListener.addUpdates(TreePath.EMPTY, model.getRootElement(), 1, CHILD_COUNT_UPDATES);
model.postDelta(new ModelDelta(rootElement, IModelDelta.CONTENT));
// Wait for the delta to be processed.
- while (!fListener.isFinished(MODEL_CHANGED_COMPLETE | CHILDREN_COUNT_UPDATES)) if (!fDisplay.readAndDispatch ()) fDisplay.sleep ();
+ while (!fListener.isFinished(MODEL_CHANGED_COMPLETE | CHILD_COUNT_UPDATES)) if (!fDisplay.readAndDispatch ()) fDisplay.sleep ();
- // Wait until an update is started.
- while (fListener.isFinished(VIEWER_UPDATES_RUNNING)) if (!fDisplay.readAndDispatch ()) fDisplay.sleep ();
-
// Update the model
removeElement(model, 0, true);
addElement(model, "1", 0, true);

Back to the top