Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPawel Piech2009-11-11 00:59:15 +0000
committerPawel Piech2009-11-11 00:59:15 +0000
commit0030724c66680f3283e9598926672ce93f2a7b40 (patch)
treeb200b434153ebb62cae9bf4feae0c8a84fe0b138 /org.eclipse.debug.tests
parentd1ce210537eae1bdf88fbed6d6fb75cb1e23aba0 (diff)
downloadeclipse.platform.debug-0030724c66680f3283e9598926672ce93f2a7b40.tar.gz
eclipse.platform.debug-0030724c66680f3283e9598926672ce93f2a7b40.tar.xz
eclipse.platform.debug-0030724c66680f3283e9598926672ce93f2a7b40.zip
Bug 291267 - Fix for broken state saving and expanding logic in debugger views.
Diffstat (limited to 'org.eclipse.debug.tests')
-rw-r--r--org.eclipse.debug.tests/src/org/eclipe/debug/tests/viewer/model/ChildrenUpdateTests.java97
-rw-r--r--org.eclipse.debug.tests/src/org/eclipe/debug/tests/viewer/model/ITestModelUpdatesListenerConstants.java7
-rw-r--r--org.eclipse.debug.tests/src/org/eclipe/debug/tests/viewer/model/StateTests.java48
-rw-r--r--org.eclipse.debug.tests/src/org/eclipe/debug/tests/viewer/model/TestModel.java31
-rw-r--r--org.eclipse.debug.tests/src/org/eclipe/debug/tests/viewer/model/TestModelUpdatesListener.java45
5 files changed, 153 insertions, 75 deletions
diff --git a/org.eclipse.debug.tests/src/org/eclipe/debug/tests/viewer/model/ChildrenUpdateTests.java b/org.eclipse.debug.tests/src/org/eclipe/debug/tests/viewer/model/ChildrenUpdateTests.java
index 561104977..c64c9d190 100644
--- a/org.eclipse.debug.tests/src/org/eclipe/debug/tests/viewer/model/ChildrenUpdateTests.java
+++ b/org.eclipse.debug.tests/src/org/eclipe/debug/tests/viewer/model/ChildrenUpdateTests.java
@@ -20,6 +20,7 @@ import org.eclipse.debug.internal.ui.viewers.model.TreeModelContentProvider;
import org.eclipse.debug.internal.ui.viewers.model.provisional.IModelChangedListener;
import org.eclipse.debug.internal.ui.viewers.model.provisional.IModelDelta;
import org.eclipse.debug.internal.ui.viewers.model.provisional.IPresentationContext;
+import org.eclipse.debug.internal.ui.viewers.model.provisional.IStateUpdateListener;
import org.eclipse.debug.internal.ui.viewers.model.provisional.IViewerUpdateListener;
import org.eclipse.debug.internal.ui.viewers.model.provisional.ModelDelta;
import org.eclipse.jface.viewers.ISelection;
@@ -44,38 +45,32 @@ public class ChildrenUpdateTests extends TestCase {
protected ITreeModelContentProviderTarget getViewer() {
return new ITreeModelContentProviderTarget(){
- public void setSelection(ISelection selection) {
- }
-
- public void removeSelectionChangedListener(ISelectionChangedListener listener) {
- }
-
- public void addSelectionChangedListener(ISelectionChangedListener listener) {
- }
-
- public void updateViewer(IModelDelta delta) {
- }
-
- public void setSelection(ISelection selection, boolean reveal, boolean force) {
- }
-
- public void setInput(Object object) {
- }
-
- public void setAutoExpandLevel(int level) {
- }
-
- public void saveElementState(TreePath path, ModelDelta delta, int flags) {
- }
-
- public void removeViewerUpdateListener(IViewerUpdateListener listener) {
- }
-
- public void removeModelChangedListener(IModelChangedListener listener) {
- }
-
- public void removeLabelUpdateListener(ILabelUpdateListener listener) {
- }
+ public void setSelection(ISelection selection) {}
+ public void removeSelectionChangedListener(ISelectionChangedListener listener) {}
+ public void addSelectionChangedListener(ISelectionChangedListener listener) {}
+ public void updateViewer(IModelDelta delta) {}
+ public void setSelection(ISelection selection, boolean reveal, boolean force) {}
+ public void setInput(Object object) {}
+ public void setAutoExpandLevel(int level) {}
+ public void saveElementState(TreePath path, ModelDelta delta, int flags) {}
+ public void removeStateUpdateListener(IStateUpdateListener listener) {}
+ public void removeViewerUpdateListener(IViewerUpdateListener listener) {}
+ public void removeModelChangedListener(IModelChangedListener listener) {}
+ public void removeLabelUpdateListener(ILabelUpdateListener listener) {}
+ public void addViewerUpdateListener(IViewerUpdateListener listener) {}
+ public void addStateUpdateListener(IStateUpdateListener listener) {}
+ public void addModelChangedListener(IModelChangedListener listener) {}
+ public void addLabelUpdateListener(ILabelUpdateListener listener) {}
+ public void update(Object element) {}
+ public void setHasChildren(Object elementOrTreePath, boolean hasChildren) {}
+ public void setExpandedState(Object elementOrTreePath, boolean expanded) {}
+ public void setChildCount(Object elementOrTreePath, int count) {}
+ public void reveal(TreePath path, int index) {}
+ public void replace(Object parentOrTreePath, int index, Object element) {}
+ public void remove(Object parentOrTreePath, int index) {}
+ public void remove(Object elementOrTreePath) {}
+ public void refresh() {}
+ public void refresh(Object element) {}
public ISelection getSelection() {
return null;
@@ -101,44 +96,6 @@ public class ChildrenUpdateTests extends TestCase {
return 0;
}
- public void addViewerUpdateListener(IViewerUpdateListener listener) {
- }
-
- public void addModelChangedListener(IModelChangedListener listener) {
- }
-
- public void addLabelUpdateListener(ILabelUpdateListener listener) {
- }
-
- public void update(Object element) {
- }
-
- public void setHasChildren(Object elementOrTreePath, boolean hasChildren) {
- }
-
- public void setExpandedState(Object elementOrTreePath, boolean expanded) {
- }
-
- public void setChildCount(Object elementOrTreePath, int count) {
- }
-
- public void reveal(TreePath path, int index) {
- }
-
- public void replace(Object parentOrTreePath, int index, Object element) {
- }
-
- public void remove(Object parentOrTreePath, int index) {
- }
-
- public void remove(Object elementOrTreePath) {
- }
-
- public void refresh() {
- }
-
- public void refresh(Object element) {
- }
public boolean overrideSelection(ISelection current, ISelection candidate) {
return false;
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 26570fc5f..10aa25c03 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
@@ -25,9 +25,12 @@ public interface ITestModelUpdatesListenerConstants {
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 VIEWER_UPDATES_RUNNING = 0X0100;
- public static final int LABEL_UPDATES_RUNNING = 0X0200;
+ 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 CONTENT_COMPLETE =
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 f19df2734..70058c59a 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
@@ -55,6 +55,7 @@ abstract public class StateTests extends TestCase implements ITestModelUpdatesLi
fViewer.addViewerUpdateListener(fListener);
fViewer.addLabelUpdateListener(fListener);
fViewer.addModelChangedListener(fListener);
+ fViewer.addStateUpdateListener(fListener);
fShell.open ();
}
@@ -68,12 +69,17 @@ abstract public class StateTests extends TestCase implements ITestModelUpdatesLi
fViewer.removeLabelUpdateListener(fListener);
fViewer.removeViewerUpdateListener(fListener);
fViewer.removeModelChangedListener(fListener);
+ fViewer.addStateUpdateListener(fListener);
// Close the shell and exit.
fShell.close();
while (!fShell.isDisposed()) if (!fDisplay.readAndDispatch ()) fDisplay.sleep ();
}
+ protected ITreeModelContentProviderTarget getCTargetViewer() {
+ return (ITreeModelContentProviderTarget)fViewer;
+ }
+
public void testUpdateViewer() {
//TreeModelViewerAutopopulateAgent autopopulateAgent = new TreeModelViewerAutopopulateAgent(fViewer);
@@ -334,4 +340,46 @@ abstract public class StateTests extends TestCase implements ITestModelUpdatesLi
Assert.assertTrue(viewer.getExpandedState(model.findElement("6")) == false);
}
+ public void testSaveAndRstoreOnInputChange1() {
+ //TreeModelViewerAutopopulateAgent autopopulateAgent = new TreeModelViewerAutopopulateAgent(fViewer);
+ TestModel model = alternatingSubsreesModel();
+
+ // NOTE: WE ARE NOT EXPANDING ANY CHILDREN
+
+ // Create the listener, only check the first level
+ fListener.reset(TreePath.EMPTY, model.getRootElement(), 1, true, false);
+
+ // Set the input into the view and update the view.
+ fViewer.setInput(model.getRootElement());
+ while (!fListener.isFinished()) if (!fDisplay.readAndDispatch ()) fDisplay.sleep ();
+ model.validateData(fViewer, TreePath.EMPTY, true);
+
+ // Expand some, but not all elements
+ expandAlternateElements(model);
+
+ // Extract the original state from viewer
+ ModelDelta originalState = new ModelDelta(model.getRootElement(), IModelDelta.NO_CHANGE);
+ fViewer.saveElementState(TreePath.EMPTY, originalState, IModelDelta.EXPAND | IModelDelta.SELECT);
+
+ // Set the viewer input to null. This will trigger the view to save the viewer state.
+ fListener.reset(true, false);
+ fListener.addStateUpdates(getCTargetViewer(), TreePath.EMPTY, model.getRootElement());
+ fViewer.setInput(null);
+ while (!fListener.isFinished(STATE_SAVE_COMPLETE)) if (!fDisplay.readAndDispatch ()) fDisplay.sleep ();
+
+ // Set the viewer input back to the model. When view updates are complete
+ // the viewer
+ // Note: disable redundant updates because the reveal delta triggers one.
+ fListener.reset(TreePath.EMPTY, model.getRootElement(), 1, false, false);
+ // TODO: add state updates somehow?
+ fViewer.setInput(model.getRootElement());
+ while (!fListener.isFinished()) if (!fDisplay.readAndDispatch ()) fDisplay.sleep ();
+
+ // Extract the restored state from viewer
+ ModelDelta restoredState = new ModelDelta(model.getRootElement(), IModelDelta.NO_CHANGE);
+ fViewer.saveElementState(TreePath.EMPTY, restoredState, IModelDelta.EXPAND | IModelDelta.SELECT);
+
+ Assert.assertTrue( deltaMatches(originalState, restoredState) );
+ }
+
}
diff --git a/org.eclipse.debug.tests/src/org/eclipe/debug/tests/viewer/model/TestModel.java b/org.eclipse.debug.tests/src/org/eclipe/debug/tests/viewer/model/TestModel.java
index c4f5f348d..363afc39a 100644
--- a/org.eclipse.debug.tests/src/org/eclipe/debug/tests/viewer/model/TestModel.java
+++ b/org.eclipse.debug.tests/src/org/eclipe/debug/tests/viewer/model/TestModel.java
@@ -21,8 +21,11 @@ import org.eclipse.debug.internal.ui.viewers.model.ITreeModelViewer;
import org.eclipse.debug.internal.ui.viewers.model.provisional.ICheckUpdate;
import org.eclipse.debug.internal.ui.viewers.model.provisional.IChildrenCountUpdate;
import org.eclipse.debug.internal.ui.viewers.model.provisional.IChildrenUpdate;
+import org.eclipse.debug.internal.ui.viewers.model.provisional.IElementCompareRequest;
import org.eclipse.debug.internal.ui.viewers.model.provisional.IElementContentProvider;
import org.eclipse.debug.internal.ui.viewers.model.provisional.IElementLabelProvider;
+import org.eclipse.debug.internal.ui.viewers.model.provisional.IElementMementoProvider;
+import org.eclipse.debug.internal.ui.viewers.model.provisional.IElementMementoRequest;
import org.eclipse.debug.internal.ui.viewers.model.provisional.IHasChildrenUpdate;
import org.eclipse.debug.internal.ui.viewers.model.provisional.ILabelUpdate;
import org.eclipse.debug.internal.ui.viewers.model.provisional.IModelDelta;
@@ -41,7 +44,7 @@ import org.eclipse.jface.viewers.Viewer;
*
* @since 3.6
*/
-public class TestModel implements IElementContentProvider, IElementLabelProvider, IModelProxyFactory2 /*, IElementCheckReceiver */ {
+public class TestModel implements IElementContentProvider, IElementLabelProvider, IModelProxyFactory2 , IElementMementoProvider {
public static class TestElement extends PlatformObject {
private final TestModel fModel;
@@ -75,6 +78,10 @@ public class TestModel implements IElementContentProvider, IElementLabelProvider
return null;
}
+ public String getID() {
+ return fID;
+ }
+
public void setLabelAppendix(String appendix) {
fLabelAppendix = appendix;
}
@@ -229,6 +236,27 @@ public class TestModel implements IElementContentProvider, IElementLabelProvider
}
}
+ public final static String ELEMENT_MEMENTO_ID = "id";
+
+ public void compareElements(IElementCompareRequest[] updates) {
+ for (int i = 0; i < updates.length; i++) {
+ String elementID = ((TestElement)updates[i].getElement()).getID();
+ String mementoID = updates[i].getMemento().getString(ELEMENT_MEMENTO_ID);
+ updates[i].setEqual( elementID.equals(mementoID) );
+ updates[i].done();
+ }
+
+ }
+
+ public void encodeElements(IElementMementoRequest[] updates) {
+ for (int i = 0; i < updates.length; i++) {
+ String elementID = ((TestElement)updates[i].getElement()).getID();
+ updates[i].getMemento().putString(ELEMENT_MEMENTO_ID, elementID);
+ updates[i].done();
+ }
+ }
+
+
public void elementChecked(IPresentationContext context, Object viewerInput, TreePath path, boolean checked) {
TestElement element = getElement(path);
Assert.assertFalse(element.getGrayed());
@@ -616,5 +644,6 @@ public class TestModel implements IElementContentProvider, IElementLabelProvider
return m1;
}
+
}
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 c694e1d1d..ea866c774 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
@@ -28,12 +28,14 @@ import org.eclipse.debug.internal.ui.viewers.model.provisional.ILabelUpdate;
import org.eclipse.debug.internal.ui.viewers.model.provisional.IModelChangedListener;
import org.eclipse.debug.internal.ui.viewers.model.provisional.IModelDelta;
import org.eclipse.debug.internal.ui.viewers.model.provisional.IModelProxy;
+import org.eclipse.debug.internal.ui.viewers.model.provisional.IStateUpdateListener;
import org.eclipse.debug.internal.ui.viewers.model.provisional.IViewerUpdate;
import org.eclipse.debug.internal.ui.viewers.model.provisional.IViewerUpdateListener;
import org.eclipse.jface.viewers.TreePath;
public class TestModelUpdatesListener
- implements IViewerUpdateListener, ILabelUpdateListener, IModelChangedListener, ITestModelUpdatesListenerConstants
+ implements IViewerUpdateListener, ILabelUpdateListener, IModelChangedListener, ITestModelUpdatesListenerConstants,
+ IStateUpdateListener
{
private boolean fFailOnRedundantUpdates;
private boolean fFailOnMultipleUpdateSequences;
@@ -43,9 +45,12 @@ public class TestModelUpdatesListener
private Set fChildCountUpdates = new HashSet();
private Set fLabelUpdates = new HashSet();
private Set fProxyModels = new HashSet();
+ private Set fStateUpdates = new HashSet();
private boolean fViewerUpdatesComplete;
private boolean fLabelUpdatesComplete;
private boolean fModelChangedComplete;
+ private boolean fStateSaveComplete;
+ private boolean fStateRestoreComplete;
private int fViewerUpdatesRunning;
private int fLabelUpdatesRunning;
@@ -86,6 +91,8 @@ public class TestModelUpdatesListener
fViewerUpdatesComplete = false;
fLabelUpdatesComplete = false;
fModelChangedComplete = false;
+ fStateSaveComplete = false;
+ fStateRestoreComplete = false;
}
public void addHasChildrenUpdate(TreePath path) {
@@ -135,10 +142,14 @@ public class TestModelUpdatesListener
addUpdates(path, element, levels, ALL_UPDATES_COMPLETE);
}
+ public void addStateUpdates(ITreeModelContentProviderTarget viewer, TreePath path, TestElement element) {
+ addUpdates(viewer, path, element, -1, STATE_UPDATES);
+ }
+
public void addUpdates(TreePath path, TestElement element, int levels, int flags) {
addUpdates(null, path, element, levels, flags);
}
-
+
public void addUpdates(ITreeModelContentProviderTarget viewer, TreePath path, TestElement element, int levels, int flags) {
if (!path.equals(TreePath.EMPTY)) {
if ((flags & LABEL_UPDATES) != 0) {
@@ -163,6 +174,10 @@ public class TestModelUpdatesListener
fChildrenUpdates.put(path, childrenIndexes);
}
+ if ((flags & STATE_UPDATES) != 0 && viewer != null) {
+ fStateUpdates.add(path);
+ }
+
for (int i = 0; i < children.length; i++) {
addUpdates(viewer, path.createChildPath(children[i]), children[i], levels, flags);
}
@@ -208,6 +223,12 @@ public class TestModelUpdatesListener
if ( (flags & MODEL_CHANGED_COMPLETE) != 0) {
if (!fModelChangedComplete) return false;
}
+ if ( (flags & STATE_SAVE_COMPLETE) != 0) {
+ if (!fStateSaveComplete) return false;
+ }
+ if ( (flags & STATE_RESTORE_COMPLETE) != 0) {
+ if (!fStateRestoreComplete) return false;
+ }
if ( (flags & MODEL_PROXIES_INSTALLED) != 0) {
if (fProxyModels.size() != 0) return false;
}
@@ -313,6 +334,26 @@ public class TestModelUpdatesListener
}
}
}
+
+ public void stateRestoreUpdatesBegin(Object input) {
+ }
+
+ public void stateRestoreUpdatesComplete(Object input) {
+ fStateRestoreComplete = true;
+ }
+
+ public void stateSaveUpdatesBegin(Object input) {
+ }
+
+ public void stateSaveUpdatesComplete(Object input) {
+ fStateSaveComplete = true;
+ }
+
+ public void stateUpdateComplete(Object input, IViewerUpdate update) {
+ }
+
+ public void stateUpdateStarted(Object input, IViewerUpdate update) {
+ }
}

Back to the top