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.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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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 {
|
||||||
|
|
|
@ -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();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue