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.NullProgressMonitor;
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.model.CModelException;
@ -250,4 +251,12 @@ public class BaseTestCase extends TestCase {
} while (System.currentTimeMillis() < endTime);
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.NullProgressMonitor;
import org.eclipse.jface.text.ITextSelection;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Tree;
import org.eclipse.swt.widgets.TreeItem;
import org.eclipse.ui.IWorkbenchPage;
@ -72,14 +71,6 @@ public class CallHierarchyBaseTest extends BaseTestCase {
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) {
TreeItem root= null;
try {

View file

@ -11,16 +11,25 @@
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.jface.dialogs.Dialog;
import org.eclipse.jface.viewers.*;
import org.eclipse.swt.widgets.*;
import org.eclipse.jface.viewers.LabelProvider;
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;
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 String fLabel;
private Node[] fChildren;
@ -179,46 +188,60 @@ public class AsyncViewerTest extends TestCase {
}, 200)
}, 0);
dlg.fViewer.setInput(root); dispatch();
// + a
// + b
dlg.fViewer.setInput(root); runEventQueue(0);
assertEquals(2, countVisibleItems(dlg.fViewer));
// expand async with no children
dlg.fViewer.setExpandedState(a, true); dispatch();
// - a
// - ...
// + b
dlg.fViewer.setExpandedState(a, true); runEventQueue(0);
assertEquals("...", dlg.fViewer.getTree().getItem(0).getItem(0).getText());
assertEquals(3, countVisibleItems(dlg.fViewer));
Thread.sleep(500); dispatch();
// - a
// + b
runEventQueue(600);
assertEquals(2, countVisibleItems(dlg.fViewer));
// reset the viewer
// + a
// + b
dlg.fViewer.setInput(null);
dlg.fViewer.setInput(root);
dlg.fViewer.setInput(root); runEventQueue(0);
// 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("...", dlg.fViewer.getTree().getItem(1).getItem(0).getText());
Thread.sleep(500); dispatch();
// - a
// - b
// - c
// - d
runEventQueue(600);
assertEquals(4, countVisibleItems(dlg.fViewer));
// reset the viewer
// + a
// + b
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)
Thread.sleep(700); dispatch();
runEventQueue(800);
assertEquals(2, countVisibleItems(dlg.fViewer));
dlg.fViewer.setExpandedState(a, true);
assertEquals(2, countVisibleItems(dlg.fViewer));
dlg.fViewer.setExpandedState(b, true);
assertEquals(4, countVisibleItems(dlg.fViewer));
}
private void dispatch() throws InterruptedException {
Display d= Display.getCurrent();
while (d.readAndDispatch());
}
public void testRecompute() throws InterruptedException {
TestDialog dlg = createTestDialog(true);
Node a,b,c;
@ -232,16 +255,16 @@ public class AsyncViewerTest extends TestCase {
}, 150)
}, 0);
dlg.fViewer.setInput(root); dispatch();
dlg.fViewer.setInput(root); runEventQueue(0);
assertEquals(2, countVisibleItems(dlg.fViewer));
dlg.fContentProvider.recompute();
assertEquals(2, countVisibleItems(dlg.fViewer));
dlg.fViewer.setExpandedState(b, true);
sleepAndDispatch(10, 16);
runEventQueue(200);
assertEquals(4, countVisibleItems(dlg.fViewer));
sleepAndDispatch(10, 16);
runEventQueue(200);
root.fChildren= new Node[] {
a= new Node("a1"),
@ -253,28 +276,22 @@ public class AsyncViewerTest extends TestCase {
};
dlg.fContentProvider.recompute();
assertEquals(3, countVisibleItems(dlg.fViewer));
sleepAndDispatch(10, 16);
runEventQueue(200);
assertEquals(4, countVisibleItems(dlg.fViewer));
dlg.fViewer.setExpandedState(c, true);
assertEquals(5, countVisibleItems(dlg.fViewer));
sleepAndDispatch(10, 16);
runEventQueue(200);
assertEquals(6, countVisibleItems(dlg.fViewer));
dlg.fViewer.setSelection(new StructuredSelection(c));
dlg.fContentProvider.recompute();
sleepAndDispatch(10, 16);
runEventQueue(200);
assertEquals(5, countVisibleItems(dlg.fViewer));
sleepAndDispatch(10, 16);
runEventQueue(200);
assertEquals(6, countVisibleItems(dlg.fViewer));
assertEquals(1, dlg.fViewer.getTree().getSelectionCount());
assertEquals("c", dlg.fViewer.getTree().getSelection()[0].getText());
dlg.close();
}
private void sleepAndDispatch(int sleep, int count) throws InterruptedException {
for (int i = 0; i < count; i++) {
Thread.sleep(sleep); dispatch();
}
}
}