diff options
author | Pawel Piech | 2009-11-11 00:59:15 +0000 |
---|---|---|
committer | Pawel Piech | 2009-11-11 00:59:15 +0000 |
commit | 0030724c66680f3283e9598926672ce93f2a7b40 (patch) | |
tree | b200b434153ebb62cae9bf4feae0c8a84fe0b138 /org.eclipse.debug.tests | |
parent | d1ce210537eae1bdf88fbed6d6fb75cb1e23aba0 (diff) | |
download | eclipse.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')
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) { + } } |