Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPawel Piech2011-12-01 20:11:58 +0000
committerPawel Piech2011-12-01 20:11:58 +0000
commit442033718d71f1bf4a24506ba2f5a065ffd25221 (patch)
tree6d5007903ef9e9ad6cccc74b31608839b418446f /org.eclipse.debug.tests
parent95d71ceea2950ced3f11676734c7c019051a2c77 (diff)
downloadeclipse.platform.debug-442033718d71f1bf4a24506ba2f5a065ffd25221.tar.gz
eclipse.platform.debug-442033718d71f1bf4a24506ba2f5a065ffd25221.tar.xz
eclipse.platform.debug-442033718d71f1bf4a24506ba2f5a065ffd25221.zip
Bug 161435 - [flex] Promote asynchronous viewer framework to API -v20111201-2011
(merge flex_viewer_refactor branch into master)
Diffstat (limited to 'org.eclipse.debug.tests')
-rw-r--r--org.eclipse.debug.tests/src/org/eclipe/debug/tests/viewer/model/CheckTests.java6
-rw-r--r--org.eclipse.debug.tests/src/org/eclipe/debug/tests/viewer/model/ChildrenUpdateTests.java45
-rw-r--r--org.eclipse.debug.tests/src/org/eclipe/debug/tests/viewer/model/ContentTests.java11
-rw-r--r--org.eclipse.debug.tests/src/org/eclipe/debug/tests/viewer/model/DeltaTests.java64
-rw-r--r--org.eclipse.debug.tests/src/org/eclipe/debug/tests/viewer/model/FilterTests.java432
-rw-r--r--org.eclipse.debug.tests/src/org/eclipe/debug/tests/viewer/model/ITestModelUpdatesListenerConstants.java14
-rw-r--r--org.eclipse.debug.tests/src/org/eclipe/debug/tests/viewer/model/JFaceViewerCheckTests.java4
-rw-r--r--org.eclipse.debug.tests/src/org/eclipe/debug/tests/viewer/model/JFaceViewerContentTests.java4
-rw-r--r--org.eclipse.debug.tests/src/org/eclipe/debug/tests/viewer/model/JFaceViewerDeltaTests.java4
-rw-r--r--org.eclipse.debug.tests/src/org/eclipe/debug/tests/viewer/model/JFaceViewerFilterTests.java32
-rw-r--r--org.eclipse.debug.tests/src/org/eclipe/debug/tests/viewer/model/JFaceViewerLazyTests.java4
-rw-r--r--org.eclipse.debug.tests/src/org/eclipe/debug/tests/viewer/model/JFaceViewerPerformanceTests.java4
-rw-r--r--org.eclipse.debug.tests/src/org/eclipe/debug/tests/viewer/model/JFaceViewerPopupTests.java2
-rw-r--r--org.eclipse.debug.tests/src/org/eclipe/debug/tests/viewer/model/JFaceViewerSelectionTests.java2
-rw-r--r--org.eclipse.debug.tests/src/org/eclipe/debug/tests/viewer/model/JFaceViewerStateTests.java2
-rw-r--r--org.eclipse.debug.tests/src/org/eclipe/debug/tests/viewer/model/JFaceViewerTopIndexTests.java10
-rw-r--r--org.eclipse.debug.tests/src/org/eclipe/debug/tests/viewer/model/JFaceViewerUpdateTests.java2
-rw-r--r--org.eclipse.debug.tests/src/org/eclipe/debug/tests/viewer/model/LazyTests.java16
-rw-r--r--org.eclipse.debug.tests/src/org/eclipe/debug/tests/viewer/model/PerformanceTests.java176
-rw-r--r--org.eclipse.debug.tests/src/org/eclipe/debug/tests/viewer/model/PopupTests.java14
-rw-r--r--org.eclipse.debug.tests/src/org/eclipe/debug/tests/viewer/model/SelectionTests.java2
-rw-r--r--org.eclipse.debug.tests/src/org/eclipe/debug/tests/viewer/model/StateTests.java351
-rw-r--r--org.eclipse.debug.tests/src/org/eclipe/debug/tests/viewer/model/TestModel.java177
-rw-r--r--org.eclipse.debug.tests/src/org/eclipe/debug/tests/viewer/model/TestModelUpdatesListener.java204
-rw-r--r--org.eclipse.debug.tests/src/org/eclipe/debug/tests/viewer/model/UpdateTests.java224
-rw-r--r--org.eclipse.debug.tests/src/org/eclipe/debug/tests/viewer/model/VirtualViewerContentTests.java4
-rw-r--r--org.eclipse.debug.tests/src/org/eclipe/debug/tests/viewer/model/VirtualViewerDeltaTests.java4
-rw-r--r--org.eclipse.debug.tests/src/org/eclipe/debug/tests/viewer/model/VirtualViewerFilterTests.java32
-rw-r--r--org.eclipse.debug.tests/src/org/eclipe/debug/tests/viewer/model/VirtualViewerLazyModeTests.java2
-rw-r--r--org.eclipse.debug.tests/src/org/eclipe/debug/tests/viewer/model/VirtualViewerPerformanceTests.java4
-rw-r--r--org.eclipse.debug.tests/src/org/eclipe/debug/tests/viewer/model/VirtualViewerPopupTests.java2
-rw-r--r--org.eclipse.debug.tests/src/org/eclipe/debug/tests/viewer/model/VirtualViewerSelectionTests.java2
-rw-r--r--org.eclipse.debug.tests/src/org/eclipe/debug/tests/viewer/model/VirtualViewerStateTests.java2
-rw-r--r--org.eclipse.debug.tests/src/org/eclipe/debug/tests/viewer/model/VirtualViewerUpdateTests.java2
-rw-r--r--org.eclipse.debug.tests/src/org/eclipe/debug/tests/viewer/model/VisibleVirtualItemValidator.java95
-rw-r--r--org.eclipse.debug.tests/src/org/eclipse/debug/tests/AutomatedSuite.java2
-rw-r--r--org.eclipse.debug.tests/src/org/eclipse/debug/tests/LocalSuite.java2
37 files changed, 1629 insertions, 330 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 4532a81d8..435827411 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
@@ -14,8 +14,8 @@ 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.IInternalTreeModelViewer;
+import org.eclipse.debug.internal.ui.viewers.model.provisional.ITreeModelViewer;
import org.eclipse.debug.internal.ui.viewers.model.provisional.ModelDelta;
import org.eclipse.jface.viewers.TreePath;
import org.eclipse.swt.layout.FillLayout;
@@ -57,7 +57,7 @@ abstract public class CheckTests extends TestCase {
fShell.open ();
}
- abstract protected ITreeModelContentProviderTarget createViewer(Display display, Shell shell);
+ abstract protected IInternalTreeModelViewer createViewer(Display display, Shell shell);
/**
* @throws java.lang.Exception
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 4095eeff2..290f21f07 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
@@ -15,7 +15,7 @@ import junit.framework.TestCase;
import org.eclipse.debug.internal.ui.DebugUIPlugin;
import org.eclipse.debug.internal.ui.viewers.model.ChildrenUpdate;
import org.eclipse.debug.internal.ui.viewers.model.ILabelUpdateListener;
-import org.eclipse.debug.internal.ui.viewers.model.ITreeModelContentProviderTarget;
+import org.eclipse.debug.internal.ui.viewers.model.IInternalTreeModelViewer;
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;
@@ -23,11 +23,14 @@ import org.eclipse.debug.internal.ui.viewers.model.provisional.IPresentationCont
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.resource.ImageDescriptor;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.TreePath;
import org.eclipse.jface.viewers.ViewerFilter;
import org.eclipse.jface.viewers.ViewerLabel;
+import org.eclipse.swt.graphics.FontData;
+import org.eclipse.swt.graphics.RGB;
import org.eclipse.swt.widgets.Display;
/**
@@ -42,8 +45,8 @@ public class ChildrenUpdateTests extends TestCase {
/* (non-Javadoc)
* @see org.eclipse.debug.internal.ui.viewers.model.ModelContentProvider#getViewer()
*/
- protected ITreeModelContentProviderTarget getViewer() {
- return new ITreeModelContentProviderTarget(){
+ protected IInternalTreeModelViewer getViewer() {
+ return new IInternalTreeModelViewer(){
public void setSelection(ISelection selection) {}
public void removeSelectionChangedListener(ISelectionChangedListener listener) {}
@@ -113,7 +116,10 @@ public class ChildrenUpdateTests extends TestCase {
public ViewerFilter[] getFilters() {
return null;
}
-
+
+ public void addFilter(ViewerFilter filter) {}
+ public void setFilters(ViewerFilter[] filters) {}
+
public boolean getExpandedState(Object elementOrTreePath) {
return false;
}
@@ -143,6 +149,27 @@ public class ChildrenUpdateTests extends TestCase {
public boolean getElementChildrenRealized(TreePath parentPath) {
return false;
}
+
+ public boolean getElementChecked(TreePath path) {
+ return false;
+ }
+
+ public boolean getElementGrayed(TreePath path) {
+ return false;
+ }
+
+ public void setElementChecked(TreePath path, boolean checked, boolean grayed) {
+ }
+
+ public TreePath[] getElementPaths(Object element) {
+ return null;
+ }
+ public void setElementData(TreePath path, int numColumns, String[] labels, ImageDescriptor[] images,
+ FontData[] fontDatas, RGB[] foregrounds, RGB[] backgrounds) {
+ }
+ public String[] getVisibleColumns() {
+ return null;
+ }
};
}
}
@@ -164,23 +191,23 @@ public class ChildrenUpdateTests extends TestCase {
public void testCoalesce () {
Object element = new Object();
TreeModelContentProvider cp = getContentProvider();
- ChildrenUpdate update1 = new ChildrenUpdate(cp, element, TreePath.EMPTY, element, 1, null, null);
- ChildrenUpdate update2 = new ChildrenUpdate(cp, element, TreePath.EMPTY, element, 2, null, null);
+ ChildrenUpdate update1 = new ChildrenUpdate(cp, element, TreePath.EMPTY, element, 1, null);
+ ChildrenUpdate update2 = new ChildrenUpdate(cp, element, TreePath.EMPTY, element, 2, null);
assertTrue("Should coalesce", update1.coalesce(update2));
assertEquals("Wrong offset", 1, update1.getOffset());
assertEquals("Wrong length", 2, update1.getLength());
- update2 = new ChildrenUpdate(cp, element, TreePath.EMPTY, element, 3, null, null);
+ update2 = new ChildrenUpdate(cp, element, TreePath.EMPTY, element, 3, null);
assertTrue("Should coalesce", update1.coalesce(update2));
assertEquals("Wrong offset", 1, update1.getOffset());
assertEquals("Wrong length", 3, update1.getLength());
- update2 = new ChildrenUpdate(cp, element, TreePath.EMPTY, element, 2, null, null);
+ update2 = new ChildrenUpdate(cp, element, TreePath.EMPTY, element, 2, null);
assertTrue("Should coalesce", update1.coalesce(update2));
assertEquals("Wrong offset", 1, update1.getOffset());
assertEquals("Wrong length", 3, update1.getLength());
- update2 = new ChildrenUpdate(cp, element, TreePath.EMPTY, element, 5, null, null);
+ update2 = new ChildrenUpdate(cp, element, TreePath.EMPTY, element, 5, null);
assertFalse("Should not coalesce", update1.coalesce(update2));
assertEquals("Wrong offset", 1, update1.getOffset());
assertEquals("Wrong length", 3, update1.getLength());
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 0725b1fd3..4eb52e6f7 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
@@ -19,12 +19,12 @@ 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.IInternalTreeModelViewer;
import org.eclipse.debug.internal.ui.viewers.model.provisional.ICheckUpdate;
import org.eclipse.debug.internal.ui.viewers.model.provisional.IChildrenUpdate;
import org.eclipse.debug.internal.ui.viewers.model.provisional.ILabelUpdate;
import org.eclipse.debug.internal.ui.viewers.model.provisional.IModelDelta;
+import org.eclipse.debug.internal.ui.viewers.model.provisional.ITreeModelViewer;
import org.eclipse.debug.internal.ui.viewers.model.provisional.ModelDelta;
import org.eclipse.jface.viewers.TreePath;
import org.eclipse.swt.layout.FillLayout;
@@ -65,7 +65,7 @@ abstract public class ContentTests extends TestCase implements ITestModelUpdates
fShell.open ();
}
- abstract protected ITreeModelContentProviderTarget createViewer(Display display, Shell shell);
+ abstract protected IInternalTreeModelViewer createViewer(Display display, Shell shell);
/**
* @throws java.lang.Exception
@@ -107,6 +107,8 @@ abstract public class ContentTests extends TestCase implements ITestModelUpdates
while (!fListener.isFinished()) if (!fDisplay.readAndDispatch ()) Thread.sleep(0);
model.validateData(fViewer, TreePath.EMPTY);
+
+ Assert.assertTrue( fListener.checkCoalesced(TreePath.EMPTY, 0, 6) );
}
public void testSimpleMultiLevel() throws InterruptedException {
@@ -122,6 +124,8 @@ abstract public class ContentTests extends TestCase implements ITestModelUpdates
while (!fListener.isFinished()) if (!fDisplay.readAndDispatch ()) Thread.sleep(0);
model.validateData(fViewer, TreePath.EMPTY);
+
+ Assert.assertTrue( fListener.checkCoalesced(TreePath.EMPTY, 0, 3) );
}
/**
@@ -342,5 +346,4 @@ abstract public class ContentTests extends TestCase implements ITestModelUpdates
}
return expectedChildren.isEmpty();
}
-
}
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 d78e9367d..e53f17bdc 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
@@ -18,9 +18,9 @@ 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.IInternalTreeModelViewer;
import org.eclipse.debug.internal.ui.viewers.model.provisional.IModelDelta;
+import org.eclipse.debug.internal.ui.viewers.model.provisional.ITreeModelViewer;
import org.eclipse.debug.internal.ui.viewers.model.provisional.ModelDelta;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.ITreeSelection;
@@ -61,7 +61,7 @@ abstract public class DeltaTests extends TestCase implements ITestModelUpdatesLi
fShell.open ();
}
- abstract protected ITreeModelContentProviderTarget createViewer(Display display, Shell shell);
+ abstract protected IInternalTreeModelViewer createViewer(Display display, Shell shell);
/**
* @throws java.lang.Exception
@@ -189,6 +189,38 @@ abstract public class DeltaTests extends TestCase implements ITestModelUpdatesLi
model.validateData(fViewer, TreePath.EMPTY);
}
+ public void testRefreshCoalesceStruct() throws InterruptedException {
+ //TreeModelViewerAutopopulateAgent autopopulateAgent = new TreeModelViewerAutopopulateAgent(fViewer);
+
+ // Create a single level model and add a single child to each element.
+ TestModel model = TestModel.simpleSingleLevel();
+ TestElement[] rootChildren = model.getRootElement().getChildren();
+ for (int i = 0; i < rootChildren.length; i++) {
+ model.setElementChildren(
+ new TreePath(new Object[] { rootChildren[i]} ),
+ new TestElement[] { new TestElement(model, i + ".1", new TestElement[0]) });
+ }
+
+ fViewer.setAutoExpandLevel(-1);
+
+ // Create the listener
+ 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 ()) Thread.sleep(0);
+ model.validateData(fViewer, TreePath.EMPTY);
+
+ fListener.reset(TreePath.EMPTY, model.getRootElement(), -1, false, false);
+ model.postDelta(new ModelDelta(model.getRootElement(), IModelDelta.CONTENT));
+ while (!fListener.isFinished(ALL_UPDATES_COMPLETE | MODEL_CHANGED_COMPLETE))
+ if (!fDisplay.readAndDispatch ()) Thread.sleep(0);
+
+ model.validateData(fViewer, TreePath.EMPTY);
+ Assert.assertTrue( fListener.checkCoalesced(TreePath.EMPTY, 0, 6) );
+ }
+
+
public void testInsert() throws InterruptedException {
//TreeModelViewerAutopopulateAgent autopopulateAgent = new TreeModelViewerAutopopulateAgent(fViewer);
@@ -378,12 +410,12 @@ abstract public class DeltaTests extends TestCase implements ITestModelUpdatesLi
fListener.reset();
fListener.setFailOnRedundantUpdates(false);
model.postDelta(rootDelta);
- while (!fListener.isFinished(MODEL_CHANGED_COMPLETE | CONTENT_UPDATES_COMPLETE))
+ while (!fListener.isFinished(MODEL_CHANGED_COMPLETE | CONTENT_SEQUENCE_COMPLETE))
if (!fDisplay.readAndDispatch ()) Thread.sleep(0);
// Update the elements that were added.
fListener.reset();
- fListener.addUpdates((ITreeModelContentProviderTarget)fViewer, TreePath.EMPTY, model.getRootElement(), -1, ALL_UPDATES_COMPLETE);
+ fListener.addUpdates((IInternalTreeModelViewer)fViewer, TreePath.EMPTY, model.getRootElement(), -1, ALL_UPDATES_COMPLETE);
rootDelta = new ModelDelta(model.getRootElement(), IModelDelta.CONTENT);
model.getElementDelta(rootDelta, model.findElement("1.1"), true).setFlags(IModelDelta.CONTENT);
model.getElementDelta(rootDelta, model.findElement("1.2"), true).setFlags(IModelDelta.CONTENT);
@@ -395,9 +427,9 @@ abstract public class DeltaTests extends TestCase implements ITestModelUpdatesLi
if (!fDisplay.readAndDispatch ()) Thread.sleep(0);
fListener.reset(parentPath, model.getElement(parentPath), 1, false, true);
- ((ITreeModelContentProviderTarget)fViewer).expandToLevel(parentPath, 1);
+ ((IInternalTreeModelViewer)fViewer).expandToLevel(parentPath, 1);
- while (fListener.isFinished(CONTENT_UPDATES_STARTED) && !fListener.isFinished(CONTENT_UPDATES_COMPLETE))
+ while (fListener.isFinished(CONTENT_SEQUENCE_STARTED) && !fListener.isFinished(CONTENT_SEQUENCE_COMPLETE))
if (!fDisplay.readAndDispatch ()) Thread.sleep(0);
model.validateData(fViewer, parentPath);
@@ -421,17 +453,17 @@ abstract public class DeltaTests extends TestCase implements ITestModelUpdatesLi
// Expand elment "2"
TreePath parentPath = model.findElement("2");
fListener.reset(parentPath, model.getElement(parentPath), 1, false, true);
- ((ITreeModelContentProviderTarget)fViewer).expandToLevel(parentPath, 1);
+ ((IInternalTreeModelViewer)fViewer).expandToLevel(parentPath, 1);
- while (fListener.isFinished(CONTENT_UPDATES_STARTED) && !fListener.isFinished(CONTENT_UPDATES_COMPLETE))
+ while (fListener.isFinished(CONTENT_SEQUENCE_STARTED) && !fListener.isFinished(CONTENT_SEQUENCE_COMPLETE))
if (!fDisplay.readAndDispatch ()) Thread.sleep(0);
// Collapse back element "2"
- ((ITreeModelContentProviderTarget)fViewer).setExpandedState(parentPath, false);
+ ((IInternalTreeModelViewer)fViewer).setExpandedState(parentPath, false);
// Update the children of element "2".
fListener.reset();
- fListener.addUpdates((ITreeModelContentProviderTarget)fViewer, TreePath.EMPTY, model.getRootElement(), -1, ALL_UPDATES_COMPLETE);
+ fListener.addUpdates((IInternalTreeModelViewer)fViewer, TreePath.EMPTY, model.getRootElement(), -1, ALL_UPDATES_COMPLETE);
ModelDelta rootDelta = new ModelDelta(model.getRootElement(), IModelDelta.CONTENT);
model.getElementDelta(rootDelta, model.findElement("2.1"), true).setFlags(IModelDelta.CONTENT);
model.getElementDelta(rootDelta, model.findElement("2.2"), true).setFlags(IModelDelta.CONTENT);
@@ -443,9 +475,9 @@ abstract public class DeltaTests extends TestCase implements ITestModelUpdatesLi
// Expand back element "2"
fListener.reset(parentPath, model.getElement(parentPath), 1, false, true);
- ((ITreeModelContentProviderTarget)fViewer).expandToLevel(parentPath, 1);
+ ((IInternalTreeModelViewer)fViewer).expandToLevel(parentPath, 1);
- while (fListener.isFinished(CONTENT_UPDATES_STARTED) && !fListener.isFinished(CONTENT_UPDATES_COMPLETE))
+ while (fListener.isFinished(CONTENT_SEQUENCE_STARTED) && !fListener.isFinished(CONTENT_SEQUENCE_COMPLETE))
if (!fDisplay.readAndDispatch ()) Thread.sleep(0);
model.validateData(fViewer, parentPath, true);
@@ -533,7 +565,7 @@ abstract public class DeltaTests extends TestCase implements ITestModelUpdatesLi
// Validate the expansion state BEFORE posting the delta.
- ITreeModelContentProviderTarget contentProviderViewer = (ITreeModelContentProviderTarget)fViewer;
+ IInternalTreeModelViewer contentProviderViewer = (IInternalTreeModelViewer)fViewer;
Assert.assertFalse(contentProviderViewer.getExpandedState(path_root_3));
Assert.assertFalse(contentProviderViewer.getExpandedState(path_root_3_2));
Assert.assertFalse(contentProviderViewer.getExpandedState(path_root_3_2_2));
@@ -588,13 +620,13 @@ abstract public class DeltaTests extends TestCase implements ITestModelUpdatesLi
// Validate the expansion state BEFORE posting the delta.
- ITreeModelContentProviderTarget contentProviderViewer = (ITreeModelContentProviderTarget)fViewer;
+ IInternalTreeModelViewer contentProviderViewer = (IInternalTreeModelViewer)fViewer;
Assert.assertFalse(contentProviderViewer.getExpandedState(path_root_3));
model.postDelta(deltaRoot);
while (true) {
if (fListener.isFinished(MODEL_CHANGED_COMPLETE)) {
- if (fListener.isFinished(CONTENT_UPDATES_COMPLETE | LABEL_UPDATES_COMPLETE) ) {
+ if (fListener.isFinished(CONTENT_SEQUENCE_COMPLETE | LABEL_SEQUENCE_COMPLETE) ) {
break;
}
}
diff --git a/org.eclipse.debug.tests/src/org/eclipe/debug/tests/viewer/model/FilterTests.java b/org.eclipse.debug.tests/src/org/eclipe/debug/tests/viewer/model/FilterTests.java
new file mode 100644
index 000000000..46eb8e7e8
--- /dev/null
+++ b/org.eclipse.debug.tests/src/org/eclipe/debug/tests/viewer/model/FilterTests.java
@@ -0,0 +1,432 @@
+/*******************************************************************************
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Copyright (c) 2009, 2011 Wind River Systems and others.
+ * Contributors:
+ * Wind River Systems - initial API and implementation
+ *******************************************************************************/
+package org.eclipe.debug.tests.viewer.model;
+
+import java.util.regex.Pattern;
+
+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.IInternalTreeModelViewer;
+import org.eclipse.debug.internal.ui.viewers.model.provisional.IModelDelta;
+import org.eclipse.debug.internal.ui.viewers.model.provisional.ITreeModelViewer;
+import org.eclipse.debug.internal.ui.viewers.model.provisional.ModelDelta;
+import org.eclipse.debug.internal.ui.viewers.model.provisional.TreeModelViewerFilter;
+import org.eclipse.jface.viewers.ITreeSelection;
+import org.eclipse.jface.viewers.TreePath;
+import org.eclipse.jface.viewers.TreeSelection;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.jface.viewers.ViewerFilter;
+import org.eclipse.swt.layout.FillLayout;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.ui.PlatformUI;
+
+/**
+ * Tests that verify that the viewer property retrieves all the content
+ * from the model.
+ *
+ * @since 3.8
+ */
+abstract public class FilterTests extends TestCase implements ITestModelUpdatesListenerConstants {
+
+ Display fDisplay;
+ Shell fShell;
+ ITreeModelViewer fViewer;
+ TestModelUpdatesListener fListener;
+
+ public FilterTests(String name) {
+ super(name);
+ }
+
+ /**
+ * @throws java.lang.Exception
+ */
+ protected void setUp() throws Exception {
+ fDisplay = PlatformUI.getWorkbench().getDisplay();
+ fShell = new Shell(fDisplay);
+ fShell.setMaximized(true);
+ fShell.setLayout(new FillLayout());
+
+ fViewer = createViewer(fDisplay, fShell);
+
+ fListener = new TestModelUpdatesListener(fViewer, true, true);
+
+ fShell.open ();
+ }
+
+ abstract protected IInternalTreeModelViewer createViewer(Display display, Shell shell);
+
+ /**
+ * @throws java.lang.Exception
+ */
+ protected void tearDown() throws Exception {
+ fListener.dispose();
+ fViewer.getPresentationContext().dispose();
+
+ // Close the shell and exit.
+ fShell.close();
+ while (!fShell.isDisposed()) if (!fDisplay.readAndDispatch ()) Thread.sleep(0);
+ }
+
+ protected void runTest() throws Throwable {
+ try {
+ super.runTest();
+ } catch (Throwable t) {
+ throw new ExecutionException("Test failed: " + t.getMessage() + "\n fListener = " + fListener.toString(), t);
+ }
+ }
+
+ protected IInternalTreeModelViewer getInternalViewer() {
+ return (IInternalTreeModelViewer)fViewer;
+ }
+
+
+ class TestViewerFilter extends ViewerFilter {
+
+ Pattern fPattern;
+ TestViewerFilter(String pattern) {
+ fPattern = Pattern.compile(pattern);
+ }
+
+
+ public boolean select(Viewer viewer, Object parentElement, Object element) {
+ if (element instanceof TestElement) {
+ TestElement te = (TestElement)element;
+ return !fPattern.matcher(te.getLabel()).find();
+ }
+
+ return true;
+ }
+ }
+
+ class TestTMVFilter extends TreeModelViewerFilter {
+ Pattern fPattern;
+ Object fParentElement;
+ TestTMVFilter(String pattern, Object parentElement) {
+ fPattern = Pattern.compile(pattern);
+ fParentElement = parentElement;
+ }
+
+ public boolean isApplicable(ITreeModelViewer viewer, Object parentElement) {
+ if (fParentElement != null) {
+ return fParentElement.equals(parentElement);
+ }
+
+ return true;
+ }
+
+ public boolean select(Viewer viewer, Object parentElement, Object element) {
+ if (element instanceof TestElement) {
+ TestElement te = (TestElement)element;
+ return !fPattern.matcher(te.getLabel()).find();
+ }
+
+ return true;
+ }
+ }
+
+ public void testSimpleSingleLevel() throws InterruptedException {
+ TestModel model = TestModel.simpleSingleLevel();
+ doTestSimpleLevel(model, new ViewerFilter[] { new TestViewerFilter("2") });
+ }
+
+ public void testSimpleSingleLevelWithTMVFilter() throws InterruptedException {
+ TestModel model = TestModel.simpleSingleLevel();
+ doTestSimpleLevel(model, new ViewerFilter[] { new TestTMVFilter("2", model.getRootElement()) });
+ }
+
+ public void testSimpleSingleLevelWithMixedFilters() throws InterruptedException {
+ TestModel model = TestModel.simpleSingleLevel();
+ doTestSimpleLevel(model, new ViewerFilter[] { new TestTMVFilter("2", model.getRootElement()), new TestViewerFilter("1") });
+ }
+
+ public void testSimpleMultiLevel() throws InterruptedException {
+ TestModel model = TestModel.simpleMultiLevel();
+ doTestSimpleLevel(model, new ViewerFilter[] { new TestViewerFilter(".1"), new TestViewerFilter(".2") });
+ }
+
+ public void testSimpleMultiLevelWithTMVFilter() throws InterruptedException {
+ TestModel model = TestModel.simpleMultiLevel();
+ doTestSimpleLevel(model, new ViewerFilter[] { new TestTMVFilter(".1", null), new TestTMVFilter(".2", null) });
+ }
+
+ public void testSimpleMultiLevelWithMixedFilters() throws InterruptedException {
+ TestModel model = TestModel.simpleMultiLevel();
+ doTestSimpleLevel(model, new ViewerFilter[] { new TestViewerFilter(".1"), new TestTMVFilter(".2", null) });
+ }
+
+ private void doTestSimpleLevel(TestModel model, ViewerFilter[] filters) throws InterruptedException {
+
+ // Make sure that all elements are expanded
+ fViewer.setAutoExpandLevel(-1);
+
+ fViewer.setFilters(filters);
+
+ // Create the listener which determines when the view is finished updating.
+ // fListener.reset(TreePath.EMPTY, model.getRootElement(), filters, -1, false, false);
+ fListener.reset(TreePath.EMPTY, model.getRootElement(), filters, -1, true, true);
+
+ // Set the viewer input (and trigger updates).
+ fViewer.setInput(model.getRootElement());
+
+ // Wait for the updates to complete.
+ while (!fListener.isFinished(ALL_UPDATES_COMPLETE)) if (!fDisplay.readAndDispatch ()) Thread.sleep(0);
+
+ model.validateData(fViewer, TreePath.EMPTY, false, filters);
+ }
+
+ public void testLargeSingleLevel() throws InterruptedException {
+ doTestLargeSingleLevel(new ViewerFilter[] { new TestViewerFilter("2") });
+ }
+
+ public void testLargeSingleLevelWithTMVFilter() throws InterruptedException {
+ doTestLargeSingleLevel(new ViewerFilter[] { new TestTMVFilter("2", null) });
+ }
+
+ private void doTestLargeSingleLevel(ViewerFilter[] filters) throws InterruptedException {
+ TestModel model = new TestModel();
+ model.setRoot( new TestElement(model, "root", new TestElement[0] ) );
+ model.setElementChildren(TreePath.EMPTY, TestModel.makeSingleLevelModelElements(model, 3000, "model."));
+
+ // Set filters
+ fViewer.setFilters(filters);
+
+ fListener.setFailOnRedundantUpdates(false);
+ //fListener.setFailOnMultipleLabelUpdateSequences(false);
+ fListener.reset();
+
+ fViewer.setInput(model.getRootElement());
+
+ while (!fListener.isFinished(ALL_UPDATES_COMPLETE)) if (!fDisplay.readAndDispatch ()) Thread.sleep(0);
+ }
+
+
+ /**
+ * Replace an element that is not visible but filtered out. With an element that is NOT filtered out.
+ * Fire REPLACE delta.
+ */
+ public void testReplacedUnrealizedFilteredElement() throws InterruptedException {
+ doTestReplacedUnrealizedFilteredElement(new ViewerFilter[] { new TestViewerFilter("2") });
+ }
+
+
+ /**
+ * Replace an element that is not visible but filtered out. With an element that is NOT filtered out.
+ * Fire REPLACE delta.
+ */
+ public void testReplacedUnrealizedFilteredElementWithTMVFilter() throws InterruptedException {
+ doTestReplacedUnrealizedFilteredElement(new ViewerFilter[] { new TestTMVFilter("2", null) });
+ }
+
+ private void doTestReplacedUnrealizedFilteredElement(ViewerFilter[] filters) throws InterruptedException {
+
+ // Populate a view with a large model (only first 100 elements will be visible in virtual viewer).
+ TestModel model = new TestModel();
+ model.setRoot( new TestElement(model, "root", new TestElement[0] ) );
+ model.setElementChildren(TreePath.EMPTY, TestModel.makeSingleLevelModelElements(model, 300, "model."));
+
+ fViewer.setFilters(filters);
+
+ fListener.setFailOnRedundantUpdates(false);
+ fListener.reset();
+
+ // Populate the view (all elements containing a "2" will be filtered out.
+ fViewer.setInput(model.getRootElement());
+
+ while (!fListener.isFinished(ALL_UPDATES_COMPLETE)) if (!fDisplay.readAndDispatch ()) Thread.sleep(0);
+
+ // Switch out element "201" which is filtered out, with a "replaced element" which should NOT be
+ // filtered out.
+ TestElement replacedElement = new TestElement(model, "replaced element", new TestElement[0]);
+ IModelDelta replaceDelta = model.replaceElementChild(TreePath.EMPTY, 200, replacedElement);
+ fListener.reset();
+ model.postDelta(replaceDelta);
+ while (!fListener.isFinished(MODEL_CHANGED_COMPLETE)) if (!fDisplay.readAndDispatch ()) Thread.sleep(0);
+
+ // Reposition the viewer to make element 100 the top element, making the replaced element visible.
+ fListener.reset();
+ ((IInternalTreeModelViewer) fViewer).reveal(TreePath.EMPTY, 150);
+ while (!fListener.isFinished(ALL_UPDATES_COMPLETE)) if (!fDisplay.readAndDispatch ()) Thread.sleep(0);
+
+ // Verify that the replaced element is in viewer now (i.e. it's not filtered out.
+ TreePath[] replacedElementPaths = fViewer.getElementPaths(replacedElement);
+ Assert.assertTrue(replacedElementPaths.length != 0);
+ }
+
+
+ public void testRefreshUnrealizedFilteredElement() throws InterruptedException {
+ doTestRefreshUnrealizedFilteredElement(new ViewerFilter[] { new TestViewerFilter("2") });
+ }
+
+ public void testRefreshUnrealizedFilteredElementWithTMVFilter() throws InterruptedException {
+ doTestRefreshUnrealizedFilteredElement(new ViewerFilter[] { new TestTMVFilter("2", null) });
+ }
+
+ /**
+ * Replace an element that is not visible but filtered out. With an element that is NOT filtered out.
+ * Fire CONTENT delta on parent.
+ */
+ private void doTestRefreshUnrealizedFilteredElement(ViewerFilter[] filters) throws InterruptedException {
+ // Populate a view with a large model (only first 100 elements will be visible in virtual viewer).
+ TestModel model = new TestModel();
+ model.setRoot( new TestElement(model, "root", new TestElement[0] ) );
+ model.setElementChildren(TreePath.EMPTY, TestModel.makeSingleLevelModelElements(model, 300, "model."));
+
+ fViewer.setFilters(filters);
+
+ fListener.setFailOnRedundantUpdates(false);
+ fListener.reset();
+
+ // Populate the view (all elements containing a "2" will be filtered out.
+ fViewer.setInput(model.getRootElement());
+
+ while (!fListener.isFinished(ALL_UPDATES_COMPLETE)) if (!fDisplay.readAndDispatch ()) Thread.sleep(0);
+
+ // Switch out element "201" which is filtered out, with a "replaced element" which should NOT be
+ // filtered out.
+ TestElement replacedElement = new TestElement(model, "replaced element", new TestElement[0]);
+ model.replaceElementChild(TreePath.EMPTY, 200, replacedElement);
+ fListener.reset();
+ model.postDelta(new ModelDelta(model.getRootElement(), IModelDelta.CONTENT));
+ while (!fListener.isFinished(ALL_UPDATES_COMPLETE)) if (!fDisplay.readAndDispatch ()) Thread.sleep(0);
+
+ // Reposition the viewer to make element 100 the top element, making the replaced element visible.
+ fListener.reset();
+ ((IInternalTreeModelViewer) fViewer).reveal(TreePath.EMPTY, 150);
+ while (!fListener.isFinished(ALL_UPDATES_COMPLETE)) if (!fDisplay.readAndDispatch ()) Thread.sleep(0);
+
+ // Verify that the replaced element is in viewer now (i.e. it's not filtered out.
+ TreePath[] replacedElementPaths = fViewer.getElementPaths(replacedElement);
+ Assert.assertTrue(replacedElementPaths.length != 0);
+ }
+
+ public void testRefreshToUnfilterElements() throws InterruptedException {
+ doTestRefreshToUnfilterElements(new ViewerFilter[] { new TestViewerFilter(".1"), new TestViewerFilter(".2") });
+ }
+
+ public void testRefreshToUnfilterElementsWithTMVFilter() throws InterruptedException {
+ doTestRefreshToUnfilterElements(new ViewerFilter[] { new TestTMVFilter(".1", null), new TestTMVFilter(".2", null) });
+ }
+
+ public void testRefreshToUnfilterElementsWithMixedFilters() throws InterruptedException {
+ doTestRefreshToUnfilterElements(new ViewerFilter[] { new TestViewerFilter(".1"), new TestTMVFilter(".2", null) });
+ }
+
+ /**
+ * Replace an element that is not visible but filtered out. With an element that is NOT filtered out.
+ * Fire CONTENT delta on parent.
+ */
+ private void doTestRefreshToUnfilterElements(ViewerFilter[] filters) throws InterruptedException {
+ // Populate a view with a large model (only first 100 elements will be visible in virtual viewer).
+ TestModel model = TestModel.simpleMultiLevel();
+
+ fViewer.setFilters(filters);
+
+ fListener.setFailOnRedundantUpdates(false);
+ fListener.reset();
+
+ // Make sure that all elements are expanded
+ fViewer.setAutoExpandLevel(-1);
+
+ // Populate the view (all elements containing a "2" will be filtered out.
+ fViewer.setInput(model.getRootElement());
+
+ while (!fListener.isFinished(ALL_UPDATES_COMPLETE)) if (!fDisplay.readAndDispatch ()) Thread.sleep(0);
+
+ // Turn off filters and refresh.
+ filters = new ViewerFilter[0];
+ fViewer.setFilters(filters);
+ fListener.reset();
+ model.postDelta(new ModelDelta(model.getRootElement(), IModelDelta.CONTENT));
+ while (!fListener.isFinished(ALL_UPDATES_COMPLETE)) if (!fDisplay.readAndDispatch ()) Thread.sleep(0);
+
+ model.validateData(fViewer, TreePath.EMPTY, false, filters);
+ }
+
+ public void testPreserveExpandedOnMultLevelContent() throws InterruptedException {
+ //TreeModelViewerAutopopulateAgent autopopulateAgent = new TreeModelViewerAutopopulateAgent(fViewer);
+ TestModel model = StateTests.alternatingSubsreesModel(6);
+
+ // 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 ()) Thread.sleep(0);
+ model.validateData(fViewer, TreePath.EMPTY, true);
+
+ StateTests.expandAlternateElements(fListener, model, true);
+
+ // Set a selection in view
+ // Set a selection in view
+ TreeSelection originalSelection = new TreeSelection(
+ new TreePath[] { model.findElement("5"), model.findElement("5.1"), model.findElement("6") });
+ fViewer.setSelection(originalSelection);
+ Assert.assertTrue( StateTests.areTreeSelectionsEqual(originalSelection, (ITreeSelection)fViewer.getSelection()) );
+
+ // Set a filter to remove element "1"
+ ViewerFilter[] filters = new ViewerFilter[] { new TestViewerFilter("^1$") };
+ fViewer.setFilters(filters);
+
+ // Note: Re-expanding nodes causes redundant updates.
+ fListener.reset(false, false);
+ fListener.addUpdates(getInternalViewer(), TreePath.EMPTY, model.getRootElement(), filters, -1, ALL_UPDATES_COMPLETE);
+
+ // Post the refresh delta
+ model.postDelta(new ModelDelta(model.getRootElement(), IModelDelta.CONTENT));
+ while (!fListener.isFinished(ALL_UPDATES_COMPLETE | STATE_RESTORE_COMPLETE))
+ if (!fDisplay.readAndDispatch ()) Thread.sleep(0);
+
+ // Validate data
+ model.validateData(fViewer, TreePath.EMPTY, true, filters);
+ Assert.assertTrue(getInternalViewer().getExpandedState(model.findElement("2")) == false);
+ Assert.assertTrue(getInternalViewer().getExpandedState(model.findElement("3")) == true);
+ Assert.assertTrue(getInternalViewer().getExpandedState(model.findElement("3.1")) == true);
+ Assert.assertTrue(getInternalViewer().getExpandedState(model.findElement("4")) == false);
+ Assert.assertTrue(getInternalViewer().getExpandedState(model.findElement("5")) == true);
+ Assert.assertTrue(getInternalViewer().getExpandedState(model.findElement("5.1")) == true);
+ Assert.assertTrue(getInternalViewer().getExpandedState(model.findElement("6")) == false);
+ Assert.assertTrue( StateTests.areTreeSelectionsEqual(originalSelection, (ITreeSelection)fViewer.getSelection()) );
+
+ // Note: in past it was observed sub-optimal coalescing in this test due
+ // to scattered update requests from viewer.
+ Assert.assertTrue( fListener.checkCoalesced(TreePath.EMPTY, 0, 6) );
+
+ // Clear the filter, to re-add the element
+ filters = new ViewerFilter[0];
+ fViewer.setFilters(filters);
+
+ // Refresh again to get the filtered element back
+ fListener.reset();
+ fListener.addUpdates(getInternalViewer(), TreePath.EMPTY, model.getRootElement(), filters, -1, ALL_UPDATES_COMPLETE);
+ model.postDelta(new ModelDelta(model.getRootElement(), IModelDelta.CONTENT));
+ while (!fListener.isFinished(ALL_UPDATES_COMPLETE | STATE_RESTORE_COMPLETE))
+ if (!fDisplay.readAndDispatch ()) Thread.sleep(0);
+
+ // Validate data
+ model.validateData(fViewer, TreePath.EMPTY, true, filters);
+ Assert.assertTrue(getInternalViewer().getExpandedState(model.findElement("2")) == false);
+ Assert.assertTrue(getInternalViewer().getExpandedState(model.findElement("3")) == true);
+ Assert.assertTrue(getInternalViewer().getExpandedState(model.findElement("3.1")) == true);
+ Assert.assertTrue(getInternalViewer().getExpandedState(model.findElement("4")) == false);
+ Assert.assertTrue(getInternalViewer().getExpandedState(model.findElement("5")) == true);
+ Assert.assertTrue(getInternalViewer().getExpandedState(model.findElement("5.1")) == true);
+ Assert.assertTrue(getInternalViewer().getExpandedState(model.findElement("6")) == false);
+ Assert.assertTrue( StateTests.areTreeSelectionsEqual(originalSelection, (ITreeSelection)fViewer.getSelection()) );
+
+ }
+
+}
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 0d47d6ed5..4437d40e1 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,11 +17,11 @@ package org.eclipe.debug.tests.viewer.model;
*/
public interface ITestModelUpdatesListenerConstants {
- public static final int LABEL_UPDATES_COMPLETE = 0X00000001;
- public static final int CONTENT_UPDATES_COMPLETE = 0X00000002;
- public static final int CONTENT_UPDATES_STARTED = 0X00020000;
+ public static final int LABEL_SEQUENCE_COMPLETE = 0X00000001;
+ public static final int CONTENT_SEQUENCE_COMPLETE = 0X00000002;
+ public static final int CONTENT_SEQUENCE_STARTED = 0X00020000;
public static final int LABEL_UPDATES = 0X00000004;
- public static final int LABEL_UPDATES_STARTED = 0X00040000;
+ public static final int LABEL_SEQUENCE_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;
@@ -40,11 +40,11 @@ public interface ITestModelUpdatesListenerConstants {
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 ALL_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 LABEL_COMPLETE = LABEL_SEQUENCE_COMPLETE | LABEL_UPDATES | LABEL_UPDATES_RUNNING;
public static final int CONTENT_COMPLETE =
- CONTENT_UPDATES_COMPLETE | HAS_CHILDREN_UPDATES | CHILD_COUNT_UPDATES | CHILDREN_UPDATES | VIEWER_UPDATES_RUNNING;
+ CONTENT_SEQUENCE_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/JFaceViewerCheckTests.java b/org.eclipse.debug.tests/src/org/eclipe/debug/tests/viewer/model/JFaceViewerCheckTests.java
index 7cb15a0ee..d596f1443 100644
--- a/org.eclipse.debug.tests/src/org/eclipe/debug/tests/viewer/model/JFaceViewerCheckTests.java
+++ b/org.eclipse.debug.tests/src/org/eclipe/debug/tests/viewer/model/JFaceViewerCheckTests.java
@@ -10,7 +10,7 @@
*******************************************************************************/
package org.eclipe.debug.tests.viewer.model;
-import org.eclipse.debug.internal.ui.viewers.model.ITreeModelContentProviderTarget;
+import org.eclipse.debug.internal.ui.viewers.model.IInternalTreeModelViewer;
import org.eclipse.debug.internal.ui.viewers.model.provisional.PresentationContext;
import org.eclipse.debug.internal.ui.viewers.model.provisional.TreeModelViewer;
import org.eclipse.swt.SWT;
@@ -26,7 +26,7 @@ public class JFaceViewerCheckTests extends CheckTests {
super(name);
}
- protected ITreeModelContentProviderTarget createViewer(Display display, Shell shell) {
+ protected IInternalTreeModelViewer createViewer(Display display, Shell shell) {
return new TreeModelViewer(fShell, SWT.VIRTUAL | SWT.CHECK, new PresentationContext("TestViewer"));
}
}
diff --git a/org.eclipse.debug.tests/src/org/eclipe/debug/tests/viewer/model/JFaceViewerContentTests.java b/org.eclipse.debug.tests/src/org/eclipe/debug/tests/viewer/model/JFaceViewerContentTests.java
index 10213a3a3..29b127d2a 100644
--- a/org.eclipse.debug.tests/src/org/eclipe/debug/tests/viewer/model/JFaceViewerContentTests.java
+++ b/org.eclipse.debug.tests/src/org/eclipe/debug/tests/viewer/model/JFaceViewerContentTests.java
@@ -10,7 +10,7 @@
*******************************************************************************/
package org.eclipe.debug.tests.viewer.model;
-import org.eclipse.debug.internal.ui.viewers.model.ITreeModelContentProviderTarget;
+import org.eclipse.debug.internal.ui.viewers.model.IInternalTreeModelViewer;
import org.eclipse.debug.internal.ui.viewers.model.provisional.PresentationContext;
import org.eclipse.debug.internal.ui.viewers.model.provisional.TreeModelViewer;
import org.eclipse.swt.SWT;
@@ -26,7 +26,7 @@ public class JFaceViewerContentTests extends ContentTests {
super(name);
}
- protected ITreeModelContentProviderTarget createViewer(Display display, Shell shell) {
+ protected IInternalTreeModelViewer createViewer(Display display, Shell shell) {
return new TreeModelViewer(fShell, SWT.VIRTUAL, new PresentationContext("TestViewer"));
}
}
diff --git a/org.eclipse.debug.tests/src/org/eclipe/debug/tests/viewer/model/JFaceViewerDeltaTests.java b/org.eclipse.debug.tests/src/org/eclipe/debug/tests/viewer/model/JFaceViewerDeltaTests.java
index ed613bd6f..c25961b3e 100644
--- a/org.eclipse.debug.tests/src/org/eclipe/debug/tests/viewer/model/JFaceViewerDeltaTests.java
+++ b/org.eclipse.debug.tests/src/org/eclipe/debug/tests/viewer/model/JFaceViewerDeltaTests.java
@@ -10,7 +10,7 @@
*******************************************************************************/
package org.eclipe.debug.tests.viewer.model;
-import org.eclipse.debug.internal.ui.viewers.model.ITreeModelContentProviderTarget;
+import org.eclipse.debug.internal.ui.viewers.model.IInternalTreeModelViewer;
import org.eclipse.debug.internal.ui.viewers.model.provisional.PresentationContext;
import org.eclipse.debug.internal.ui.viewers.model.provisional.TreeModelViewer;
import org.eclipse.swt.SWT;
@@ -26,7 +26,7 @@ public class JFaceViewerDeltaTests extends DeltaTests {
super(name);
}
- protected ITreeModelContentProviderTarget createViewer(Display display, Shell shell) {
+ protected IInternalTreeModelViewer createViewer(Display display, Shell shell) {
return new TreeModelViewer(fShell, SWT.VIRTUAL, new PresentationContext("TestViewer"));
}
diff --git a/org.eclipse.debug.tests/src/org/eclipe/debug/tests/viewer/model/JFaceViewerFilterTests.java b/org.eclipse.debug.tests/src/org/eclipe/debug/tests/viewer/model/JFaceViewerFilterTests.java
new file mode 100644
index 000000000..853d2e7c1
--- /dev/null
+++ b/org.eclipse.debug.tests/src/org/eclipe/debug/tests/viewer/model/JFaceViewerFilterTests.java
@@ -0,0 +1,32 @@
+/*******************************************************************************
+ * Copyright (c) 2011 Wind River Systems and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Wind River Systems - initial API and implementation
+ *******************************************************************************/
+package org.eclipe.debug.tests.viewer.model;
+
+import org.eclipse.debug.internal.ui.viewers.model.IInternalTreeModelViewer;
+import org.eclipse.debug.internal.ui.viewers.model.provisional.PresentationContext;
+import org.eclipse.debug.internal.ui.viewers.model.provisional.TreeModelViewer;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Shell;
+
+/**
+ * @since 3.8
+ */
+public class JFaceViewerFilterTests extends FilterTests {
+
+ public JFaceViewerFilterTests(String name) {
+ super(name);
+ }
+
+ protected IInternalTreeModelViewer createViewer(Display display, Shell shell) {
+ return new TreeModelViewer(fShell, SWT.VIRTUAL | SWT.MULTI, new PresentationContext("TestViewer"));
+ }
+}
diff --git a/org.eclipse.debug.tests/src/org/eclipe/debug/tests/viewer/model/JFaceViewerLazyTests.java b/org.eclipse.debug.tests/src/org/eclipe/debug/tests/viewer/model/JFaceViewerLazyTests.java
index fa6183d61..e1955a726 100644
--- a/org.eclipse.debug.tests/src/org/eclipe/debug/tests/viewer/model/JFaceViewerLazyTests.java
+++ b/org.eclipse.debug.tests/src/org/eclipe/debug/tests/viewer/model/JFaceViewerLazyTests.java
@@ -10,7 +10,7 @@
*******************************************************************************/
package org.eclipe.debug.tests.viewer.model;
-import org.eclipse.debug.internal.ui.viewers.model.ITreeModelContentProviderTarget;
+import org.eclipse.debug.internal.ui.viewers.model.IInternalTreeModelViewer;
import org.eclipse.debug.internal.ui.viewers.model.provisional.PresentationContext;
import org.eclipse.debug.internal.ui.viewers.model.provisional.TreeModelViewer;
import org.eclipse.swt.SWT;
@@ -26,7 +26,7 @@ public class JFaceViewerLazyTests extends LazyTests {
super(name);
}
- protected ITreeModelContentProviderTarget createViewer(Display display, Shell shell) {
+ protected IInternalTreeModelViewer createViewer(Display display, Shell shell) {
return new TreeModelViewer(fShell, SWT.VIRTUAL, new PresentationContext("TestViewer"));
}
}
diff --git a/org.eclipse.debug.tests/src/org/eclipe/debug/tests/viewer/model/JFaceViewerPerformanceTests.java b/org.eclipse.debug.tests/src/org/eclipe/debug/tests/viewer/model/JFaceViewerPerformanceTests.java
index 865db9508..4b3bdc06f 100644
--- a/org.eclipse.debug.tests/src/org/eclipe/debug/tests/viewer/model/JFaceViewerPerformanceTests.java
+++ b/org.eclipse.debug.tests/src/org/eclipe/debug/tests/viewer/model/JFaceViewerPerformanceTests.java
@@ -10,7 +10,7 @@
*******************************************************************************/
package org.eclipe.debug.tests.viewer.model;
-import org.eclipse.debug.internal.ui.viewers.model.ITreeModelContentProviderTarget;
+import org.eclipse.debug.internal.ui.viewers.model.IInternalTreeModelViewer;
import org.eclipse.debug.internal.ui.viewers.model.provisional.PresentationContext;
import org.eclipse.debug.internal.ui.viewers.model.provisional.TreeModelViewer;
import org.eclipse.swt.SWT;
@@ -26,7 +26,7 @@ public class JFaceViewerPerformanceTests extends PerformanceTests {
super(name);
}
- protected ITreeModelContentProviderTarget createViewer(Display display, Shell shell) {
+ protected IInternalTreeModelViewer createViewer(Display display, Shell shell) {
return new TreeModelViewer(fShell, SWT.VIRTUAL, new PresentationContext("TestViewer"));
}
diff --git a/org.eclipse.debug.tests/src/org/eclipe/debug/tests/viewer/model/JFaceViewerPopupTests.java b/org.eclipse.debug.tests/src/org/eclipe/debug/tests/viewer/model/JFaceViewerPopupTests.java
index 70f41bd3c..43954104d 100644
--- a/org.eclipse.debug.tests/src/org/eclipe/debug/tests/viewer/model/JFaceViewerPopupTests.java
+++ b/org.eclipse.debug.tests/src/org/eclipe/debug/tests/viewer/model/JFaceViewerPopupTests.java
@@ -10,7 +10,7 @@
*******************************************************************************/
package org.eclipe.debug.tests.viewer.model;
-import org.eclipse.debug.internal.ui.viewers.model.ITreeModelViewer;
+import org.eclipse.debug.internal.ui.viewers.model.provisional.ITreeModelViewer;
import org.eclipse.debug.internal.ui.viewers.model.provisional.PresentationContext;
import org.eclipse.debug.internal.ui.viewers.model.provisional.TreeModelViewer;
import org.eclipse.swt.SWT;
diff --git a/org.eclipse.debug.tests/src/org/eclipe/debug/tests/viewer/model/JFaceViewerSelectionTests.java b/org.eclipse.debug.tests/src/org/eclipe/debug/tests/viewer/model/JFaceViewerSelectionTests.java
index 6cde1fbfc..511c497d7 100644
--- a/org.eclipse.debug.tests/src/org/eclipe/debug/tests/viewer/model/JFaceViewerSelectionTests.java
+++ b/org.eclipse.debug.tests/src/org/eclipe/debug/tests/viewer/model/JFaceViewerSelectionTests.java
@@ -10,7 +10,7 @@
*******************************************************************************/
package org.eclipe.debug.tests.viewer.model;
-import org.eclipse.debug.internal.ui.viewers.model.ITreeModelViewer;
+import org.eclipse.debug.internal.ui.viewers.model.provisional.ITreeModelViewer;
import org.eclipse.debug.internal.ui.viewers.model.provisional.PresentationContext;
import org.eclipse.debug.internal.ui.viewers.model.provisional.TreeModelViewer;
import org.eclipse.swt.SWT;
diff --git a/org.eclipse.debug.tests/src/org/eclipe/debug/tests/viewer/model/JFaceViewerStateTests.java b/org.eclipse.debug.tests/src/org/eclipe/debug/tests/viewer/model/JFaceViewerStateTests.java
index 07104a79b..49fcb40bd 100644
--- a/org.eclipse.debug.tests/src/org/eclipe/debug/tests/viewer/model/JFaceViewerStateTests.java
+++ b/org.eclipse.debug.tests/src/org/eclipe/debug/tests/viewer/model/JFaceViewerStateTests.java
@@ -10,7 +10,7 @@
*******************************************************************************/
package org.eclipe.debug.tests.viewer.model;
-import org.eclipse.debug.internal.ui.viewers.model.ITreeModelViewer;
+import org.eclipse.debug.internal.ui.viewers.model.provisional.ITreeModelViewer;
import org.eclipse.debug.internal.ui.viewers.model.provisional.PresentationContext;
import org.eclipse.debug.internal.ui.viewers.model.provisional.TreeModelViewer;
import org.eclipse.swt.SWT;
diff --git a/org.eclipse.debug.tests/src/org/eclipe/debug/tests/viewer/model/JFaceViewerTopIndexTests.java b/org.eclipse.debug.tests/src/org/eclipe/debug/tests/viewer/model/JFaceViewerTopIndexTests.java
index 668612860..51597c8a8 100644
--- a/org.eclipse.debug.tests/src/org/eclipe/debug/tests/viewer/model/JFaceViewerTopIndexTests.java
+++ b/org.eclipse.debug.tests/src/org/eclipe/debug/tests/viewer/model/JFaceViewerTopIndexTests.java
@@ -17,7 +17,7 @@ import junit.framework.TestCase;
import org.eclipe.debug.tests.viewer.model.TestModel.TestElement;
import org.eclipse.core.commands.ExecutionException;
import org.eclipse.core.runtime.Platform;
-import org.eclipse.debug.internal.ui.viewers.model.ITreeModelContentProviderTarget;
+import org.eclipse.debug.internal.ui.viewers.model.IInternalTreeModelViewer;
import org.eclipse.debug.internal.ui.viewers.model.provisional.IModelDelta;
import org.eclipse.debug.internal.ui.viewers.model.provisional.IModelDeltaVisitor;
import org.eclipse.debug.internal.ui.viewers.model.provisional.ModelDelta;
@@ -80,7 +80,7 @@ public class JFaceViewerTopIndexTests extends TestCase implements ITestModelUpda
}
}
- protected ITreeModelContentProviderTarget getCTargetViewer() {
+ protected IInternalTreeModelViewer getCTargetViewer() {
return fViewer;
}
@@ -211,7 +211,7 @@ public class JFaceViewerTopIndexTests extends TestCase implements ITestModelUpda
model.postDelta(rootDelta);
- while (!fListener.isFinished(CONTENT_UPDATES_COMPLETE | MODEL_CHANGED_COMPLETE))
+ while (!fListener.isFinished(CONTENT_SEQUENCE_COMPLETE | MODEL_CHANGED_COMPLETE))
if (!fDisplay.readAndDispatch ()) Thread.sleep(0);
// Validate that the first node is expanded
@@ -379,7 +379,7 @@ public class JFaceViewerTopIndexTests extends TestCase implements ITestModelUpda
// Wait for the second model delta to process
fListener.reset();
model.postDelta(revealDelta);
- while (!fListener.isFinished(MODEL_CHANGED_COMPLETE | CONTENT_UPDATES_COMPLETE))
+ while (!fListener.isFinished(MODEL_CHANGED_COMPLETE | CONTENT_SEQUENCE_COMPLETE))
if (!fDisplay.readAndDispatch ()) Thread.sleep(0);
// Clear view then reset it again.
@@ -512,7 +512,7 @@ public class JFaceViewerTopIndexTests extends TestCase implements ITestModelUpda
fListener.reset(false, false);
fListener.addUpdates(getCTargetViewer(), originalTopPath, (TestElement)originalTopPath.getLastSegment(), 0, STATE_UPDATES);
fViewer.setInput(model.getRootElement());
- while (!fListener.isFinished(STATE_UPDATES | CONTENT_UPDATES_COMPLETE)) if (!fDisplay.readAndDispatch ()) Thread.sleep(0);
+ while (!fListener.isFinished(STATE_UPDATES | CONTENT_SEQUENCE_COMPLETE)) if (!fDisplay.readAndDispatch ()) Thread.sleep(0);
while (fDisplay.readAndDispatch ()) {}
// check if REVEAL was restored OK
diff --git a/org.eclipse.debug.tests/src/org/eclipe/debug/tests/viewer/model/JFaceViewerUpdateTests.java b/org.eclipse.debug.tests/src/org/eclipe/debug/tests/viewer/model/JFaceViewerUpdateTests.java
index 983b8d77f..ee06a4b46 100644
--- a/org.eclipse.debug.tests/src/org/eclipe/debug/tests/viewer/model/JFaceViewerUpdateTests.java
+++ b/org.eclipse.debug.tests/src/org/eclipe/debug/tests/viewer/model/JFaceViewerUpdateTests.java
@@ -10,7 +10,7 @@
*******************************************************************************/
package org.eclipe.debug.tests.viewer.model;
-import org.eclipse.debug.internal.ui.viewers.model.ITreeModelViewer;
+import org.eclipse.debug.internal.ui.viewers.model.provisional.ITreeModelViewer;
import org.eclipse.debug.internal.ui.viewers.model.provisional.PresentationContext;
import org.eclipse.debug.internal.ui.viewers.model.provisional.TreeModelViewer;
import org.eclipse.swt.SWT;
diff --git a/org.eclipse.debug.tests/src/org/eclipe/debug/tests/viewer/model/LazyTests.java b/org.eclipse.debug.tests/src/org/eclipe/debug/tests/viewer/model/LazyTests.java
index f6566d9bc..986868bee 100644
--- a/org.eclipse.debug.tests/src/org/eclipe/debug/tests/viewer/model/LazyTests.java
+++ b/org.eclipse.debug.tests/src/org/eclipe/debug/tests/viewer/model/LazyTests.java
@@ -15,7 +15,7 @@ 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.IInternalTreeModelViewer;
import org.eclipse.debug.internal.ui.viewers.model.provisional.IModelDelta;
import org.eclipse.debug.internal.ui.viewers.model.provisional.ModelDelta;
import org.eclipse.jface.viewers.IStructuredSelection;
@@ -36,7 +36,7 @@ abstract public class LazyTests extends TestCase implements ITestModelUpdatesLis
Display fDisplay;
Shell fShell;
- ITreeModelContentProviderTarget fViewer;
+ IInternalTreeModelViewer fViewer;
TestModelUpdatesListener fListener;
public LazyTests(String name) {
@@ -59,7 +59,7 @@ abstract public class LazyTests extends TestCase implements ITestModelUpdatesLis
fShell.open ();
}
- abstract protected ITreeModelContentProviderTarget createViewer(Display display, Shell shell);
+ abstract protected IInternalTreeModelViewer createViewer(Display display, Shell shell);
/**
* @throws java.lang.Exception
*/
@@ -140,7 +140,7 @@ abstract public class LazyTests extends TestCase implements ITestModelUpdatesLis
}
model.postDelta(rootDelta);
- while (!fListener.isFinished(CONTENT_UPDATES_COMPLETE | MODEL_CHANGED_COMPLETE | LABEL_UPDATES_COMPLETE))
+ while (!fListener.isFinished(CONTENT_SEQUENCE_COMPLETE | MODEL_CHANGED_COMPLETE | LABEL_SEQUENCE_COMPLETE))
if (!fDisplay.readAndDispatch ()) Thread.sleep(0);
}
@@ -165,7 +165,7 @@ abstract public class LazyTests extends TestCase implements ITestModelUpdatesLis
fListener.setFailOnRedundantUpdates(false);
fViewer.setInput(model.getRootElement());
fListener.addLabelUpdate(model.findElement("1.0"));
- while (!fListener.isFinished(CONTENT_UPDATES_COMPLETE | LABEL_COMPLETE)) if (!fDisplay.readAndDispatch ()) Thread.sleep(0);
+ while (!fListener.isFinished(CONTENT_SEQUENCE_COMPLETE | LABEL_COMPLETE)) if (!fDisplay.readAndDispatch ()) Thread.sleep(0);
// Set selection so that the initial selection is not empty
fViewer.setSelection(new TreeSelection(new TreePath[] { model.findElement("1.0")} ));
@@ -209,7 +209,7 @@ abstract public class LazyTests extends TestCase implements ITestModelUpdatesLis
// Populate initial view content
fListener.reset(TreePath.EMPTY, model.getRootElement(), -1, true, true);
fViewer.setInput(model.getRootElement());
- while (!fListener.isFinished(CONTENT_UPDATES_COMPLETE | LABEL_UPDATES_COMPLETE)) if (!fDisplay.readAndDispatch ()) Thread.sleep(0);
+ while (!fListener.isFinished(CONTENT_SEQUENCE_COMPLETE | LABEL_SEQUENCE_COMPLETE)) if (!fDisplay.readAndDispatch ()) Thread.sleep(0);
// Turn off autoexpand
fViewer.setAutoExpandLevel(0);
@@ -218,7 +218,7 @@ abstract public class LazyTests extends TestCase implements ITestModelUpdatesLis
fListener.reset();
fListener.setFailOnRedundantUpdates(false);
fViewer.reveal(model.findElement("1"), 500);
- while (!fListener.isFinished(CONTENT_UPDATES_COMPLETE)) if (!fDisplay.readAndDispatch ()) Thread.sleep(0);
+ while (!fListener.isFinished(CONTENT_SEQUENCE_COMPLETE)) if (!fDisplay.readAndDispatch ()) Thread.sleep(0);
// Create delta to refresh the "1" element.
TestElement rootElement = model.getRootElement();
@@ -248,7 +248,7 @@ abstract public class LazyTests extends TestCase implements ITestModelUpdatesLis
}
model.postDelta(rootDelta);
- while (!fListener.isFinished(CONTENT_UPDATES_COMPLETE | MODEL_CHANGED_COMPLETE))
+ while (!fListener.isFinished(CONTENT_SEQUENCE_COMPLETE | MODEL_CHANGED_COMPLETE))
if (!fDisplay.readAndDispatch ()) Thread.sleep(0);
}
}
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 55a140e2c..2a5b06759 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
@@ -14,11 +14,14 @@ 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.IInternalTreeModelViewer;
import org.eclipse.debug.internal.ui.viewers.model.provisional.IModelDelta;
+import org.eclipse.debug.internal.ui.viewers.model.provisional.ITreeModelViewer;
import org.eclipse.debug.internal.ui.viewers.model.provisional.ModelDelta;
import org.eclipse.jface.viewers.TreePath;
+import org.eclipse.jface.viewers.TreeSelection;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.jface.viewers.ViewerFilter;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
@@ -55,7 +58,7 @@ abstract public class PerformanceTests extends TestCase implements ITestModelUpd
fShell.open ();
}
- abstract protected ITreeModelContentProviderTarget createViewer(Display display, Shell shell);
+ abstract protected IInternalTreeModelViewer createViewer(Display display, Shell shell);
/**
* @throws java.lang.Exception
@@ -87,7 +90,7 @@ abstract public class PerformanceTests extends TestCase implements ITestModelUpd
public void testRefreshStruct() throws InterruptedException {
TestModel model = new TestModel();
model.setRoot( new TestElement(model, "root", new TestElement[0] ) );
- model.setElementChildren(TreePath.EMPTY, makeModelElements(model, getTestModelDepth(), "model"));
+ model.setElementChildren(TreePath.EMPTY, TestModel.makeMultiLevelElements(model, getTestModelDepth(), "model."));
fViewer.setAutoExpandLevel(-1);
@@ -105,7 +108,6 @@ abstract public class PerformanceTests extends TestCase implements ITestModelUpd
for (int i = 0; i < 100; i++) {
// Update the model
model.setAllAppendix(" - pass " + i);
- //model.setElementChildren(TreePath.EMPTY, makeModelElements(model, getTestModelDepth(), "pass " + i));
TestElement element = model.getRootElement();
fListener.reset(TreePath.EMPTY, element, -1, false, false);
@@ -114,7 +116,6 @@ abstract public class PerformanceTests extends TestCase implements ITestModelUpd
model.postDelta(new ModelDelta(element, IModelDelta.CONTENT));
while (!fListener.isFinished(ALL_UPDATES_COMPLETE | MODEL_CHANGED_COMPLETE))
if (!fDisplay.readAndDispatch ()) Thread.sleep(0);
- model.validateData(fViewer, TreePath.EMPTY);
meter.stop();
System.gc();
}
@@ -129,7 +130,7 @@ abstract public class PerformanceTests extends TestCase implements ITestModelUpd
public void testRefreshStructReplaceElements() throws InterruptedException {
TestModel model = new TestModel();
model.setRoot( new TestElement(model, "root", new TestElement[0] ) );
- model.setElementChildren(TreePath.EMPTY, makeModelElements(model, getTestModelDepth(), "model"));
+ model.setElementChildren(TreePath.EMPTY, TestModel.makeMultiLevelElements(model, getTestModelDepth(), "model."));
fViewer.setAutoExpandLevel(-1);
@@ -144,9 +145,9 @@ abstract public class PerformanceTests extends TestCase implements ITestModelUpd
Performance perf = Performance.getDefault();
PerformanceMeter meter = perf.createPerformanceMeter(perf.getDefaultScenarioId(this));
try {
- for (int i = 0; i < 2000; i++) {
+ for (int i = 0; i < 100; i++) {
// Update the model
- model.setElementChildren(TreePath.EMPTY, makeModelElements(model, getTestModelDepth(), "pass " + i));
+ model.setElementChildren(TreePath.EMPTY, TestModel.makeMultiLevelElements(model, getTestModelDepth(), "pass " + i + "."));
TestElement element = model.getRootElement();
fListener.reset(TreePath.EMPTY, element, -1, false, false);
@@ -155,7 +156,6 @@ abstract public class PerformanceTests extends TestCase implements ITestModelUpd
model.postDelta(new ModelDelta(element, IModelDelta.CONTENT));
while (!fListener.isFinished(ALL_UPDATES_COMPLETE | MODEL_CHANGED_COMPLETE))
if (!fDisplay.readAndDispatch ()) Thread.sleep(0);
- model.validateData(fViewer, TreePath.EMPTY);
meter.stop();
System.gc();
}
@@ -167,12 +167,156 @@ abstract public class PerformanceTests extends TestCase implements ITestModelUpd
}
}
- private TestElement[] makeModelElements(TestModel model, int depth, String prefix) {
- TestElement[] elements = new TestElement[depth];
- for (int i = 0; i < depth; i++) {
- String name = prefix + "." + i;
- elements[i] = new TestElement(model, name, makeModelElements(model, i, name));
+
+ public void testRefreshList() throws InterruptedException {
+ TestModel model = new TestModel();
+ model.setRoot( new TestElement(model, "root", new TestElement[0] ) );
+ int numElements = (int)Math.pow(2, getTestModelDepth());
+ model.setElementChildren(TreePath.EMPTY, TestModel.makeSingleLevelModelElements(model, numElements, "model."));
+
+ fViewer.setAutoExpandLevel(-1);
+
+ // Create the listener
+ 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 ()) Thread.sleep(0);
+ model.validateData(fViewer, TreePath.EMPTY);
+
+ Performance perf = Performance.getDefault();
+ PerformanceMeter meter = perf.createPerformanceMeter(perf.getDefaultScenarioId(this));
+ try {
+ for (int i = 0; i < 100; i++) {
+ // Update the model
+ model.setAllAppendix(" - pass " + i);
+
+ TestElement element = model.getRootElement();
+ fListener.reset(TreePath.EMPTY, element, -1, false, false);
+
+ meter.start();
+ model.postDelta(new ModelDelta(element, IModelDelta.CONTENT));
+ while (!fListener.isFinished(ALL_UPDATES_COMPLETE | MODEL_CHANGED_COMPLETE))
+ if (!fDisplay.readAndDispatch ()) Thread.sleep(0);
+ meter.stop();
+ System.gc();
+ }
+
+ meter.commit();
+ perf.assertPerformance(meter);
+ } finally {
+ meter.dispose();
}
- return elements;
}
+
+ public void testSaveAndRestore() throws InterruptedException {
+ //TreeModelViewerAutopopulateAgent autopopulateAgent = new TreeModelViewerAutopopulateAgent(fViewer);
+ TestModel model = TestModel.simpleMultiLevel();
+
+ // expand all elements
+ fViewer.setAutoExpandLevel(-1);
+
+ // 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 ()) Thread.sleep(0);
+ model.validateData(fViewer, TreePath.EMPTY);
+
+ // Set a selection in view
+ fViewer.setSelection(new TreeSelection(model.findElement("3.2.3")));
+
+ // Turn off the auto-expand now since we want to text the auto-expand logic
+ fViewer.setAutoExpandLevel(-1);
+
+ Performance perf = Performance.getDefault();
+ PerformanceMeter meter = perf.createPerformanceMeter(perf.getDefaultScenarioId(this));
+ try {
+ for (int i = 0; i < 100; i++) {
+ // Update the model
+ model.setAllAppendix(" - pass " + i);
+
+ // Set the viewer input to null. This will trigger the view to save the viewer state.
+ fListener.reset(true, false);
+
+ meter.start();
+ fViewer.setInput(null);
+ while (!fListener.isFinished(STATE_SAVE_COMPLETE)) if (!fDisplay.readAndDispatch ()) Thread.sleep(0);
+
+ // 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(ALL_UPDATES_COMPLETE | STATE_RESTORE_COMPLETE)) if (!fDisplay.readAndDispatch ()) Thread.sleep(0);
+ meter.stop();
+ System.gc();
+ }
+
+ meter.commit();
+ perf.assertPerformance(meter);
+ } finally {
+ meter.dispose();
+ }
+
+ }
+
+ public void testRefreshListFiltered() throws InterruptedException {
+ TestModel model = new TestModel();
+ model.setRoot( new TestElement(model, "root", new TestElement[0] ) );
+ int numElements = (int)Math.pow(2, getTestModelDepth());
+ model.setElementChildren(TreePath.EMPTY, TestModel.makeSingleLevelModelElements(model, 1000, "model."));
+
+ fViewer.setAutoExpandLevel(-1);
+
+ // Create the listener
+ fListener.reset(TreePath.EMPTY, model.getRootElement(), -1, true, false);
+
+ fViewer.addFilter(new ViewerFilter() {
+ public boolean select(Viewer viewer, Object parentElement, Object element) {
+ if (element instanceof TestElement) {
+ String id = ((TestElement)element).getID();
+ if (id.startsWith("model.")) {
+ id = id.substring("model.".length());
+ }
+ if (id.length() >= 2 && (id.charAt(1) == '1' || id.charAt(1) == '3' || id.charAt(1) == '5' || id.charAt(1) == '7' || id.charAt(1) == '9')) {
+ return false;
+ }
+ }
+ return true;
+ }
+ });
+
+ // Set the input into the view and update the view.
+ fViewer.setInput(model.getRootElement());
+ while (!fListener.isFinished()) if (!fDisplay.readAndDispatch ()) Thread.sleep(0);
+ model.validateData(fViewer, TreePath.EMPTY);
+
+ Performance perf = Performance.getDefault();
+ PerformanceMeter meter = perf.createPerformanceMeter(perf.getDefaultScenarioId(this));
+ try {
+ for (int i = 0; i < 100; i++) {
+ // Update the model
+ model.setAllAppendix(" - pass " + i);
+
+ TestElement element = model.getRootElement();
+ fListener.reset(TreePath.EMPTY, element, -1, false, false);
+
+ meter.start();
+ model.postDelta(new ModelDelta(element, IModelDelta.CONTENT));
+ while (!fListener.isFinished(ALL_UPDATES_COMPLETE | MODEL_CHANGED_COMPLETE))
+ if (!fDisplay.readAndDispatch ()) Thread.sleep(0);
+ meter.stop();
+ System.gc();
+ }
+
+ meter.commit();
+ perf.assertPerformance(meter);
+ } finally {
+ meter.dispose();
+ }
+ }
+
}
diff --git a/org.eclipse.debug.tests/src/org/eclipe/debug/tests/viewer/model/PopupTests.java b/org.eclipse.debug.tests/src/org/eclipe/debug/tests/viewer/model/PopupTests.java
index 19247755d..e760cd39c 100644
--- a/org.eclipse.debug.tests/src/org/eclipe/debug/tests/viewer/model/PopupTests.java
+++ b/org.eclipse.debug.tests/src/org/eclipe/debug/tests/viewer/model/PopupTests.java
@@ -19,9 +19,9 @@ import junit.framework.Assert;
import junit.framework.TestCase;
import org.eclipe.debug.tests.viewer.model.TestModel.TestElement;
-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.IInternalTreeModelViewer;
import org.eclipse.debug.internal.ui.viewers.model.provisional.IModelDelta;
+import org.eclipse.debug.internal.ui.viewers.model.provisional.ITreeModelViewer;
import org.eclipse.debug.internal.ui.viewers.model.provisional.ModelDelta;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.ITreeSelection;
@@ -65,8 +65,8 @@ abstract public class PopupTests extends TestCase implements ITestModelUpdatesLi
fShell.open ();
}
- protected ITreeModelContentProviderTarget getCTargetViewer() {
- return (ITreeModelContentProviderTarget)fViewer;
+ protected IInternalTreeModelViewer getCTargetViewer() {
+ return (IInternalTreeModelViewer)fViewer;
}
@@ -147,14 +147,14 @@ abstract public class PopupTests extends TestCase implements ITestModelUpdatesLi
// Validate the expansion state BEFORE posting the delta.
- ITreeModelContentProviderTarget contentProviderViewer = (ITreeModelContentProviderTarget)fViewer;
+ IInternalTreeModelViewer contentProviderViewer = (IInternalTreeModelViewer)fViewer;
Assert.assertFalse(contentProviderViewer.getExpandedState(path_root_3));
model.postDelta(deltaRoot);
while (true) {
if (fListener.isFinished(MODEL_CHANGED_COMPLETE)) {
- if (fListener.isFinished(CONTENT_UPDATES_STARTED)) {
- if (fListener.isFinished(CONTENT_UPDATES_COMPLETE)) {
+ if (fListener.isFinished(CONTENT_SEQUENCE_STARTED)) {
+ if (fListener.isFinished(CONTENT_SEQUENCE_COMPLETE)) {
break;
}
} else {
diff --git a/org.eclipse.debug.tests/src/org/eclipe/debug/tests/viewer/model/SelectionTests.java b/org.eclipse.debug.tests/src/org/eclipe/debug/tests/viewer/model/SelectionTests.java
index 3ebb062a0..3deb65e5d 100644
--- a/org.eclipse.debug.tests/src/org/eclipe/debug/tests/viewer/model/SelectionTests.java
+++ b/org.eclipse.debug.tests/src/org/eclipe/debug/tests/viewer/model/SelectionTests.java
@@ -15,10 +15,10 @@ import java.util.List;
import junit.framework.TestCase;
-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.IModelSelectionPolicy;
import org.eclipse.debug.internal.ui.viewers.model.provisional.IPresentationContext;
+import org.eclipse.debug.internal.ui.viewers.model.provisional.ITreeModelViewer;
import org.eclipse.debug.internal.ui.viewers.model.provisional.ModelDelta;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.ISelectionChangedListener;
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 9f1b85aa4..3ad16f93b 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
@@ -19,9 +19,9 @@ 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.IInternalTreeModelViewer;
import org.eclipse.debug.internal.ui.viewers.model.provisional.IModelDelta;
+import org.eclipse.debug.internal.ui.viewers.model.provisional.ITreeModelViewer;
import org.eclipse.debug.internal.ui.viewers.model.provisional.ModelDelta;
import org.eclipse.jface.viewers.ITreeSelection;
import org.eclipse.jface.viewers.TreePath;
@@ -86,8 +86,8 @@ abstract public class StateTests extends TestCase implements ITestModelUpdatesLi
}
}
- protected ITreeModelContentProviderTarget getCTargetViewer() {
- return (ITreeModelContentProviderTarget)fViewer;
+ protected IInternalTreeModelViewer getInternalViewer() {
+ return (IInternalTreeModelViewer)fViewer;
}
public void testUpdateViewer() throws InterruptedException {
@@ -138,7 +138,7 @@ abstract public class StateTests extends TestCase implements ITestModelUpdatesLi
fListener.addLabelUpdate(path3);
fViewer.updateViewer(updateDelta);
- while (!fListener.isFinished(CONTENT_UPDATES_COMPLETE | LABEL_UPDATES))
+ while (!fListener.isFinished(CONTENT_SEQUENCE_COMPLETE | LABEL_UPDATES))
if (!fDisplay.readAndDispatch ()) Thread.sleep(0);
// Extract the new state from viewer
@@ -189,7 +189,7 @@ abstract public class StateTests extends TestCase implements ITestModelUpdatesLi
* (size).1
* (size).1.1
*/
- private TestModel alternatingSubsreesModel(int size) {
+ static TestModel alternatingSubsreesModel(int size) {
TestModel model = new TestModel();
TestElement[] elements = new TestElement[size];
@@ -207,7 +207,7 @@ abstract public class StateTests extends TestCase implements ITestModelUpdatesLi
return model;
}
- private boolean areTreeSelectionsEqual(ITreeSelection sel1, ITreeSelection sel2) {
+ static boolean areTreeSelectionsEqual(ITreeSelection sel1, ITreeSelection sel2) {
Set sel1Set = new HashSet();
sel1Set.addAll( Arrays.asList(sel1.getPaths()) );
@@ -217,9 +217,9 @@ abstract public class StateTests extends TestCase implements ITestModelUpdatesLi
return sel1Set.equals(sel2Set);
}
- private void expandAlternateElements(TestModel model, boolean waitForAllUpdates) throws InterruptedException {
- fListener.reset();
- fListener.setFailOnRedundantUpdates(false);
+ static void expandAlternateElements(TestModelUpdatesListener listener, TestModel model, boolean waitForAllUpdates) throws InterruptedException {
+ listener.reset();
+ listener.setFailOnRedundantUpdates(false);
TestElement rootElement = model.getRootElement();
TestElement[] children = rootElement.getChildren();
@@ -237,7 +237,7 @@ abstract public class StateTests extends TestCase implements ITestModelUpdatesLi
int index = i;
while (element.getChildren().length != 0) {
TreePath elementPath = model.findElement(element.getLabel());
- fListener.addUpdates(
+ listener.addUpdates(
elementPath, element, 1,
CHILD_COUNT_UPDATES | (waitForAllUpdates ? CHILDREN_UPDATES : 0) );
delta = delta.addNode(element, index, IModelDelta.EXPAND, element.getChildren().length);
@@ -247,8 +247,8 @@ abstract public class StateTests extends TestCase implements ITestModelUpdatesLi
}
model.postDelta(rootDelta);
- while (!fListener.isFinished(CONTENT_UPDATES_COMPLETE | MODEL_CHANGED_COMPLETE))
- if (!fDisplay.readAndDispatch ()) Thread.sleep(0);
+ while (!listener.isFinished(CONTENT_SEQUENCE_COMPLETE | MODEL_CHANGED_COMPLETE))
+ if (!Display.getDefault().readAndDispatch ()) Thread.sleep(0);
}
public void testPreserveExpandedOnRemove() throws InterruptedException {
@@ -265,7 +265,7 @@ abstract public class StateTests extends TestCase implements ITestModelUpdatesLi
while (!fListener.isFinished()) if (!fDisplay.readAndDispatch ()) Thread.sleep(0);
model.validateData(fViewer, TreePath.EMPTY, true);
- expandAlternateElements(model, true);
+ expandAlternateElements(fListener, model, true);
// Set a selection in view
TreeSelection originalSelection = new TreeSelection(model.findElement("5.1"));
@@ -282,13 +282,13 @@ abstract public class StateTests extends TestCase implements ITestModelUpdatesLi
// Validate data
model.validateData(fViewer, TreePath.EMPTY, true);
- Assert.assertTrue(getCTargetViewer().getExpandedState(model.findElement("2")) == false);
- Assert.assertTrue(getCTargetViewer().getExpandedState(model.findElement("3")) == true);
- Assert.assertTrue(getCTargetViewer().getExpandedState(model.findElement("3.1")) == true);
- Assert.assertTrue(getCTargetViewer().getExpandedState(model.findElement("4")) == false);
- Assert.assertTrue(getCTargetViewer().getExpandedState(model.findElement("5")) == true);
- Assert.assertTrue(getCTargetViewer().getExpandedState(model.findElement("5.1")) == true);
- Assert.assertTrue(getCTargetViewer().getExpandedState(model.findElement("6")) == false);
+ Assert.assertTrue(getInternalViewer().getExpandedState(model.findElement("2")) == false);
+ Assert.assertTrue(getInternalViewer().getExpandedState(model.findElement("3")) == true);
+ Assert.assertTrue(getInternalViewer().getExpandedState(model.findElement("3.1")) == true);
+ Assert.assertTrue(getInternalViewer().getExpandedState(model.findElement("4")) == false);
+ Assert.assertTrue(getInternalViewer().getExpandedState(model.findElement("5")) == true);
+ Assert.assertTrue(getInternalViewer().getExpandedState(model.findElement("5.1")) == true);
+ Assert.assertTrue(getInternalViewer().getExpandedState(model.findElement("6")) == false);
Assert.assertTrue( areTreeSelectionsEqual(originalSelection, (ITreeSelection)fViewer.getSelection()) );
}
@@ -306,7 +306,7 @@ abstract public class StateTests extends TestCase implements ITestModelUpdatesLi
while (!fListener.isFinished()) if (!fDisplay.readAndDispatch ()) Thread.sleep(0);
model.validateData(fViewer, TreePath.EMPTY, true);
- expandAlternateElements(model, true);
+ expandAlternateElements(fListener, model, true);
// Set a selection in view
TreeSelection originalSelection = new TreeSelection(model.findElement("5.1"));
@@ -326,15 +326,15 @@ abstract public class StateTests extends TestCase implements ITestModelUpdatesLi
// Validate data
model.validateData(fViewer, TreePath.EMPTY, true);
- Assert.assertTrue(getCTargetViewer().getExpandedState(model.findElement("1")) == true);
- Assert.assertTrue(getCTargetViewer().getExpandedState(model.findElement("1.1")) == true);
- Assert.assertTrue(getCTargetViewer().getExpandedState(model.findElement("2")) == false);
- Assert.assertTrue(getCTargetViewer().getExpandedState(model.findElement("3")) == true);
- Assert.assertTrue(getCTargetViewer().getExpandedState(model.findElement("3.1")) == true);
- Assert.assertTrue(getCTargetViewer().getExpandedState(model.findElement("4")) == false);
- Assert.assertTrue(getCTargetViewer().getExpandedState(model.findElement("5")) == true);
- Assert.assertTrue(getCTargetViewer().getExpandedState(model.findElement("5.1")) == true);
- Assert.assertTrue(getCTargetViewer().getExpandedState(model.findElement("6")) == false);
+ Assert.assertTrue(getInternalViewer().getExpandedState(model.findElement("1")) == true);
+ Assert.assertTrue(getInternalViewer().getExpandedState(model.findElement("1.1")) == true);
+ Assert.assertTrue(getInternalViewer().getExpandedState(model.findElement("2")) == false);
+ Assert.assertTrue(getInternalViewer().getExpandedState(model.findElement("3")) == true);
+ Assert.assertTrue(getInternalViewer().getExpandedState(model.findElement("3.1")) == true);
+ Assert.assertTrue(getInternalViewer().getExpandedState(model.findElement("4")) == false);
+ Assert.assertTrue(getInternalViewer().getExpandedState(model.findElement("5")) == true);
+ Assert.assertTrue(getInternalViewer().getExpandedState(model.findElement("5.1")) == true);
+ Assert.assertTrue(getInternalViewer().getExpandedState(model.findElement("6")) == false);
Assert.assertTrue( areTreeSelectionsEqual(originalSelection, (ITreeSelection)fViewer.getSelection()) );
}
@@ -352,7 +352,7 @@ abstract public class StateTests extends TestCase implements ITestModelUpdatesLi
while (!fListener.isFinished()) if (!fDisplay.readAndDispatch ()) Thread.sleep(0);
model.validateData(fViewer, TreePath.EMPTY, true);
- expandAlternateElements(model, true);
+ expandAlternateElements(fListener, model, true);
// Set a selection in view
// Set a selection in view
@@ -366,7 +366,7 @@ abstract public class StateTests extends TestCase implements ITestModelUpdatesLi
// Note: Re-expanding nodes causes redundant updates.
fListener.reset(false, false);
- fListener.addUpdates(getCTargetViewer(), TreePath.EMPTY, model.getRootElement(), -1, ALL_UPDATES_COMPLETE);
+ fListener.addUpdates(getInternalViewer(), TreePath.EMPTY, model.getRootElement(), -1, ALL_UPDATES_COMPLETE);
// Create the delta which has nodes with CONTENT flag set at multiple levels.
ModelDelta rootDelta = new ModelDelta(model.getRootElement(), IModelDelta.CONTENT);
@@ -380,14 +380,18 @@ abstract public class StateTests extends TestCase implements ITestModelUpdatesLi
// Validate data
model.validateData(fViewer, TreePath.EMPTY, true);
- Assert.assertTrue(getCTargetViewer().getExpandedState(model.findElement("2")) == false);
- Assert.assertTrue(getCTargetViewer().getExpandedState(model.findElement("3")) == true);
- Assert.assertTrue(getCTargetViewer().getExpandedState(model.findElement("3.1")) == true);
- Assert.assertTrue(getCTargetViewer().getExpandedState(model.findElement("4")) == false);
- Assert.assertTrue(getCTargetViewer().getExpandedState(model.findElement("5")) == true);
- Assert.assertTrue(getCTargetViewer().getExpandedState(model.findElement("5.1")) == true);
- Assert.assertTrue(getCTargetViewer().getExpandedState(model.findElement("6")) == false);
+ Assert.assertTrue(getInternalViewer().getExpandedState(model.findElement("2")) == false);
+ Assert.assertTrue(getInternalViewer().getExpandedState(model.findElement("3")) == true);
+ Assert.assertTrue(getInternalViewer().getExpandedState(model.findElement("3.1")) == true);
+ Assert.assertTrue(getInternalViewer().getExpandedState(model.findElement("4")) == false);
+ Assert.assertTrue(getInternalViewer().getExpandedState(model.findElement("5")) == true);
+ Assert.assertTrue(getInternalViewer().getExpandedState(model.findElement("5.1")) == true);
+ Assert.assertTrue(getInternalViewer().getExpandedState(model.findElement("6")) == false);
Assert.assertTrue( areTreeSelectionsEqual(originalSelection, (ITreeSelection)fViewer.getSelection()) );
+
+ // Note: in past it was observed sub-optimal coalescing in this test due
+ // to scattered update requests from viewer.
+ Assert.assertTrue( fListener.checkCoalesced(TreePath.EMPTY, 0, 6) );
}
@@ -424,7 +428,7 @@ abstract public class StateTests extends TestCase implements ITestModelUpdatesLi
// Note: Re-expanding nodes causes redundant updates.
fListener.reset(false, false);
- fListener.addUpdates(getCTargetViewer(), elementPath, model.getElement(elementPath), -1, ALL_UPDATES_COMPLETE);
+ fListener.addUpdates(getInternalViewer(), elementPath, model.getElement(elementPath), -1, ALL_UPDATES_COMPLETE);
// Post the sub-tree update
model.postDelta(rootDelta);
@@ -433,16 +437,16 @@ abstract public class StateTests extends TestCase implements ITestModelUpdatesLi
// Validate data
model.validateData(fViewer, TreePath.EMPTY, true);
- Assert.assertTrue(getCTargetViewer().getExpandedState(model.findElement("3")) == true);
+ Assert.assertTrue(getInternalViewer().getExpandedState(model.findElement("3")) == true);
// On windows, getExpandedState() may return true for an element with no children:
// Assert.assertTrue(getCTargetViewer().getExpandedState(model.findElement("3.0 - new")) == false);
- Assert.assertTrue(getCTargetViewer().getExpandedState(model.findElement("3.1")) == true);
- Assert.assertTrue(getCTargetViewer().getExpandedState(model.findElement("3.2")) == true);
- Assert.assertTrue(getCTargetViewer().getExpandedState(model.findElement("3.3")) == true);
+ Assert.assertTrue(getInternalViewer().getExpandedState(model.findElement("3.1")) == true);
+ Assert.assertTrue(getInternalViewer().getExpandedState(model.findElement("3.2")) == true);
+ Assert.assertTrue(getInternalViewer().getExpandedState(model.findElement("3.3")) == true);
Assert.assertTrue( areTreeSelectionsEqual(originalSelection, (ITreeSelection)fViewer.getSelection()) );
}
- public void _X_testPreserveExpandedOnContentStress() throws InterruptedException {
+ public void testPreserveExpandedOnContentStress() throws InterruptedException {
//TreeModelViewerAutopopulateAgent autopopulateAgent = new TreeModelViewerAutopopulateAgent(fViewer);
TestModel model = alternatingSubsreesModel(6);
@@ -456,7 +460,7 @@ abstract public class StateTests extends TestCase implements ITestModelUpdatesLi
while (!fListener.isFinished()) if (!fDisplay.readAndDispatch ()) Thread.sleep(0);
model.validateData(fViewer, TreePath.EMPTY, true);
- expandAlternateElements(model, true);
+ expandAlternateElements(fListener, model, true);
// Set a selection in view
// TreeSelection originalSelection = new TreeSelection(
@@ -473,20 +477,20 @@ abstract public class StateTests extends TestCase implements ITestModelUpdatesLi
// Note: Re-expanding nodes causes redundant updates.
fListener.reset(false, false);
- fListener.addUpdates(getCTargetViewer(), TreePath.EMPTY, model.getRootElement(), -1, ALL_UPDATES_COMPLETE);
+ fListener.addUpdates(getInternalViewer(), TreePath.EMPTY, model.getRootElement(), -1, ALL_UPDATES_COMPLETE);
model.postDelta(new ModelDelta(model.getRootElement(), IModelDelta.CONTENT));
while (!fListener.isFinished(ALL_UPDATES_COMPLETE | STATE_RESTORE_COMPLETE))
if (!fDisplay.readAndDispatch ()) Thread.sleep(0);
// Validate data
model.validateData(fViewer, TreePath.EMPTY, true);
- Assert.assertTrue(getCTargetViewer().getExpandedState(model.findElement("2")) == false);
- Assert.assertTrue(getCTargetViewer().getExpandedState(model.findElement("3")) == true);
- Assert.assertTrue(getCTargetViewer().getExpandedState(model.findElement("3.1")) == true);
- Assert.assertTrue(getCTargetViewer().getExpandedState(model.findElement("4")) == false);
- Assert.assertTrue(getCTargetViewer().getExpandedState(model.findElement("5")) == true);
- Assert.assertTrue(getCTargetViewer().getExpandedState(model.findElement("5.1")) == true);
- Assert.assertTrue(getCTargetViewer().getExpandedState(model.findElement("6")) == false);
+ Assert.assertTrue(getInternalViewer().getExpandedState(model.findElement("2")) == false);
+ Assert.assertTrue(getInternalViewer().getExpandedState(model.findElement("3")) == true);
+ Assert.assertTrue(getInternalViewer().getExpandedState(model.findElement("3.1")) == true);
+ Assert.assertTrue(getInternalViewer().getExpandedState(model.findElement("4")) == false);
+ Assert.assertTrue(getInternalViewer().getExpandedState(model.findElement("5")) == true);
+ Assert.assertTrue(getInternalViewer().getExpandedState(model.findElement("5.1")) == true);
+ Assert.assertTrue(getInternalViewer().getExpandedState(model.findElement("6")) == false);
Assert.assertTrue( areTreeSelectionsEqual(originalSelection, (ITreeSelection)fViewer.getSelection()) );
// Update the model again
@@ -494,25 +498,25 @@ abstract public class StateTests extends TestCase implements ITestModelUpdatesLi
// Note: Re-expanding nodes causes redundant updates.
fListener.reset(false, false);
- fListener.addUpdates(getCTargetViewer(), TreePath.EMPTY, model.getRootElement(), -1, ALL_UPDATES_COMPLETE);
+ fListener.addUpdates(getInternalViewer(), TreePath.EMPTY, model.getRootElement(), -1, ALL_UPDATES_COMPLETE);
model.postDelta(new ModelDelta(model.getRootElement(), IModelDelta.CONTENT));
while (!fListener.isFinished(ALL_UPDATES_COMPLETE | STATE_RESTORE_COMPLETE))
if (!fDisplay.readAndDispatch ()) Thread.sleep(0);
// Validate data
model.validateData(fViewer, TreePath.EMPTY, true);
- Assert.assertTrue(getCTargetViewer().getExpandedState(model.findElement("2")) == false);
- Assert.assertTrue(getCTargetViewer().getExpandedState(model.findElement("3")) == true);
- Assert.assertTrue(getCTargetViewer().getExpandedState(model.findElement("3.1")) == true);
- Assert.assertTrue(getCTargetViewer().getExpandedState(model.findElement("4")) == false);
- Assert.assertTrue(getCTargetViewer().getExpandedState(model.findElement("5")) == true);
- Assert.assertTrue(getCTargetViewer().getExpandedState(model.findElement("5.1")) == true);
- Assert.assertTrue(getCTargetViewer().getExpandedState(model.findElement("6")) == false);
+ Assert.assertTrue(getInternalViewer().getExpandedState(model.findElement("2")) == false);
+ Assert.assertTrue(getInternalViewer().getExpandedState(model.findElement("3")) == true);
+ Assert.assertTrue(getInternalViewer().getExpandedState(model.findElement("3.1")) == true);
+ Assert.assertTrue(getInternalViewer().getExpandedState(model.findElement("4")) == false);
+ Assert.assertTrue(getInternalViewer().getExpandedState(model.findElement("5")) == true);
+ Assert.assertTrue(getInternalViewer().getExpandedState(model.findElement("5.1")) == true);
+ Assert.assertTrue(getInternalViewer().getExpandedState(model.findElement("6")) == false);
Assert.assertTrue( areTreeSelectionsEqual(originalSelection, (ITreeSelection)fViewer.getSelection()) );
}
}
- public void _X_testPreserveLargeModelOnContent() throws InterruptedException {
+ public void testPreserveLargeModelOnContent() throws InterruptedException {
//TreeModelViewerAutopopulateAgent autopopulateAgent = new TreeModelViewerAutopopulateAgent(fViewer);
TestModel model = alternatingSubsreesModel(100);
@@ -523,10 +527,10 @@ abstract public class StateTests extends TestCase implements ITestModelUpdatesLi
// Set the input into the view and update the view.
fViewer.setInput(model.getRootElement());
- while (!fListener.isFinished(CONTENT_UPDATES_COMPLETE)) if (!fDisplay.readAndDispatch ()) Thread.sleep(0);
+ while (!fListener.isFinished(CONTENT_SEQUENCE_COMPLETE)) if (!fDisplay.readAndDispatch ()) Thread.sleep(0);
// model.validateData(fViewer, TreePath.EMPTY, true);
- expandAlternateElements(model, false);
+ expandAlternateElements(fListener, model, false);
// Set a selection in view
TreeSelection originalSelection = new TreeSelection(model.findElement("5.1.1"));
@@ -539,16 +543,16 @@ abstract public class StateTests extends TestCase implements ITestModelUpdatesLi
// Note: Re-expanding nodes causes redundant updates.
fListener.reset(false, false);
model.postDelta(new ModelDelta(model.getRootElement(), IModelDelta.CONTENT));
- while (!fListener.isFinished(CONTENT_UPDATES_COMPLETE)) if (!fDisplay.readAndDispatch ()) Thread.sleep(0);
+ while (!fListener.isFinished(CONTENT_SEQUENCE_COMPLETE)) if (!fDisplay.readAndDispatch ()) Thread.sleep(0);
// Validate data
- Assert.assertTrue(getCTargetViewer().getExpandedState(model.findElement("2")) == false);
- Assert.assertTrue(getCTargetViewer().getExpandedState(model.findElement("3")) == true);
- Assert.assertTrue(getCTargetViewer().getExpandedState(model.findElement("3.1")) == true);
- Assert.assertTrue(getCTargetViewer().getExpandedState(model.findElement("4")) == false);
- Assert.assertTrue(getCTargetViewer().getExpandedState(model.findElement("5")) == true);
- Assert.assertTrue(getCTargetViewer().getExpandedState(model.findElement("5.1")) == true);
- Assert.assertTrue(getCTargetViewer().getExpandedState(model.findElement("6")) == false);
+ Assert.assertTrue(getInternalViewer().getExpandedState(model.findElement("2")) == false);
+ Assert.assertTrue(getInternalViewer().getExpandedState(model.findElement("3")) == true);
+ Assert.assertTrue(getInternalViewer().getExpandedState(model.findElement("3.1")) == true);
+ Assert.assertTrue(getInternalViewer().getExpandedState(model.findElement("4")) == false);
+ Assert.assertTrue(getInternalViewer().getExpandedState(model.findElement("5")) == true);
+ Assert.assertTrue(getInternalViewer().getExpandedState(model.findElement("5.1")) == true);
+ Assert.assertTrue(getInternalViewer().getExpandedState(model.findElement("6")) == false);
Assert.assertTrue( areTreeSelectionsEqual(originalSelection, (ITreeSelection)fViewer.getSelection()) );
// Update the model again
@@ -557,16 +561,16 @@ abstract public class StateTests extends TestCase implements ITestModelUpdatesLi
// Note: Re-expanding nodes causes redundant updates.
fListener.reset(false, false);
model.postDelta(new ModelDelta(model.getRootElement(), IModelDelta.CONTENT));
- while (!fListener.isFinished(CONTENT_UPDATES_COMPLETE)) if (!fDisplay.readAndDispatch ()) Thread.sleep(0);
+ while (!fListener.isFinished(CONTENT_SEQUENCE_COMPLETE)) if (!fDisplay.readAndDispatch ()) Thread.sleep(0);
// Validate data
- Assert.assertTrue(getCTargetViewer().getExpandedState(model.findElement("2")) == false);
- Assert.assertTrue(getCTargetViewer().getExpandedState(model.findElement("3")) == true);
- Assert.assertTrue(getCTargetViewer().getExpandedState(model.findElement("3.1")) == true);
- Assert.assertTrue(getCTargetViewer().getExpandedState(model.findElement("4")) == false);
- Assert.assertTrue(getCTargetViewer().getExpandedState(model.findElement("5")) == true);
- Assert.assertTrue(getCTargetViewer().getExpandedState(model.findElement("5.1")) == true);
- Assert.assertTrue(getCTargetViewer().getExpandedState(model.findElement("6")) == false);
+ Assert.assertTrue(getInternalViewer().getExpandedState(model.findElement("2")) == false);
+ Assert.assertTrue(getInternalViewer().getExpandedState(model.findElement("3")) == true);
+ Assert.assertTrue(getInternalViewer().getExpandedState(model.findElement("3.1")) == true);
+ Assert.assertTrue(getInternalViewer().getExpandedState(model.findElement("4")) == false);
+ Assert.assertTrue(getInternalViewer().getExpandedState(model.findElement("5")) == true);
+ Assert.assertTrue(getInternalViewer().getExpandedState(model.findElement("5.1")) == true);
+ Assert.assertTrue(getInternalViewer().getExpandedState(model.findElement("6")) == false);
Assert.assertTrue( areTreeSelectionsEqual(originalSelection, (ITreeSelection)fViewer.getSelection()) );
}
@@ -675,7 +679,7 @@ abstract public class StateTests extends TestCase implements ITestModelUpdatesLi
if (!fDisplay.readAndDispatch ()) Thread.sleep(0);
// Check to make sure that the state restore didn't change the selection.
- Assert.assertTrue(getCTargetViewer().getExpandedState(model.findElement("3.1")) == false);
+ Assert.assertTrue(getInternalViewer().getExpandedState(model.findElement("3.1")) == false);
}
public void testPreserveExpandDeltaAfterContent() throws InterruptedException {
@@ -716,7 +720,7 @@ abstract public class StateTests extends TestCase implements ITestModelUpdatesLi
if (!fDisplay.readAndDispatch ()) Thread.sleep(0);
// Check to make sure that the state restore didn't change the selection.
- Assert.assertTrue(getCTargetViewer().getExpandedState(model.findElement("3.1")) == true);
+ Assert.assertTrue(getInternalViewer().getExpandedState(model.findElement("3.1")) == true);
}
@@ -735,7 +739,7 @@ abstract public class StateTests extends TestCase implements ITestModelUpdatesLi
model.validateData(fViewer, TreePath.EMPTY, true);
// Expand some, but not all elements
- expandAlternateElements(model, true);
+ expandAlternateElements(fListener, model, true);
// Set a selection in view
fViewer.setSelection(new TreeSelection(new TreePath[] { model.findElement("5.1"), model.findElement("5.1.1"), model.findElement("6.1.1") } ));
@@ -746,7 +750,7 @@ abstract public class StateTests extends TestCase implements ITestModelUpdatesLi
// Set the viewer input to null. This will trigger the view to save the viewer state.
fListener.reset(false, false);
- fListener.addStateUpdates(getCTargetViewer(), originalState, IModelDelta.EXPAND | IModelDelta.SELECT | IModelDelta.REVEAL);
+ fListener.addStateUpdates(getInternalViewer(), originalState, IModelDelta.EXPAND | IModelDelta.SELECT | IModelDelta.REVEAL);
fViewer.setInput(null);
while (!fListener.isFinished(STATE_SAVE_COMPLETE | STATE_UPDATES))
if (!fDisplay.readAndDispatch ()) Thread.sleep(0);
@@ -796,7 +800,7 @@ abstract public class StateTests extends TestCase implements ITestModelUpdatesLi
// Set the viewer input to null. This will trigger the view to save the viewer state.
fListener.reset(true, false);
- fListener.addStateUpdates(getCTargetViewer(), originalState, IModelDelta.EXPAND | IModelDelta.SELECT | IModelDelta.REVEAL);
+ fListener.addStateUpdates(getInternalViewer(), originalState, IModelDelta.EXPAND | IModelDelta.SELECT | IModelDelta.REVEAL);
fViewer.setInput(null);
while (!fListener.isFinished(STATE_SAVE_COMPLETE | STATE_UPDATES))
@@ -819,6 +823,93 @@ abstract public class StateTests extends TestCase implements ITestModelUpdatesLi
}
}
+ public void testSaveAndRestoreInputInstance() throws InterruptedException {
+ //TreeModelViewerAutopopulateAgent autopopulateAgent = new TreeModelViewerAutopopulateAgent(fViewer);
+ TestModel model = alternatingSubsreesModel(6);
+
+ // 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 ()) Thread.sleep(0);
+ model.validateData(fViewer, TreePath.EMPTY, true);
+
+ // Expand some, but not all elements
+ expandAlternateElements(fListener, model, true);
+
+ // Set a selection in view
+ fViewer.setSelection(new TreeSelection(new TreePath[] { model.findElement("5.1"), model.findElement("5.1.1"), model.findElement("6.1.1") } ));
+
+ // Extract the original state from viewer
+ ModelDelta originalState = new ModelDelta(model.getRootElement(), IModelDelta.NO_CHANGE);
+ fViewer.saveElementState(TreePath.EMPTY, originalState, IModelDelta.EXPAND | IModelDelta.SELECT);
+
+ // Do not reset to null, just reset input to the same object.
+
+ // 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);
+ fViewer.setInput(model.getRootElement());
+ while (!fListener.isFinished()) if (!fDisplay.readAndDispatch ()) Thread.sleep(0);
+
+ // Extract the restored state from viewer
+ ModelDelta restoredState = new ModelDelta(model.getRootElement(), IModelDelta.NO_CHANGE);
+ fViewer.saveElementState(TreePath.EMPTY, restoredState, IModelDelta.EXPAND | IModelDelta.SELECT);
+
+ if (!deltaMatches(originalState, restoredState)) {
+ Assert.fail("Expected:\n" + originalState.toString() + "\nGot:\n" + restoredState);
+ }
+ }
+
+ public void testSaveAndRestoreInputInstanceEquals() throws InterruptedException {
+ //TreeModelViewerAutopopulateAgent autopopulateAgent = new TreeModelViewerAutopopulateAgent(fViewer);
+ TestModel model = alternatingSubsreesModel(6);
+
+ // 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 ()) Thread.sleep(0);
+ model.validateData(fViewer, TreePath.EMPTY, true);
+
+ // Expand some, but not all elements
+ expandAlternateElements(fListener, model, true);
+
+ // Set a selection in view
+ fViewer.setSelection(new TreeSelection(new TreePath[] { model.findElement("5.1"), model.findElement("5.1.1"), model.findElement("6.1.1") } ));
+
+ // Extract the original state from viewer
+ ModelDelta originalState = new ModelDelta(model.getRootElement(), IModelDelta.NO_CHANGE);
+ fViewer.saveElementState(TreePath.EMPTY, originalState, IModelDelta.EXPAND | IModelDelta.SELECT);
+
+ // Create a copy of the input object and set it to model.
+ TestElement newRoot = new TestElement(model, model.getRootElement().getID(), model.getRootElement().getChildren());
+ model.setRoot(newRoot);
+
+ // 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);
+
+ fViewer.setInput(model.getRootElement());
+ while (!fListener.isFinished()) if (!fDisplay.readAndDispatch ()) Thread.sleep(0);
+
+ // Extract the restored state from viewer
+ ModelDelta restoredState = new ModelDelta(model.getRootElement(), IModelDelta.NO_CHANGE);
+ fViewer.saveElementState(TreePath.EMPTY, restoredState, IModelDelta.EXPAND | IModelDelta.SELECT);
+
+ if (!deltaMatches(originalState, restoredState)) {
+ Assert.fail("Expected:\n" + originalState.toString() + "\nGot:\n" + restoredState);
+ }
+ }
+
public void testSaveAndRestoreLarge() throws InterruptedException {
//TreeModelViewerAutopopulateAgent autopopulateAgent = new TreeModelViewerAutopopulateAgent(fViewer);
@@ -831,9 +922,9 @@ abstract public class StateTests extends TestCase implements ITestModelUpdatesLi
// Set the input into the view and update the view.
fViewer.setInput(model.getRootElement());
- while (!fListener.isFinished(CONTENT_UPDATES_COMPLETE)) if (!fDisplay.readAndDispatch ()) Thread.sleep(0);
+ while (!fListener.isFinished(CONTENT_SEQUENCE_COMPLETE)) if (!fDisplay.readAndDispatch ()) Thread.sleep(0);
- expandAlternateElements(model, false);
+ expandAlternateElements(fListener, model, false);
// Set a selection in view
TreeSelection originalSelection = new TreeSelection(model.findElement("5.1.1"));
@@ -846,7 +937,7 @@ abstract public class StateTests extends TestCase implements ITestModelUpdatesLi
// Set the viewer input to null. This will trigger the view to save the viewer state.
fListener.reset();
- fListener.addStateUpdates(getCTargetViewer(), originalState, IModelDelta.EXPAND | IModelDelta.SELECT | IModelDelta.REVEAL);
+ fListener.addStateUpdates(getInternalViewer(), originalState, IModelDelta.EXPAND | IModelDelta.SELECT | IModelDelta.REVEAL);
fViewer.setInput(null);
while (!fListener.isFinished(STATE_SAVE_COMPLETE | STATE_UPDATES))
@@ -857,18 +948,18 @@ abstract public class StateTests extends TestCase implements ITestModelUpdatesLi
// Note: disable redundant updates because the reveal delta triggers one.
fListener.reset();
fViewer.setInput(model.getRootElement());
- while (!fListener.isFinished(CONTENT_UPDATES_COMPLETE)) if (!fDisplay.readAndDispatch ()) Thread.sleep(0);
+ while (!fListener.isFinished(CONTENT_SEQUENCE_COMPLETE)) if (!fDisplay.readAndDispatch ()) Thread.sleep(0);
// Validate data (only select visible elements).
- Assert.assertTrue(getCTargetViewer().getExpandedState(model.findElement("1")) == true);
- Assert.assertTrue(getCTargetViewer().getExpandedState(model.findElement("1.1")) == true);
- Assert.assertTrue(getCTargetViewer().getExpandedState(model.findElement("2")) == false);
- Assert.assertTrue(getCTargetViewer().getExpandedState(model.findElement("3")) == true);
- Assert.assertTrue(getCTargetViewer().getExpandedState(model.findElement("3.1")) == true);
- Assert.assertTrue(getCTargetViewer().getExpandedState(model.findElement("4")) == false);
- Assert.assertTrue(getCTargetViewer().getExpandedState(model.findElement("5")) == true);
- Assert.assertTrue(getCTargetViewer().getExpandedState(model.findElement("5.1")) == true);
- Assert.assertTrue(getCTargetViewer().getExpandedState(model.findElement("6")) == false);
+ Assert.assertTrue(getInternalViewer().getExpandedState(model.findElement("1")) == true);
+ Assert.assertTrue(getInternalViewer().getExpandedState(model.findElement("1.1")) == true);
+ Assert.assertTrue(getInternalViewer().getExpandedState(model.findElement("2")) == false);
+ Assert.assertTrue(getInternalViewer().getExpandedState(model.findElement("3")) == true);
+ Assert.assertTrue(getInternalViewer().getExpandedState(model.findElement("3.1")) == true);
+ Assert.assertTrue(getInternalViewer().getExpandedState(model.findElement("4")) == false);
+ Assert.assertTrue(getInternalViewer().getExpandedState(model.findElement("5")) == true);
+ Assert.assertTrue(getInternalViewer().getExpandedState(model.findElement("5.1")) == true);
+ Assert.assertTrue(getInternalViewer().getExpandedState(model.findElement("6")) == false);
Assert.assertTrue( areTreeSelectionsEqual(originalSelection, (ITreeSelection)fViewer.getSelection()) );
}
@@ -888,9 +979,9 @@ abstract public class StateTests extends TestCase implements ITestModelUpdatesLi
// Set the input into the view and update the view.
fViewer.setInput(model.getRootElement());
- while (!fListener.isFinished(CONTENT_UPDATES_COMPLETE)) if (!fDisplay.readAndDispatch ()) Thread.sleep(0);
+ while (!fListener.isFinished(CONTENT_SEQUENCE_COMPLETE)) if (!fDisplay.readAndDispatch ()) Thread.sleep(0);
- expandAlternateElements(model, false);
+ expandAlternateElements(fListener, model, false);
// Set a selection in view
TreeSelection originalSelection = new TreeSelection(model.findElement("5.1.1"));
@@ -903,7 +994,7 @@ abstract public class StateTests extends TestCase implements ITestModelUpdatesLi
// Set the viewer input to null. This will trigger the view to save the viewer state.
fListener.reset();
- fListener.addStateUpdates(getCTargetViewer(), originalState, IModelDelta.EXPAND | IModelDelta.SELECT | IModelDelta.REVEAL);
+ fListener.addStateUpdates(getInternalViewer(), originalState, IModelDelta.EXPAND | IModelDelta.SELECT | IModelDelta.REVEAL);
fViewer.setInput(null);
while (!fListener.isFinished(STATE_SAVE_COMPLETE | STATE_UPDATES))
@@ -922,18 +1013,18 @@ abstract public class StateTests extends TestCase implements ITestModelUpdatesLi
fViewer.setInput(model.getRootElement());
// MONITOR FOR THE STATE RESTORE TO COMPLETE
- while (!fListener.isFinished(CONTENT_UPDATES_COMPLETE| STATE_RESTORE_COMPLETE)) if (!fDisplay.readAndDispatch ()) Thread.sleep(0);
+ while (!fListener.isFinished(CONTENT_SEQUENCE_COMPLETE| STATE_RESTORE_COMPLETE)) if (!fDisplay.readAndDispatch ()) Thread.sleep(0);
// Validate data
- Assert.assertTrue(getCTargetViewer().getExpandedState(model.findElement("1")) == true);
- Assert.assertTrue(getCTargetViewer().getExpandedState(model.findElement("1.1")) == true);
- Assert.assertTrue(getCTargetViewer().getExpandedState(model.findElement("2")) == false);
- Assert.assertTrue(getCTargetViewer().getExpandedState(model.findElement("3")) == true);
- Assert.assertTrue(getCTargetViewer().getExpandedState(model.findElement("3.1")) == true);
- Assert.assertTrue(getCTargetViewer().getExpandedState(model.findElement("4")) == false);
- Assert.assertTrue(getCTargetViewer().getExpandedState(model.findElement("5")) == true);
- Assert.assertTrue(getCTargetViewer().getExpandedState(model.findElement("5.1")) == true);
- Assert.assertTrue(getCTargetViewer().getExpandedState(model.findElement("6")) == false);
+ Assert.assertTrue(getInternalViewer().getExpandedState(model.findElement("1")) == true);
+ Assert.assertTrue(getInternalViewer().getExpandedState(model.findElement("1.1")) == true);
+ Assert.assertTrue(getInternalViewer().getExpandedState(model.findElement("2")) == false);
+ Assert.assertTrue(getInternalViewer().getExpandedState(model.findElement("3")) == true);
+ Assert.assertTrue(getInternalViewer().getExpandedState(model.findElement("3.1")) == true);
+ Assert.assertTrue(getInternalViewer().getExpandedState(model.findElement("4")) == false);
+ Assert.assertTrue(getInternalViewer().getExpandedState(model.findElement("5")) == true);
+ Assert.assertTrue(getInternalViewer().getExpandedState(model.findElement("5.1")) == true);
+ Assert.assertTrue(getInternalViewer().getExpandedState(model.findElement("6")) == false);
Assert.assertTrue( areTreeSelectionsEqual(originalSelection, (ITreeSelection)fViewer.getSelection()) );
}
@@ -998,9 +1089,39 @@ abstract public class StateTests extends TestCase implements ITestModelUpdatesLi
if (!fDisplay.readAndDispatch ()) Thread.sleep(0);
// Check to make sure that the state restore didn't change the selection.
- Assert.assertTrue(getCTargetViewer().getExpandedState(model.findElement("2")) == false);
- Assert.assertTrue(getCTargetViewer().getExpandedState(model.findElement("3")) == false);
+ Assert.assertTrue(getInternalViewer().getExpandedState(model.findElement("2")) == false);
+ Assert.assertTrue(getInternalViewer().getExpandedState(model.findElement("3")) == false);
Assert.assertEquals(new TreeSelection(model.findElement("1")), fViewer.getSelection());
}
+ /**
+ * Test for bug 359859.<br>
+ * This test verifies that RESTORE state is handled after SAVE previous state was completed
+ */
+ public void testSaveRestoreOrder() throws InterruptedException {
+ //TreeModelViewerAutopopulateAgent autopopulateAgent = new TreeModelViewerAutopopulateAgent(fViewer);
+ TestModel model = TestModel.simpleMultiLevel();
+
+ // Expand all
+ fViewer.setAutoExpandLevel(-1);
+
+ // Create the listener.
+ fListener.reset(TreePath.EMPTY, model.getRootElement(), -1, false, false);
+
+ // Set the input into the view and update the view.
+ fViewer.setInput(model.getRootElement());
+ while (!fListener.isFinished()) if (!fDisplay.readAndDispatch ()) Thread.sleep(0);
+ model.validateData(fViewer, TreePath.EMPTY, true);
+
+ // a new similar model
+ TestModel copyModel = TestModel.simpleMultiLevel();
+
+ // Trigger save - restore sequence.
+ fListener.reset();
+ fListener.expectRestoreAfterSaveComplete();
+ fViewer.setInput(copyModel.getRootElement());
+ while (!fListener.isFinished(STATE_RESTORE_STARTED)) Thread.sleep(0);
+ Assert.assertTrue("RESTORE started before SAVE to complete", fListener.isFinished(STATE_SAVE_COMPLETE));
+ }
+
}
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 6647bd226..e497d5837 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
@@ -10,14 +10,15 @@
*******************************************************************************/
package org.eclipe.debug.tests.viewer.model;
+import java.util.ArrayList;
import java.util.Arrays;
+import java.util.LinkedList;
+import java.util.List;
import junit.framework.Assert;
import org.eclipse.core.runtime.PlatformObject;
-import org.eclipse.debug.internal.ui.viewers.model.ITreeModelCheckProviderTarget;
-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.IInternalTreeModelViewer;
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;
@@ -34,10 +35,13 @@ import org.eclipse.debug.internal.ui.viewers.model.provisional.IModelProxyFactor
import org.eclipse.debug.internal.ui.viewers.model.provisional.IModelSelectionPolicy;
import org.eclipse.debug.internal.ui.viewers.model.provisional.IModelSelectionPolicyFactory;
import org.eclipse.debug.internal.ui.viewers.model.provisional.IPresentationContext;
+import org.eclipse.debug.internal.ui.viewers.model.provisional.ITreeModelViewer;
+import org.eclipse.debug.internal.ui.viewers.model.provisional.IViewerUpdate;
import org.eclipse.debug.internal.ui.viewers.model.provisional.ModelDelta;
import org.eclipse.debug.internal.ui.viewers.provisional.AbstractModelProxy;
import org.eclipse.jface.viewers.TreePath;
import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.jface.viewers.ViewerFilter;
/**
* Test model for the use in unit tests. This test model contains a set of
@@ -158,7 +162,8 @@ public class TestModel implements IElementContentProvider, IElementLabelProvider
private TreePath fRootPath = TreePath.EMPTY;
private ModelProxy fModelProxy;
private IModelSelectionPolicy fModelSelectionPolicy;
-
+ private boolean fQueueingUpdates = false;
+ private List fQueuedUpdates = new LinkedList();
/**
* Constructor private. Use static factory methods instead.
@@ -207,46 +212,109 @@ public class TestModel implements IElementContentProvider, IElementLabelProvider
return depth;
}
+ public void setQeueueingUpdate(boolean queueingUpdates) {
+ fQueueingUpdates = queueingUpdates;
+ if (!fQueueingUpdates) {
+ processQueuedUpdates();
+ }
+ }
+
+ public List getQueuedUpdates() {
+ return fQueuedUpdates;
+ }
+
+ public void processQueuedUpdates() {
+ List updates = new ArrayList(fQueuedUpdates);
+ fQueuedUpdates.clear();
+ for (int i = 0; i < updates.size(); i++) {
+ processUpdate((IViewerUpdate)updates.get(i));
+ }
+ }
+
+ public void processUpdate(IViewerUpdate update) {
+ if (update instanceof IHasChildrenUpdate) {
+ doUpdate((IHasChildrenUpdate)update);
+ } else if (update instanceof IChildrenCountUpdate) {
+ doUpdate((IChildrenCountUpdate)update);
+ } else if (update instanceof IChildrenUpdate) {
+ doUpdate((IChildrenUpdate)update);
+ } else if (update instanceof ILabelUpdate) {
+ doUpdate((ILabelUpdate)update);
+ }
+ }
+
public void update(IHasChildrenUpdate[] updates) {
- for (int i = 0; i < updates.length; i++) {
- TestElement element = (TestElement)updates[i].getElement();
- updates[i].setHasChilren(element.getChildren().length > 0);
- updates[i].done();
+ if (fQueueingUpdates) {
+ fQueuedUpdates.addAll(Arrays.asList(updates));
+ } else {
+ for (int i = 0; i < updates.length; i++) {
+ doUpdate(updates[i]);
+ }
}
}
+
+ private void doUpdate(IHasChildrenUpdate update) {
+ TestElement element = (TestElement)update.getElement();
+ update.setHasChilren(element.getChildren().length > 0);
+ update.done();
+ }
public void update(IChildrenCountUpdate[] updates) {
- for (int i = 0; i < updates.length; i++) {
- TestElement element = (TestElement)updates[i].getElement();
- updates[i].setChildCount(element.getChildren().length);
- updates[i].done();
+ if (fQueueingUpdates) {
+ fQueuedUpdates.addAll(Arrays.asList(updates));
+ } else {
+ for (int i = 0; i < updates.length; i++) {
+ doUpdate(updates[i]);
+ }
}
}
+
+ private void doUpdate(IChildrenCountUpdate update) {
+ TestElement element = (TestElement)update.getElement();
+ update.setChildCount(element.getChildren().length);
+ update.done();
+ }
public void update(IChildrenUpdate[] updates) {
- for (int i = 0; i < updates.length; i++) {
- TestElement element = (TestElement)updates[i].getElement();
- int endOffset = updates[i].getOffset() + updates[i].getLength();
- for (int j = updates[i].getOffset(); j < endOffset; j++) {
- if (j < element.getChildren().length) {
- updates[i].setChild(element.getChildren()[j], j);
- }
+ if (fQueueingUpdates) {
+ fQueuedUpdates.addAll(Arrays.asList(updates));
+ } else {
+ for (int i = 0; i < updates.length; i++) {
+ doUpdate(updates[i]);
}
- updates[i].done();
}
}
+
+ private void doUpdate(IChildrenUpdate update) {
+ TestElement element = (TestElement)update.getElement();
+ int endOffset = update.getOffset() + update.getLength();
+ for (int j = update.getOffset(); j < endOffset; j++) {
+ if (j < element.getChildren().length) {
+ update.setChild(element.getChildren()[j], j);
+ }
+ }
+ update.done();
+ }
public void update(ILabelUpdate[] updates) {
- for (int i = 0; i < updates.length; i++) {
- TestElement element = (TestElement)updates[i].getElement();
- updates[i].setLabel(element.getLabel(), 0);
- if (updates[i] instanceof ICheckUpdate &&
- Boolean.TRUE.equals(updates[i].getPresentationContext().getProperty(ICheckUpdate.PROP_CHECK)))
- {
- ((ICheckUpdate)updates[i]).setChecked(element.getChecked(), element.getGrayed());
+ if (fQueueingUpdates) {
+ fQueuedUpdates.addAll(Arrays.asList(updates));
+ } else {
+ for (int i = 0; i < updates.length; i++) {
+ doUpdate(updates[i]);
}
- updates[i].done();
- }
+ }
+ }
+
+ private void doUpdate(ILabelUpdate update) {
+ TestElement element = (TestElement)update.getElement();
+ update.setLabel(element.getLabel(), 0);
+ if (update instanceof ICheckUpdate &&
+ Boolean.TRUE.equals(update.getPresentationContext().getProperty(ICheckUpdate.PROP_CHECK)))
+ {
+ ((ICheckUpdate)update).setChecked(element.getChecked(), element.getGrayed());
+ }
+ update.done();
}
public final static String ELEMENT_MEMENTO_ID = "id";
@@ -326,24 +394,32 @@ public class TestModel implements IElementContentProvider, IElementLabelProvider
public void validateData(ITreeModelViewer viewer, TreePath path) {
validateData(viewer, path, false);
}
-
+
public void validateData(ITreeModelViewer _viewer, TreePath path, boolean expandedElementsOnly) {
- ITreeModelContentProviderTarget viewer = (ITreeModelContentProviderTarget)_viewer;
+ validateData(_viewer, path, expandedElementsOnly, TestModelUpdatesListener.EMPTY_FILTER_ARRAY);
+ }
+
+ public void validateData(ITreeModelViewer _viewer, TreePath path, boolean expandedElementsOnly, ViewerFilter[] filters) {
+ IInternalTreeModelViewer viewer = (IInternalTreeModelViewer)_viewer;
TestElement element = getElement(path);
if ( Boolean.TRUE.equals(_viewer.getPresentationContext().getProperty(ICheckUpdate.PROP_CHECK)) ) {
- ITreeModelCheckProviderTarget checkTarget = (ITreeModelCheckProviderTarget)_viewer;
- Assert.assertEquals(element.getChecked(), checkTarget.getElementChecked(path));
- Assert.assertEquals(element.getGrayed(), checkTarget.getElementGrayed(path));
+ Assert.assertEquals(element.getChecked(), viewer.getElementChecked(path));
+ Assert.assertEquals(element.getGrayed(), viewer.getElementGrayed(path));
}
if (!expandedElementsOnly || path.getSegmentCount() == 0 || viewer.getExpandedState(path) ) {
TestElement[] children = element.getChildren();
- Assert.assertEquals(children.length, viewer.getChildCount(path));
+ int viewerIndex = 0;
for (int i = 0; i < children.length; i++) {
- Assert.assertEquals(children[i], viewer.getChildElement(path, i));
- validateData(viewer, path.createChildPath(children[i]), expandedElementsOnly);
+ if (TestModelUpdatesListener.isFiltered(children[i], filters)) {
+ continue;
+ }
+ Assert.assertEquals(children[i], viewer.getChildElement(path, viewerIndex));
+ validateData(viewer, path.createChildPath(children[i]), expandedElementsOnly, filters);
+ viewerIndex++;
}
+ Assert.assertEquals(viewerIndex, viewer.getChildCount(path));
} else if (!viewer.getExpandedState(path)) {
// If element not expanded, verify the plus sign.
Assert.assertEquals(viewer.getHasChildren(path), element.getChildren().length > 0);
@@ -590,17 +666,28 @@ public class TestModel implements IElementContentProvider, IElementLabelProvider
public static TestModel simpleSingleLevel() {
TestModel model = new TestModel();
- model.setRoot( new TestElement(model, "root", new TestElement[] {
- new TestElement(model, "1", true, true, new TestElement[0]),
- new TestElement(model, "2", true, false, new TestElement[0]),
- new TestElement(model, "3", false, true, new TestElement[0]),
- new TestElement(model, "4", false, false, new TestElement[0]),
- new TestElement(model, "5", new TestElement[0]),
- new TestElement(model, "6", new TestElement[0])
- }) );
+ model.setRoot( new TestElement(model, "root", makeSingleLevelModelElements(model, 6, "")));
return model;
}
+
+ public static TestElement[] makeSingleLevelModelElements(TestModel model, int length, String prefix) {
+ TestElement[] elements = new TestElement[length];
+ for (int i = 1; i <= length; i++) {
+ String name = prefix + i;
+ elements[i - 1] = new TestElement(model, name, new TestElement[0]);
+ }
+ return elements;
+ }
+ public static TestElement[] makeMultiLevelElements(TestModel model, int depth, String prefix) {
+ TestElement[] elements = new TestElement[depth];
+ for (int i = 0; i < depth; i++) {
+ String name = prefix + i;
+ elements[i] = new TestElement(model, name, makeMultiLevelElements(model, i, name + "."));
+ }
+ return elements;
+ }
+
public static TestModel simpleMultiLevel() {
TestModel model = new TestModel();
model.setRoot( new TestElement(model, "root", new TestElement[] {
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 31a3523f2..8b540b121 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
@@ -27,9 +27,8 @@ import org.eclipse.core.runtime.jobs.IJobChangeEvent;
import org.eclipse.core.runtime.jobs.IJobChangeListener;
import org.eclipse.core.runtime.jobs.Job;
import org.eclipse.debug.internal.ui.viewers.model.ElementCompareRequest;
+import org.eclipse.debug.internal.ui.viewers.model.IInternalTreeModelViewer;
import org.eclipse.debug.internal.ui.viewers.model.ILabelUpdateListener;
-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.IChildrenCountUpdate;
import org.eclipse.debug.internal.ui.viewers.model.provisional.IChildrenUpdate;
import org.eclipse.debug.internal.ui.viewers.model.provisional.IHasChildrenUpdate;
@@ -38,14 +37,18 @@ import org.eclipse.debug.internal.ui.viewers.model.provisional.IModelChangedList
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.ITreeModelViewer;
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;
+import org.eclipse.jface.viewers.ViewerFilter;
public class TestModelUpdatesListener
implements IViewerUpdateListener, ILabelUpdateListener, IModelChangedListener, ITestModelUpdatesListenerConstants,
IStateUpdateListener, IJobChangeListener
{
+ public static final ViewerFilter[] EMPTY_FILTER_ARRAY = new ViewerFilter[0];
+
private final ITreeModelViewer fViewer;
private IStatus fJobError;
@@ -60,9 +63,7 @@ public class TestModelUpdatesListener
private Set fRedundantLabelUpdateExceptions = new HashSet();
private boolean fFailOnMultipleModelUpdateSequences;
- private boolean fMultipleModelUpdateSequencesObserved;
private boolean fFailOnMultipleLabelUpdateSequences;
- private boolean fMultipleLabelUpdateSequencesObserved;
private Set fHasChildrenUpdatesScheduled = new HashSet();
private Set fHasChildrenUpdatesRunning = new HashSet();
@@ -78,10 +79,14 @@ public class TestModelUpdatesListener
private Set fLabelUpdatesCompleted = new HashSet();
private Set fProxyModels = new HashSet();
private Set fStateUpdates = new HashSet();
- private boolean fViewerUpdatesStarted;
- private boolean fViewerUpdatesComplete;
- private boolean fLabelUpdatesStarted;
- private boolean fLabelUpdatesComplete;
+ private int fViewerUpdatesStarted = 0;
+ private int fViewerUpdatesComplete = 0;
+ private int fViewerUpdatesStartedAtReset;
+ private int fViewerUpdatesCompleteAtReset;
+ private int fLabelUpdatesStarted = 0;
+ private int fLabelUpdatesComplete = 0;
+ private int fLabelUpdatesStartedAtReset;
+ private int fLabelUpdatesCompleteAtReset;
private boolean fModelChangedComplete;
private boolean fStateSaveStarted;
private boolean fStateSaveComplete;
@@ -91,6 +96,10 @@ public class TestModelUpdatesListener
private int fLabelUpdatesCounter;
private int fTimeoutInterval = 60000;
private long fTimeoutTime;
+
+ private boolean fExpectRestoreAfterSaveComplete;
+
+ private RuntimeException fFailExpectation;
public TestModelUpdatesListener(ITreeModelViewer viewer, boolean failOnRedundantUpdates, boolean failOnMultipleModelUpdateSequences) {
@@ -143,6 +152,10 @@ public class TestModelUpdatesListener
public void setFailOnMultipleLabelUpdateSequences(boolean failOnMultipleLabelUpdateSequences) {
fFailOnMultipleLabelUpdateSequences = failOnMultipleLabelUpdateSequences;
}
+
+ public void expectRestoreAfterSaveComplete() {
+ fExpectRestoreAfterSaveComplete = true;
+ }
/**
* Sets the the maximum amount of time (in milliseconds) that the update listener
@@ -153,8 +166,12 @@ public class TestModelUpdatesListener
}
public void reset(TreePath path, TestElement element, int levels, boolean failOnRedundantUpdates, boolean failOnMultipleUpdateSequences) {
+ reset(path, element, EMPTY_FILTER_ARRAY, levels, failOnRedundantUpdates, failOnMultipleUpdateSequences);
+ }
+
+ public void reset(TreePath path, TestElement element, ViewerFilter[] filters, int levels, boolean failOnRedundantUpdates, boolean failOnMultipleUpdateSequences) {
reset();
- addUpdates(path, element, levels);
+ addUpdates(path, element, filters, levels);
addProxies(element);
setFailOnRedundantUpdates(failOnRedundantUpdates);
setFailOnMultipleModelUpdateSequences(failOnMultipleUpdateSequences);
@@ -170,14 +187,13 @@ public class TestModelUpdatesListener
public void reset() {
fJobError = null;
+ fFailExpectation = null;
fRedundantUpdates.clear();
fRedundantLabelUpdates.clear();
fRedundantHasChildrenUpdateExceptions.clear();
fRedundantChildCountUpdateExceptions.clear();
fRedundantChildrenUpdateExceptions.clear();
fRedundantLabelUpdateExceptions.clear();
- fMultipleLabelUpdateSequencesObserved = false;
- fMultipleModelUpdateSequencesObserved = false;
fHasChildrenUpdatesScheduled.clear();
fHasChildrenUpdatesRunning.clear();
fHasChildrenUpdatesCompleted.clear();
@@ -191,15 +207,16 @@ public class TestModelUpdatesListener
fLabelUpdatesRunning.clear();
fLabelUpdatesCompleted.clear();
fProxyModels.clear();
- fViewerUpdatesStarted = false;
- fViewerUpdatesComplete = false;
- fLabelUpdatesStarted = false;
- fLabelUpdatesComplete = false;
+ fViewerUpdatesStartedAtReset = fViewerUpdatesStarted;
+ fViewerUpdatesCompleteAtReset = fViewerUpdatesComplete;
+ fLabelUpdatesStartedAtReset = fLabelUpdatesStarted;
+ fLabelUpdatesCompleteAtReset = fLabelUpdatesComplete;
fStateUpdates.clear();
fStateSaveStarted = false;
fStateSaveComplete = false;
fStateRestoreStarted = false;
fStateRestoreComplete = false;
+ fExpectRestoreAfterSaveComplete = false;
fTimeoutTime = System.currentTimeMillis() + fTimeoutInterval;
resetModelChanged();
}
@@ -252,14 +269,18 @@ public class TestModelUpdatesListener
}
public void addUpdates(TreePath path, TestElement element, int levels) {
- addUpdates(path, element, levels, ALL_UPDATES_COMPLETE);
+ addUpdates(null, path, element, EMPTY_FILTER_ARRAY, levels, ALL_UPDATES_COMPLETE );
+ }
+
+ public void addUpdates(TreePath path, TestElement element, ViewerFilter[] filters, int levels) {
+ addUpdates(null, path, element, filters, levels, ALL_UPDATES_COMPLETE );
}
- public void addStateUpdates(ITreeModelContentProviderTarget viewer, TreePath path, TestElement element) {
+ public void addStateUpdates(IInternalTreeModelViewer viewer, TreePath path, TestElement element) {
addUpdates(viewer, path, element, -1, STATE_UPDATES);
}
- public void addStateUpdates(ITreeModelContentProviderTarget viewer, IModelDelta pendingDelta, int deltaFlags) {
+ public void addStateUpdates(IInternalTreeModelViewer viewer, IModelDelta pendingDelta, int deltaFlags) {
TreePath treePath = getViewerTreePath(pendingDelta);
if ( !TreePath.EMPTY.equals(treePath) && (pendingDelta.getFlags() & deltaFlags) != 0 ) {
addUpdates(viewer, treePath, (TestElement)treePath.getLastSegment(), 0, STATE_UPDATES);
@@ -286,6 +307,33 @@ public class TestModelUpdatesListener
fRedundantLabelUpdateExceptions.add(path);
}
+ public boolean checkCoalesced(TreePath path, int offset, int length) {
+ for (Iterator itr = fChildrenUpdatesCompleted.iterator(); itr.hasNext();) {
+ IChildrenUpdate update = (IChildrenUpdate)itr.next();
+ if (path.equals( update.getElementPath() ) &&
+ offset == update.getOffset() &&
+ length == update.getLength())
+ {
+ return true;
+ }
+ }
+ return false;
+ }
+
+
+
+ public Set getHasChildrenUpdatesCompleted() {
+ return fHasChildrenUpdatesCompleted;
+ }
+
+ public Set getChildCountUpdatesCompleted() {
+ return fChildCountUpdatesCompleted;
+ }
+
+ public Set getChildrenUpdatesCompleted() {
+ return fChildrenUpdatesCompleted;
+ }
+
/**
* Returns a tree path for the node, *not* including the root element.
*
@@ -308,7 +356,24 @@ public class TestModelUpdatesListener
addUpdates(null, path, element, levels, flags);
}
- public void addUpdates(ITreeModelContentProviderTarget viewer, TreePath path, TestElement element, int levels, int flags) {
+ public void addUpdates(IInternalTreeModelViewer viewer, TreePath path, TestElement element, int levels, int flags) {
+ addUpdates(viewer, path, element, EMPTY_FILTER_ARRAY, levels, flags);
+ }
+
+ public static boolean isFiltered(Object element, ViewerFilter[] filters) {
+ for (int i = 0; i < filters.length; i++) {
+ if (!filters[i].select(null, null, element)) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ public void addUpdates(IInternalTreeModelViewer viewer, TreePath path, TestElement element, ViewerFilter[] filters, int levels, int flags) {
+ if (isFiltered(path.getLastSegment(), filters)) {
+ return;
+ }
+
if (!path.equals(TreePath.EMPTY)) {
if ((flags & LABEL_UPDATES) != 0) {
fLabelUpdates.add(path);
@@ -331,13 +396,15 @@ public class TestModelUpdatesListener
if ((flags & CHILDREN_UPDATES) != 0) {
Set childrenIndexes = new HashSet();
for (int i = 0; i < children.length; i++) {
- childrenIndexes.add(new Integer(i));
+ if (!isFiltered(children[i], filters)) {
+ childrenIndexes.add(new Integer(i));
+ }
}
fChildrenUpdatesScheduled.put(path, childrenIndexes);
}
for (int i = 0; i < children.length; i++) {
- addUpdates(viewer, path.createChildPath(children[i]), children[i], levels, flags);
+ addUpdates(viewer, path.createChildPath(children[i]), children[i], filters, levels, flags);
}
}
@@ -368,37 +435,41 @@ public class TestModelUpdatesListener
throw new RuntimeException("Timed Out: " + toString(flags));
}
+ if (fFailExpectation != null) {
+ throw fFailExpectation;
+ }
+
if (fJobError != null) {
throw new RuntimeException("Job Error: " + fJobError);
}
-
+
if (fFailOnRedundantUpdates && !fRedundantUpdates.isEmpty()) {
Assert.fail("Redundant Updates: " + fRedundantUpdates.toString());
}
if (fFailOnRedundantLabelUpdates && !fRedundantLabelUpdates.isEmpty()) {
Assert.fail("Redundant Label Updates: " + fRedundantLabelUpdates.toString());
}
- if (fFailOnMultipleLabelUpdateSequences && !fMultipleLabelUpdateSequencesObserved) {
+ if (fFailOnMultipleLabelUpdateSequences && fLabelUpdatesComplete > (fLabelUpdatesCompleteAtReset + 1)) {
Assert.fail("Multiple label update sequences detected");
}
- if (fFailOnMultipleModelUpdateSequences && fMultipleModelUpdateSequencesObserved) {
+ if (fFailOnMultipleModelUpdateSequences && fViewerUpdatesComplete > (fViewerUpdatesCompleteAtReset + 1)) {
Assert.fail("Multiple viewer update sequences detected");
}
- if ( (flags & LABEL_UPDATES_COMPLETE) != 0) {
- if (!fLabelUpdatesComplete) return false;
+ if ( (flags & LABEL_SEQUENCE_COMPLETE) != 0) {
+ if (fLabelUpdatesComplete == fLabelUpdatesCompleteAtReset) return false;
}
- if ( (flags & LABEL_UPDATES_STARTED) != 0) {
- if (!fLabelUpdatesStarted) return false;
+ if ( (flags & LABEL_SEQUENCE_STARTED) != 0) {
+ if (fLabelUpdatesStarted == fLabelUpdatesStartedAtReset) return false;
}
if ( (flags & LABEL_UPDATES) != 0) {
if (!fLabelUpdates.isEmpty()) return false;
}
- if ( (flags & CONTENT_UPDATES_STARTED) != 0) {
- if (!fViewerUpdatesStarted) return false;
+ if ( (flags & CONTENT_SEQUENCE_STARTED) != 0) {
+ if (fViewerUpdatesStarted == fViewerUpdatesStartedAtReset) return false;
}
- if ( (flags & CONTENT_UPDATES_COMPLETE) != 0) {
- if (!fViewerUpdatesComplete) return false;
+ if ( (flags & CONTENT_SEQUENCE_COMPLETE) != 0) {
+ if (fViewerUpdatesComplete == fViewerUpdatesCompleteAtReset) return false;
}
if ( (flags & HAS_CHILDREN_UPDATES_STARTED) != 0) {
if (fHasChildrenUpdatesRunning.isEmpty() && fHasChildrenUpdatesCompleted.isEmpty()) return false;
@@ -517,22 +588,23 @@ public class TestModelUpdatesListener
}
public void viewerUpdatesBegin() {
- if (fFailOnMultipleModelUpdateSequences && fViewerUpdatesComplete) {
- fMultipleModelUpdateSequencesObserved = true;
+ if (fViewerUpdatesStarted > fViewerUpdatesComplete) {
+ fFailExpectation = new RuntimeException("Unmatched updatesStarted/updateCompleted notifications observed.");
}
- fViewerUpdatesStarted = true;
+ fViewerUpdatesStarted++;
}
public void viewerUpdatesComplete() {
- fViewerUpdatesComplete = true;
+ if (fViewerUpdatesStarted <= fViewerUpdatesComplete) {
+ fFailExpectation = new RuntimeException("Unmatched updatesStarted/updateCompleted notifications observed.");
+ }
+ fViewerUpdatesComplete++;
}
public void labelUpdateComplete(ILabelUpdate update) {
- synchronized (this) {
- fLabelUpdatesRunning.remove(update);
- fLabelUpdatesCompleted.add(update);
- fLabelUpdatesCounter--;
- }
+ fLabelUpdatesRunning.remove(update);
+ fLabelUpdatesCompleted.add(update);
+ fLabelUpdatesCounter--;
if (!fLabelUpdates.remove(update.getElementPath()) &&
fFailOnRedundantLabelUpdates &&
!fRedundantLabelUpdateExceptions.contains(update.getElementPath()))
@@ -543,21 +615,22 @@ public class TestModelUpdatesListener
}
public void labelUpdateStarted(ILabelUpdate update) {
- synchronized (this) {
- fLabelUpdatesRunning.add(update);
- fLabelUpdatesCounter++;
- }
+ fLabelUpdatesRunning.add(update);
+ fLabelUpdatesCounter++;
}
public void labelUpdatesBegin() {
- if (fFailOnMultipleLabelUpdateSequences && fLabelUpdatesComplete) {
- fMultipleLabelUpdateSequencesObserved = true;
+ if (fLabelUpdatesStarted > fLabelUpdatesComplete) {
+ fFailExpectation = new RuntimeException("Unmatched labelUpdatesStarted/labelUpdateCompleted notifications observed.");
}
- fLabelUpdatesStarted = true;
+ fLabelUpdatesStarted++;
}
public void labelUpdatesComplete() {
- fLabelUpdatesComplete = true;
+ if (fLabelUpdatesStarted <= fLabelUpdatesComplete) {
+ fFailExpectation = new RuntimeException("Unmatched labelUpdatesStarted/labelUpdateCompleted notifications observed.");
+ }
+ fLabelUpdatesComplete++;
}
public void modelChanged(IModelDelta delta, IModelProxy proxy) {
@@ -573,6 +646,9 @@ public class TestModelUpdatesListener
}
public void stateRestoreUpdatesBegin(Object input) {
+ if (fExpectRestoreAfterSaveComplete && !fStateSaveComplete) {
+ fFailExpectation = new RuntimeException("RESTORE should begin after SAVE completed!");
+ }
fStateRestoreStarted = true;
}
@@ -617,15 +693,7 @@ public class TestModelUpdatesListener
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) {
+ if ( (flags & LABEL_SEQUENCE_COMPLETE) != 0) {
buf.append("\n\t");
buf.append("fLabelUpdatesComplete = " + fLabelUpdatesComplete);
}
@@ -633,10 +701,10 @@ public class TestModelUpdatesListener
buf.append("\n\t");
buf.append("fLabelUpdatesRunning = " + fLabelUpdatesCounter);
}
- if ( (flags & LABEL_UPDATES_STARTED) != 0) {
+ if ( (flags & LABEL_SEQUENCE_STARTED) != 0) {
buf.append("\n\t");
- buf.append("fLabelUpdatesRunning = ");
- buf.append( fLabelUpdatesRunning );
+ buf.append("fLabelUpdatesStarted = ");
+ buf.append( fLabelUpdatesStarted );
buf.append("\n\t");
buf.append("fLabelUpdatesCompleted = ");
buf.append( fLabelUpdatesCompleted );
@@ -646,14 +714,16 @@ public class TestModelUpdatesListener
buf.append("fLabelUpdates = ");
buf.append( toString(fLabelUpdates) );
}
- if ( (flags & CONTENT_UPDATES_COMPLETE) != 0) {
- buf.append("\n\t");
- buf.append("fViewerUpdatesComplete = " + fViewerUpdatesComplete);
- }
if ( (flags & VIEWER_UPDATES_RUNNING) != 0) {
buf.append("\n\t");
+ buf.append("fViewerUpdatesStarted = " + fViewerUpdatesStarted);
+ buf.append("\n\t");
buf.append("fViewerUpdatesRunning = " + fViewerUpdatesCounter);
}
+ if ( (flags & CONTENT_SEQUENCE_COMPLETE) != 0) {
+ buf.append("\n\t");
+ buf.append("fViewerUpdatesComplete = " + fViewerUpdatesComplete);
+ }
if ( (flags & HAS_CHILDREN_UPDATES_STARTED) != 0) {
buf.append("\n\t");
buf.append("fHasChildrenUpdatesRunning = ");
@@ -761,8 +831,10 @@ public class TestModelUpdatesListener
}
public String toString() {
- return toString(ALL_UPDATES_COMPLETE | MODEL_CHANGED_COMPLETE | STATE_RESTORE_COMPLETE | VIEWER_UPDATES_STARTED | LABEL_UPDATES_STARTED | STATE_UPDATES);
+ return toString(ALL_UPDATES_COMPLETE | MODEL_CHANGED_COMPLETE | STATE_SAVE_COMPLETE | STATE_RESTORE_COMPLETE | ALL_VIEWER_UPDATES_STARTED | LABEL_SEQUENCE_STARTED | STATE_UPDATES);
}
+
+
}
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 2f6a0985a..7e465bdd0 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
@@ -10,18 +10,27 @@
*******************************************************************************/
package org.eclipe.debug.tests.viewer.model;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.LinkedList;
+import java.util.List;
+
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.IChildrenCountUpdate;
+import org.eclipse.debug.internal.ui.viewers.model.provisional.IHasChildrenUpdate;
import org.eclipse.debug.internal.ui.viewers.model.provisional.IModelDelta;
+import org.eclipse.debug.internal.ui.viewers.model.provisional.ITreeModelViewer;
+import org.eclipse.debug.internal.ui.viewers.model.provisional.IViewerUpdate;
import org.eclipse.debug.internal.ui.viewers.model.provisional.ModelDelta;
import org.eclipse.jface.viewers.TreePath;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.ui.PlatformUI;
+import org.junit.Assert;
/**
* Tests to verify that the viewer property updates following changes in the
@@ -181,7 +190,7 @@ abstract public class UpdateTests extends TestCase implements ITestModelUpdatesL
model.postDelta(delta);
if (validate) {
- while (!fListener.isFinished(MODEL_CHANGED_COMPLETE | CONTENT_UPDATES_COMPLETE | LABEL_UPDATES_COMPLETE))
+ while (!fListener.isFinished(MODEL_CHANGED_COMPLETE | CONTENT_SEQUENCE_COMPLETE | LABEL_SEQUENCE_COMPLETE))
if (!fDisplay.readAndDispatch ()) Thread.sleep(0);
model.validateData(fViewer, TreePath.EMPTY);
} else {
@@ -198,7 +207,7 @@ abstract public class UpdateTests extends TestCase implements ITestModelUpdatesL
model.postDelta(delta);
if (validate) {
- while (!fListener.isFinished(MODEL_CHANGED_COMPLETE | CONTENT_UPDATES_COMPLETE | LABEL_UPDATES_COMPLETE))
+ while (!fListener.isFinished(MODEL_CHANGED_COMPLETE | CONTENT_SEQUENCE_COMPLETE | LABEL_SEQUENCE_COMPLETE))
if (!fDisplay.readAndDispatch ()) Thread.sleep(0);
model.validateData(fViewer, TreePath.EMPTY);
} else {
@@ -231,6 +240,33 @@ abstract public class UpdateTests extends TestCase implements ITestModelUpdatesL
addElement(model, "4-new", 4, true);
}
+ /**
+ * This test verifies that when the viewer processes a delta that causes viewer
+ * updates it initiates the model update sequence before it finishes processing
+ * the delta.
+ */
+ public void testNotifyUpdatesTartedOnModelChanged() throws InterruptedException {
+ TestModel model = TestModel.simpleSingleLevel();
+ fViewer.setAutoExpandLevel(-1);
+
+ // Create the listener
+ fListener.reset(TreePath.EMPTY, model.getRootElement(), -1, false, false);
+
+ // Set the input into the view and update the view.
+ fViewer.setInput(model.getRootElement());
+ while (!fListener.isFinished()) if (!fDisplay.readAndDispatch ()) Thread.sleep(0);
+ model.validateData(fViewer, TreePath.EMPTY);
+
+ // Refresh the viewer so that updates are generated.
+ fListener.reset();
+ model.postDelta(new ModelDelta(model.getRootElement(), IModelDelta.CONTENT));
+
+ // Wait for the delta to be processed.
+ while (!fListener.isFinished(MODEL_CHANGED_COMPLETE)) if (!fDisplay.readAndDispatch ()) Thread.sleep(0);
+
+ Assert.assertTrue( fListener.isFinished(CONTENT_SEQUENCE_STARTED) );
+ }
+
/**
* This test case attempts to create a race condition between processing
@@ -326,4 +362,186 @@ abstract public class UpdateTests extends TestCase implements ITestModelUpdatesL
}
+ /**
+ * This test forces the viewer to cancel updates then process them at once.
+ * <p>
+ * - Wait until CHILDREN COUNT update started then refresh<br>
+ * - Process queued updates in order.<br>
+ * </p>
+ */
+ public void testCanceledUpdates1() throws InterruptedException {
+ TestModel model = TestModel.simpleSingleLevel();
+ fViewer.setAutoExpandLevel(-1);
+
+ // Create the listener
+ fListener.reset(TreePath.EMPTY, model.getRootElement(), -1, false, false);
+
+ // Set the input into the view and update the view.
+ fViewer.setInput(model.getRootElement());
+ while (!fListener.isFinished()) if (!fDisplay.readAndDispatch ()) Thread.sleep(0);
+ model.validateData(fViewer, TreePath.EMPTY);
+
+
+ model.setQeueueingUpdate(true);
+
+ for (int i = 0; i < 5; i++) {
+ // Refresh the viewer so that updates are generated.
+ fListener.reset();
+ model.postDelta(new ModelDelta(model.getRootElement(), IModelDelta.CONTENT));
+
+ // Wait for the delta to be processed.
+ while (!fListener.isFinished(MODEL_CHANGED_COMPLETE | CHILD_COUNT_UPDATES_STARTED)) if (!fDisplay.readAndDispatch ()) Thread.sleep(0);
+
+ }
+
+ model.setQeueueingUpdate(false);
+ while (!fListener.isFinished(ALL_UPDATES_COMPLETE)) if (!fDisplay.readAndDispatch ()) Thread.sleep(0);
+
+ }
+
+ /**
+ * This test forces the viewer to cancel updates then process them at once.
+ * <p>
+ * - Wait until CHILDREN COUNT update started then refresh<br>
+ * - Process queued updates in REVERSE order.<br>
+ * </p>
+ */
+ public void testCanceledUpdates2() throws InterruptedException {
+ TestModel model = TestModel.simpleSingleLevel();
+ fViewer.setAutoExpandLevel(-1);
+
+ // Create the listener
+ fListener.reset(TreePath.EMPTY, model.getRootElement(), -1, false, false);
+
+ // Set the input into the view and update the view.
+ fViewer.setInput(model.getRootElement());
+ while (!fListener.isFinished()) if (!fDisplay.readAndDispatch ()) Thread.sleep(0);
+ model.validateData(fViewer, TreePath.EMPTY);
+
+
+ model.setQeueueingUpdate(true);
+
+ for (int i = 0; i < 5; i++) {
+ // Refresh the viewer so that updates are generated.
+ fListener.reset();
+ model.postDelta(new ModelDelta(model.getRootElement(), IModelDelta.CONTENT));
+
+ // Wait for the delta to be processed.
+ while (!fListener.isFinished(MODEL_CHANGED_COMPLETE | CHILD_COUNT_UPDATES_STARTED)) if (!fDisplay.readAndDispatch ()) Thread.sleep(0);
+
+ }
+
+ List updates = new ArrayList(model.getQueuedUpdates());
+ model.getQueuedUpdates().clear();
+ for (int i = updates.size() - 1; i >= 0; i--) {
+ model.processUpdate((IViewerUpdate)updates.get(i));
+ }
+
+ model.setQeueueingUpdate(false);
+ while (!fListener.isFinished(ALL_UPDATES_COMPLETE)) if (!fDisplay.readAndDispatch ()) Thread.sleep(0);
+ }
+
+ /**
+ * This test forces the viewer to cancel updates then process them at once.
+ * <p>
+ * - Wait until CHILDREN update started then refresh<br>
+ * - Process queued updates in order.<br>
+ * </p>
+ */
+ public void testCanceledUpdates3() throws InterruptedException {
+ TestModel model = TestModel.simpleSingleLevel();
+ fViewer.setAutoExpandLevel(-1);
+
+ // Create the listener
+ fListener.reset(TreePath.EMPTY, model.getRootElement(), -1, false, false);
+
+ // Set the input into the view and update the view.
+ fViewer.setInput(model.getRootElement());
+ while (!fListener.isFinished()) if (!fDisplay.readAndDispatch ()) Thread.sleep(0);
+ model.validateData(fViewer, TreePath.EMPTY);
+
+
+ model.setQeueueingUpdate(true);
+
+ for (int i = 0; i < 5; i++) {
+ // Refresh the viewer so that updates are generated.
+ fListener.reset();
+ model.postDelta(new ModelDelta(model.getRootElement(), IModelDelta.CONTENT));
+
+ // Wait for the delta to be processed.
+ while (!fListener.isFinished(MODEL_CHANGED_COMPLETE | CHILDREN_UPDATES_STARTED)) {
+ completeQueuedUpdatesOfType(model, IChildrenCountUpdate.class);
+ completeQueuedUpdatesOfType(model, IHasChildrenUpdate.class);
+ if (!fDisplay.readAndDispatch ()) Thread.sleep(0);
+ }
+ }
+
+ model.setQeueueingUpdate(false);
+ while (!fListener.isFinished(ALL_UPDATES_COMPLETE)) if (!fDisplay.readAndDispatch ()) Thread.sleep(0);
+
+ }
+
+ /**
+ * This test forces the viewer to cancel updates then process them at once.
+ * <p>
+ * - Wait until CHILDREN update started then refresh<br>
+ * - Process queued updates in REVERSE order.<br>
+ * </p>
+ */
+ public void testCanceledUpdates4() throws InterruptedException {
+ TestModel model = TestModel.simpleSingleLevel();
+ fViewer.setAutoExpandLevel(-1);
+
+ // Create the listener
+ fListener.reset(TreePath.EMPTY, model.getRootElement(), -1, false, false);
+
+ // Set the input into the view and update the view.
+ fViewer.setInput(model.getRootElement());
+ while (!fListener.isFinished()) if (!fDisplay.readAndDispatch ()) Thread.sleep(0);
+ model.validateData(fViewer, TreePath.EMPTY);
+
+
+ model.setQeueueingUpdate(true);
+
+ for (int i = 0; i < 5; i++) {
+ // Refresh the viewer so that updates are generated.
+ fListener.reset();
+ model.postDelta(new ModelDelta(model.getRootElement(), IModelDelta.CONTENT));
+
+ // Wait for the delta to be processed.
+ while (!fListener.isFinished(MODEL_CHANGED_COMPLETE | CHILDREN_UPDATES_STARTED)) {
+ completeQueuedUpdatesOfType(model, IChildrenCountUpdate.class);
+ completeQueuedUpdatesOfType(model, IHasChildrenUpdate.class);
+ if (!fDisplay.readAndDispatch ()) Thread.sleep(0);
+ }
+
+ }
+
+ List updates = new ArrayList(model.getQueuedUpdates());
+ model.getQueuedUpdates().clear();
+ for (int i = updates.size() - 1; i >= 0; i--) {
+ model.processUpdate((IViewerUpdate)updates.get(i));
+ }
+
+ model.setQeueueingUpdate(false);
+ while (!fListener.isFinished(ALL_UPDATES_COMPLETE)) if (!fDisplay.readAndDispatch ()) Thread.sleep(0);
+ }
+
+ private void completeQueuedUpdatesOfType(TestModel model, Class updateClass) {
+ List updatesToComplete = new LinkedList();
+
+ for (Iterator itr = model.getQueuedUpdates().iterator(); itr.hasNext();) {
+ IViewerUpdate update = (IViewerUpdate)itr.next();
+ if (updateClass.isInstance(update)) {
+ updatesToComplete.add(update);
+ itr.remove();
+ }
+ }
+ if (updatesToComplete != null) {
+ for (Iterator itr = updatesToComplete.iterator(); itr.hasNext();) {
+ model.processUpdate((IViewerUpdate)itr.next());
+ }
+ }
+ }
+
}
diff --git a/org.eclipse.debug.tests/src/org/eclipe/debug/tests/viewer/model/VirtualViewerContentTests.java b/org.eclipse.debug.tests/src/org/eclipe/debug/tests/viewer/model/VirtualViewerContentTests.java
index 8cacbe173..994ba3fe7 100644
--- a/org.eclipse.debug.tests/src/org/eclipe/debug/tests/viewer/model/VirtualViewerContentTests.java
+++ b/org.eclipse.debug.tests/src/org/eclipe/debug/tests/viewer/model/VirtualViewerContentTests.java
@@ -10,7 +10,7 @@
*******************************************************************************/
package org.eclipe.debug.tests.viewer.model;
-import org.eclipse.debug.internal.ui.viewers.model.ITreeModelContentProviderTarget;
+import org.eclipse.debug.internal.ui.viewers.model.IInternalTreeModelViewer;
import org.eclipse.debug.internal.ui.viewers.model.provisional.PresentationContext;
import org.eclipse.debug.internal.ui.viewers.model.provisional.VirtualTreeModelViewer;
import org.eclipse.swt.widgets.Display;
@@ -25,7 +25,7 @@ public class VirtualViewerContentTests extends ContentTests {
super(name);
}
- protected ITreeModelContentProviderTarget createViewer(Display display, Shell shell) {
+ protected IInternalTreeModelViewer createViewer(Display display, Shell shell) {
return new VirtualTreeModelViewer(fDisplay, 0, new PresentationContext("TestViewer"));
}
}
diff --git a/org.eclipse.debug.tests/src/org/eclipe/debug/tests/viewer/model/VirtualViewerDeltaTests.java b/org.eclipse.debug.tests/src/org/eclipe/debug/tests/viewer/model/VirtualViewerDeltaTests.java
index f3101784f..8fee48bec 100644
--- a/org.eclipse.debug.tests/src/org/eclipe/debug/tests/viewer/model/VirtualViewerDeltaTests.java
+++ b/org.eclipse.debug.tests/src/org/eclipe/debug/tests/viewer/model/VirtualViewerDeltaTests.java
@@ -10,7 +10,7 @@
*******************************************************************************/
package org.eclipe.debug.tests.viewer.model;
-import org.eclipse.debug.internal.ui.viewers.model.ITreeModelContentProviderTarget;
+import org.eclipse.debug.internal.ui.viewers.model.IInternalTreeModelViewer;
import org.eclipse.debug.internal.ui.viewers.model.provisional.PresentationContext;
import org.eclipse.debug.internal.ui.viewers.model.provisional.VirtualTreeModelViewer;
import org.eclipse.swt.widgets.Display;
@@ -25,7 +25,7 @@ public class VirtualViewerDeltaTests extends DeltaTests {
super(name);
}
- protected ITreeModelContentProviderTarget createViewer(Display display, Shell shell) {
+ protected IInternalTreeModelViewer createViewer(Display display, Shell shell) {
return new VirtualTreeModelViewer(fDisplay, 0, new PresentationContext("TestViewer"));
}
}
diff --git a/org.eclipse.debug.tests/src/org/eclipe/debug/tests/viewer/model/VirtualViewerFilterTests.java b/org.eclipse.debug.tests/src/org/eclipe/debug/tests/viewer/model/VirtualViewerFilterTests.java
new file mode 100644
index 000000000..b53ac539d
--- /dev/null
+++ b/org.eclipse.debug.tests/src/org/eclipe/debug/tests/viewer/model/VirtualViewerFilterTests.java
@@ -0,0 +1,32 @@
+/*******************************************************************************
+ * Copyright (c) 2009 Wind River Systems and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Wind River Systems - initial API and implementation
+ *******************************************************************************/
+package org.eclipe.debug.tests.viewer.model;
+
+import org.eclipse.debug.internal.ui.viewers.model.IInternalTreeModelViewer;
+import org.eclipse.debug.internal.ui.viewers.model.provisional.PresentationContext;
+import org.eclipse.debug.internal.ui.viewers.model.provisional.VirtualTreeModelViewer;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Shell;
+
+/**
+ * @since 3.6
+ */
+public class VirtualViewerFilterTests extends FilterTests {
+
+ public VirtualViewerFilterTests(String name) {
+ super(name);
+ }
+
+ protected IInternalTreeModelViewer createViewer(Display display, Shell shell) {
+ return new VirtualTreeModelViewer(fDisplay, SWT.VIRTUAL, new PresentationContext("TestViewer"), new VisibleVirtualItemValidator(0, 100));
+ }
+}
diff --git a/org.eclipse.debug.tests/src/org/eclipe/debug/tests/viewer/model/VirtualViewerLazyModeTests.java b/org.eclipse.debug.tests/src/org/eclipe/debug/tests/viewer/model/VirtualViewerLazyModeTests.java
index 2eb78d354..5ea544562 100644
--- a/org.eclipse.debug.tests/src/org/eclipe/debug/tests/viewer/model/VirtualViewerLazyModeTests.java
+++ b/org.eclipse.debug.tests/src/org/eclipe/debug/tests/viewer/model/VirtualViewerLazyModeTests.java
@@ -12,7 +12,7 @@ package org.eclipe.debug.tests.viewer.model;
import junit.framework.TestCase;
-import org.eclipse.debug.internal.ui.viewers.model.ITreeModelViewer;
+import org.eclipse.debug.internal.ui.viewers.model.provisional.ITreeModelViewer;
import org.eclipse.debug.internal.ui.viewers.model.provisional.PresentationContext;
import org.eclipse.debug.internal.ui.viewers.model.provisional.VirtualTreeModelViewer;
import org.eclipse.swt.SWT;
diff --git a/org.eclipse.debug.tests/src/org/eclipe/debug/tests/viewer/model/VirtualViewerPerformanceTests.java b/org.eclipse.debug.tests/src/org/eclipe/debug/tests/viewer/model/VirtualViewerPerformanceTests.java
index 2c4e6cd6b..7bc589bf7 100644
--- a/org.eclipse.debug.tests/src/org/eclipe/debug/tests/viewer/model/VirtualViewerPerformanceTests.java
+++ b/org.eclipse.debug.tests/src/org/eclipe/debug/tests/viewer/model/VirtualViewerPerformanceTests.java
@@ -10,7 +10,7 @@
*******************************************************************************/
package org.eclipe.debug.tests.viewer.model;
-import org.eclipse.debug.internal.ui.viewers.model.ITreeModelContentProviderTarget;
+import org.eclipse.debug.internal.ui.viewers.model.IInternalTreeModelViewer;
import org.eclipse.debug.internal.ui.viewers.model.provisional.PresentationContext;
import org.eclipse.debug.internal.ui.viewers.model.provisional.VirtualTreeModelViewer;
import org.eclipse.swt.widgets.Display;
@@ -25,7 +25,7 @@ public class VirtualViewerPerformanceTests extends PerformanceTests {
super(name);
}
- protected ITreeModelContentProviderTarget createViewer(Display display, Shell shell) {
+ protected IInternalTreeModelViewer createViewer(Display display, Shell shell) {
return new VirtualTreeModelViewer(fDisplay, 0, new PresentationContext("TestViewer"));
}
diff --git a/org.eclipse.debug.tests/src/org/eclipe/debug/tests/viewer/model/VirtualViewerPopupTests.java b/org.eclipse.debug.tests/src/org/eclipe/debug/tests/viewer/model/VirtualViewerPopupTests.java
index ee8e9c745..ec6f152f8 100644
--- a/org.eclipse.debug.tests/src/org/eclipe/debug/tests/viewer/model/VirtualViewerPopupTests.java
+++ b/org.eclipse.debug.tests/src/org/eclipe/debug/tests/viewer/model/VirtualViewerPopupTests.java
@@ -10,7 +10,7 @@
*******************************************************************************/
package org.eclipe.debug.tests.viewer.model;
-import org.eclipse.debug.internal.ui.viewers.model.ITreeModelViewer;
+import org.eclipse.debug.internal.ui.viewers.model.provisional.ITreeModelViewer;
import org.eclipse.debug.internal.ui.viewers.model.provisional.PresentationContext;
import org.eclipse.debug.internal.ui.viewers.model.provisional.VirtualTreeModelViewer;
import org.eclipse.swt.widgets.Display;
diff --git a/org.eclipse.debug.tests/src/org/eclipe/debug/tests/viewer/model/VirtualViewerSelectionTests.java b/org.eclipse.debug.tests/src/org/eclipe/debug/tests/viewer/model/VirtualViewerSelectionTests.java
index e716acf03..3bf5b7736 100644
--- a/org.eclipse.debug.tests/src/org/eclipe/debug/tests/viewer/model/VirtualViewerSelectionTests.java
+++ b/org.eclipse.debug.tests/src/org/eclipe/debug/tests/viewer/model/VirtualViewerSelectionTests.java
@@ -10,7 +10,7 @@
*******************************************************************************/
package org.eclipe.debug.tests.viewer.model;
-import org.eclipse.debug.internal.ui.viewers.model.ITreeModelViewer;
+import org.eclipse.debug.internal.ui.viewers.model.provisional.ITreeModelViewer;
import org.eclipse.debug.internal.ui.viewers.model.provisional.PresentationContext;
import org.eclipse.debug.internal.ui.viewers.model.provisional.VirtualTreeModelViewer;
import org.eclipse.swt.widgets.Display;
diff --git a/org.eclipse.debug.tests/src/org/eclipe/debug/tests/viewer/model/VirtualViewerStateTests.java b/org.eclipse.debug.tests/src/org/eclipe/debug/tests/viewer/model/VirtualViewerStateTests.java
index 5a4e4d671..2c5d5c96c 100644
--- a/org.eclipse.debug.tests/src/org/eclipe/debug/tests/viewer/model/VirtualViewerStateTests.java
+++ b/org.eclipse.debug.tests/src/org/eclipe/debug/tests/viewer/model/VirtualViewerStateTests.java
@@ -10,7 +10,7 @@
*******************************************************************************/
package org.eclipe.debug.tests.viewer.model;
-import org.eclipse.debug.internal.ui.viewers.model.ITreeModelViewer;
+import org.eclipse.debug.internal.ui.viewers.model.provisional.ITreeModelViewer;
import org.eclipse.debug.internal.ui.viewers.model.provisional.PresentationContext;
import org.eclipse.debug.internal.ui.viewers.model.provisional.VirtualTreeModelViewer;
import org.eclipse.swt.widgets.Display;
diff --git a/org.eclipse.debug.tests/src/org/eclipe/debug/tests/viewer/model/VirtualViewerUpdateTests.java b/org.eclipse.debug.tests/src/org/eclipe/debug/tests/viewer/model/VirtualViewerUpdateTests.java
index 507be5192..5086fab2c 100644
--- a/org.eclipse.debug.tests/src/org/eclipe/debug/tests/viewer/model/VirtualViewerUpdateTests.java
+++ b/org.eclipse.debug.tests/src/org/eclipe/debug/tests/viewer/model/VirtualViewerUpdateTests.java
@@ -10,7 +10,7 @@
*******************************************************************************/
package org.eclipe.debug.tests.viewer.model;
-import org.eclipse.debug.internal.ui.viewers.model.ITreeModelViewer;
+import org.eclipse.debug.internal.ui.viewers.model.provisional.ITreeModelViewer;
import org.eclipse.debug.internal.ui.viewers.model.provisional.PresentationContext;
import org.eclipse.debug.internal.ui.viewers.model.provisional.VirtualTreeModelViewer;
import org.eclipse.swt.widgets.Display;
diff --git a/org.eclipse.debug.tests/src/org/eclipe/debug/tests/viewer/model/VisibleVirtualItemValidator.java b/org.eclipse.debug.tests/src/org/eclipe/debug/tests/viewer/model/VisibleVirtualItemValidator.java
new file mode 100644
index 000000000..b2c122440
--- /dev/null
+++ b/org.eclipse.debug.tests/src/org/eclipe/debug/tests/viewer/model/VisibleVirtualItemValidator.java
@@ -0,0 +1,95 @@
+/*******************************************************************************
+ * Copyright (c) 2009 Wind River Systems and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Wind River Systems - initial API and implementation
+ *******************************************************************************/
+package org.eclipe.debug.tests.viewer.model;
+
+import org.eclipse.debug.internal.ui.viewers.model.provisional.IVirtualItemValidator;
+import org.eclipse.debug.internal.ui.viewers.model.provisional.VirtualItem;
+import org.eclipse.debug.internal.ui.viewers.model.provisional.VirtualTree;
+
+/**
+ * Item validator for the virtual viewer which specifies that the given
+ * range of items should be treated as visible.
+ */
+public class VisibleVirtualItemValidator implements IVirtualItemValidator {
+
+ private int fStart = 0;
+ private int fEnd = 0;
+
+ public VisibleVirtualItemValidator(int startPosition, int length) {
+ setVisibleRange(startPosition, length);
+ }
+
+ public void setVisibleRange(int startPosition, int length) {
+ fStart = startPosition;
+ fEnd = startPosition + length;
+ }
+
+ public int getStartPosition() {
+ return fStart;
+ }
+
+ public int getLength() {
+ return fEnd - fStart;
+ }
+
+ public boolean isItemVisible(VirtualItem item) {
+ int position = 0;
+ while (item.getParent() != null) {
+ position += item.getIndex().intValue();
+ item = item.getParent();
+ }
+ return position >= fStart && position < fEnd || isSelected(item);
+ }
+
+ public void showItem(VirtualItem item) {
+ int length = fEnd - fStart;
+ fStart = calcPosition(item);
+ fEnd = fStart + length;
+ }
+
+ private int calcPosition(VirtualItem item) {
+ int position = 0;
+ while (item.getParent() != null) {
+ position += item.getIndex().intValue();
+ item = item.getParent();
+ }
+ return position;
+ }
+
+ private boolean isSelected(VirtualItem item) {
+ VirtualItem[] selection = getSelection(item);
+ for (int i = 0; i < selection.length; i++) {
+ VirtualItem selectionItem = selection[i];
+ while (selectionItem != null) {
+ if (item.equals(selectionItem)) {
+ return true;
+ }
+ selectionItem = selectionItem.getParent();
+ }
+ }
+ return false;
+ }
+
+ private VirtualItem[] getSelection(VirtualItem item) {
+ VirtualTree tree = getTree(item);
+ if (tree != null) {
+ return tree.getSelection();
+ }
+ return new VirtualItem[0];
+ }
+
+ private VirtualTree getTree(VirtualItem item) {
+ while (item != null && !(item instanceof VirtualTree)) {
+ item = item.getParent();
+ }
+ return (VirtualTree)item;
+ }
+}
diff --git a/org.eclipse.debug.tests/src/org/eclipse/debug/tests/AutomatedSuite.java b/org.eclipse.debug.tests/src/org/eclipse/debug/tests/AutomatedSuite.java
index 82ba80b7a..a3cba9bf3 100644
--- a/org.eclipse.debug.tests/src/org/eclipse/debug/tests/AutomatedSuite.java
+++ b/org.eclipse.debug.tests/src/org/eclipse/debug/tests/AutomatedSuite.java
@@ -25,6 +25,7 @@ import org.eclipe.debug.tests.viewer.model.FilterTransformTests;
import org.eclipe.debug.tests.viewer.model.PresentationContextTests;
import org.eclipe.debug.tests.viewer.model.VirtualViewerContentTests;
import org.eclipe.debug.tests.viewer.model.VirtualViewerDeltaTests;
+import org.eclipe.debug.tests.viewer.model.VirtualViewerFilterTests;
import org.eclipe.debug.tests.viewer.model.VirtualViewerLazyModeTests;
import org.eclipe.debug.tests.viewer.model.VirtualViewerSelectionTests;
import org.eclipe.debug.tests.viewer.model.VirtualViewerStateTests;
@@ -62,6 +63,7 @@ public class AutomatedSuite extends TestSuite {
addTest(new TestSuite(VirtualViewerSelectionTests.class));
addTest(new TestSuite(VirtualViewerStateTests.class));
addTest(new TestSuite(VirtualViewerUpdateTests.class));
+ addTest(new TestSuite(VirtualViewerFilterTests.class));
// Viewer neutral tests
addTest(new TestSuite(FilterTransformTests.class));
diff --git a/org.eclipse.debug.tests/src/org/eclipse/debug/tests/LocalSuite.java b/org.eclipse.debug.tests/src/org/eclipse/debug/tests/LocalSuite.java
index 55acd5731..6098eb840 100644
--- a/org.eclipse.debug.tests/src/org/eclipse/debug/tests/LocalSuite.java
+++ b/org.eclipse.debug.tests/src/org/eclipse/debug/tests/LocalSuite.java
@@ -17,6 +17,7 @@ import org.eclipe.debug.tests.viewer.model.ColumnPresentationTests;
import org.eclipe.debug.tests.viewer.model.JFaceViewerCheckTests;
import org.eclipe.debug.tests.viewer.model.JFaceViewerContentTests;
import org.eclipe.debug.tests.viewer.model.JFaceViewerDeltaTests;
+import org.eclipe.debug.tests.viewer.model.JFaceViewerFilterTests;
import org.eclipe.debug.tests.viewer.model.JFaceViewerLazyTests;
import org.eclipe.debug.tests.viewer.model.JFaceViewerSelectionTests;
import org.eclipe.debug.tests.viewer.model.JFaceViewerStateTests;
@@ -53,6 +54,7 @@ public class LocalSuite extends TestSuite {
addTest(new TestSuite(JFaceViewerUpdateTests.class));
addTest(new TestSuite(JFaceViewerLazyTests.class));
addTest(new TestSuite(JFaceViewerTopIndexTests.class));
+ addTest(new TestSuite(JFaceViewerFilterTests.class));
addTest(new TestSuite(ColumnPresentationTests.class));
}
}

Back to the top