From ca874fe95acffa684b09730c9619c333afb92f47 Mon Sep 17 00:00:00 2001 From: Markus Schorn Date: Tue, 26 Sep 2006 10:00:10 +0000 Subject: [PATCH] Fix for failing test 'testAsyncPopulation' --- .../eclipse/cdt/ui/tests/BaseTestCase.java | 9 ++ .../callhierarchy/CallHierarchyBaseTest.java | 9 -- .../ui/tests/viewsupport/AsyncViewerTest.java | 87 +++++++++++-------- 3 files changed, 61 insertions(+), 44 deletions(-) diff --git a/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/BaseTestCase.java b/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/BaseTestCase.java index 9b442e38ae2..95a1610be01 100644 --- a/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/BaseTestCase.java +++ b/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/BaseTestCase.java @@ -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); + } } diff --git a/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/callhierarchy/CallHierarchyBaseTest.java b/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/callhierarchy/CallHierarchyBaseTest.java index 7de0e9fc0d5..ee1999b22dd 100644 --- a/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/callhierarchy/CallHierarchyBaseTest.java +++ b/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/callhierarchy/CallHierarchyBaseTest.java @@ -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 { diff --git a/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/viewsupport/AsyncViewerTest.java b/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/viewsupport/AsyncViewerTest.java index 850f31dd250..17db537c39a 100644 --- a/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/viewsupport/AsyncViewerTest.java +++ b/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/viewsupport/AsyncViewerTest.java @@ -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(); - } - } }