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:
parent
ccf853cd34
commit
ca874fe95a
3 changed files with 61 additions and 44 deletions
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue