1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-04-29 19:45:01 +02:00

Fix for failing test 'testAsyncPopulation'

This commit is contained in:
Markus Schorn 2006-09-26 10:00:10 +00:00
parent ccf853cd34
commit ca874fe95a
3 changed files with 61 additions and 44 deletions

View file

@ -34,6 +34,7 @@ import org.eclipse.core.runtime.FileLocator;
import org.eclipse.core.runtime.IPath; import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.NullProgressMonitor; import org.eclipse.core.runtime.NullProgressMonitor;
import org.eclipse.core.runtime.Path; import org.eclipse.core.runtime.Path;
import org.eclipse.swt.widgets.Display;
import org.eclipse.cdt.core.dom.ast.IASTTranslationUnit; import org.eclipse.cdt.core.dom.ast.IASTTranslationUnit;
import org.eclipse.cdt.core.model.CModelException; import org.eclipse.cdt.core.model.CModelException;
@ -250,4 +251,12 @@ public class BaseTestCase extends TestCase {
} while (System.currentTimeMillis() < endTime); } while (System.currentTimeMillis() < endTime);
throw new Exception("Indexer did not complete in time!"); throw new Exception("Indexer did not complete in time!");
} }
protected void runEventQueue(int time) {
long endTime= System.currentTimeMillis()+time;
do {
while (Display.getCurrent().readAndDispatch());
}
while(System.currentTimeMillis() < endTime);
}
} }

View file

@ -15,7 +15,6 @@ import org.eclipse.core.resources.IProject;
import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.NullProgressMonitor; import org.eclipse.core.runtime.NullProgressMonitor;
import org.eclipse.jface.text.ITextSelection; import org.eclipse.jface.text.ITextSelection;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Tree; import org.eclipse.swt.widgets.Tree;
import org.eclipse.swt.widgets.TreeItem; import org.eclipse.swt.widgets.TreeItem;
import org.eclipse.ui.IWorkbenchPage; import org.eclipse.ui.IWorkbenchPage;
@ -72,14 +71,6 @@ public class CallHierarchyBaseTest extends BaseTestCase {
return tree; return tree;
} }
protected void runEventQueue(int time) {
long endTime= System.currentTimeMillis()+time;
do {
while (Display.getCurrent().readAndDispatch());
}
while(System.currentTimeMillis() < endTime);
}
protected void checkTreeNode(Tree tree, int i0, String label) { protected void checkTreeNode(Tree tree, int i0, String label) {
TreeItem root= null; TreeItem root= null;
try { try {

View file

@ -11,16 +11,25 @@
package org.eclipse.cdt.ui.tests.viewsupport; package org.eclipse.cdt.ui.tests.viewsupport;
import junit.framework.TestCase;
import org.eclipse.cdt.internal.ui.viewsupport.*;
import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.jface.dialogs.Dialog; import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.jface.viewers.*; import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.swt.widgets.*; import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.TreeItem;
import org.eclipse.ui.PlatformUI; import org.eclipse.ui.PlatformUI;
public class AsyncViewerTest extends TestCase { import org.eclipse.cdt.ui.tests.BaseTestCase;
import org.eclipse.cdt.internal.ui.viewsupport.AsyncTreeContentProvider;
import org.eclipse.cdt.internal.ui.viewsupport.AsyncTreeWorkInProgressNode;
import org.eclipse.cdt.internal.ui.viewsupport.ExtendedTreeViewer;
public class AsyncViewerTest extends BaseTestCase {
private class Node { private class Node {
private String fLabel; private String fLabel;
private Node[] fChildren; private Node[] fChildren;
@ -179,46 +188,60 @@ public class AsyncViewerTest extends TestCase {
}, 200) }, 200)
}, 0); }, 0);
dlg.fViewer.setInput(root); dispatch();
// + a
// + b
dlg.fViewer.setInput(root); runEventQueue(0);
assertEquals(2, countVisibleItems(dlg.fViewer)); assertEquals(2, countVisibleItems(dlg.fViewer));
// expand async with no children // - a
dlg.fViewer.setExpandedState(a, true); dispatch(); // - ...
// + b
dlg.fViewer.setExpandedState(a, true); runEventQueue(0);
assertEquals("...", dlg.fViewer.getTree().getItem(0).getItem(0).getText()); assertEquals("...", dlg.fViewer.getTree().getItem(0).getItem(0).getText());
assertEquals(3, countVisibleItems(dlg.fViewer)); assertEquals(3, countVisibleItems(dlg.fViewer));
Thread.sleep(500); dispatch(); // - a
// + b
runEventQueue(600);
assertEquals(2, countVisibleItems(dlg.fViewer)); assertEquals(2, countVisibleItems(dlg.fViewer));
// reset the viewer
// + a
// + b
dlg.fViewer.setInput(null); dlg.fViewer.setInput(null);
dlg.fViewer.setInput(root); dlg.fViewer.setInput(root); runEventQueue(0);
// expand async with two children // expand async with two children
dlg.fViewer.setExpandedState(b, true); dispatch(); dlg.fViewer.setExpandedState(b, true); runEventQueue(0);
// + a
// - b
// - ...
assertEquals(3, countVisibleItems(dlg.fViewer)); assertEquals(3, countVisibleItems(dlg.fViewer));
assertEquals("...", dlg.fViewer.getTree().getItem(1).getItem(0).getText()); assertEquals("...", dlg.fViewer.getTree().getItem(1).getItem(0).getText());
Thread.sleep(500); dispatch(); // - a
// - b
// - c
// - d
runEventQueue(600);
assertEquals(4, countVisibleItems(dlg.fViewer)); assertEquals(4, countVisibleItems(dlg.fViewer));
// reset the viewer // + a
// + b
dlg.fViewer.setInput(null); dlg.fViewer.setInput(null);
dlg.fViewer.setInput(root); dlg.fViewer.setInput(root); runEventQueue(0);
// wait until children are computed (for the sake of the +-sign) // wait until children are computed (for the sake of the +-sign)
Thread.sleep(700); dispatch(); runEventQueue(800);
assertEquals(2, countVisibleItems(dlg.fViewer));
dlg.fViewer.setExpandedState(a, true); dlg.fViewer.setExpandedState(a, true);
assertEquals(2, countVisibleItems(dlg.fViewer)); assertEquals(2, countVisibleItems(dlg.fViewer));
dlg.fViewer.setExpandedState(b, true); dlg.fViewer.setExpandedState(b, true);
assertEquals(4, countVisibleItems(dlg.fViewer)); assertEquals(4, countVisibleItems(dlg.fViewer));
} }
private void dispatch() throws InterruptedException {
Display d= Display.getCurrent();
while (d.readAndDispatch());
}
public void testRecompute() throws InterruptedException { public void testRecompute() throws InterruptedException {
TestDialog dlg = createTestDialog(true); TestDialog dlg = createTestDialog(true);
Node a,b,c; Node a,b,c;
@ -232,16 +255,16 @@ public class AsyncViewerTest extends TestCase {
}, 150) }, 150)
}, 0); }, 0);
dlg.fViewer.setInput(root); dispatch(); dlg.fViewer.setInput(root); runEventQueue(0);
assertEquals(2, countVisibleItems(dlg.fViewer)); assertEquals(2, countVisibleItems(dlg.fViewer));
dlg.fContentProvider.recompute(); dlg.fContentProvider.recompute();
assertEquals(2, countVisibleItems(dlg.fViewer)); assertEquals(2, countVisibleItems(dlg.fViewer));
dlg.fViewer.setExpandedState(b, true); dlg.fViewer.setExpandedState(b, true);
sleepAndDispatch(10, 16); runEventQueue(200);
assertEquals(4, countVisibleItems(dlg.fViewer)); assertEquals(4, countVisibleItems(dlg.fViewer));
sleepAndDispatch(10, 16); runEventQueue(200);
root.fChildren= new Node[] { root.fChildren= new Node[] {
a= new Node("a1"), a= new Node("a1"),
@ -253,28 +276,22 @@ public class AsyncViewerTest extends TestCase {
}; };
dlg.fContentProvider.recompute(); dlg.fContentProvider.recompute();
assertEquals(3, countVisibleItems(dlg.fViewer)); assertEquals(3, countVisibleItems(dlg.fViewer));
sleepAndDispatch(10, 16); runEventQueue(200);
assertEquals(4, countVisibleItems(dlg.fViewer)); assertEquals(4, countVisibleItems(dlg.fViewer));
dlg.fViewer.setExpandedState(c, true); dlg.fViewer.setExpandedState(c, true);
assertEquals(5, countVisibleItems(dlg.fViewer)); assertEquals(5, countVisibleItems(dlg.fViewer));
sleepAndDispatch(10, 16); runEventQueue(200);
assertEquals(6, countVisibleItems(dlg.fViewer)); assertEquals(6, countVisibleItems(dlg.fViewer));
dlg.fViewer.setSelection(new StructuredSelection(c)); dlg.fViewer.setSelection(new StructuredSelection(c));
dlg.fContentProvider.recompute(); dlg.fContentProvider.recompute();
sleepAndDispatch(10, 16); runEventQueue(200);
assertEquals(5, countVisibleItems(dlg.fViewer)); assertEquals(5, countVisibleItems(dlg.fViewer));
sleepAndDispatch(10, 16); runEventQueue(200);
assertEquals(6, countVisibleItems(dlg.fViewer)); assertEquals(6, countVisibleItems(dlg.fViewer));
assertEquals(1, dlg.fViewer.getTree().getSelectionCount()); assertEquals(1, dlg.fViewer.getTree().getSelectionCount());
assertEquals("c", dlg.fViewer.getTree().getSelection()[0].getText()); assertEquals("c", dlg.fViewer.getTree().getSelection()[0].getText());
dlg.close(); dlg.close();
} }
private void sleepAndDispatch(int sleep, int count) throws InterruptedException {
for (int i = 0; i < count; i++) {
Thread.sleep(sleep); dispatch();
}
}
} }