Bug 505842 - [generic editor] Test failure in HoverTest.testHover

Add more pauses to let event process

Change-Id: I5005c4c8879cf07d2cad0ce11aa5057849ced55e
Signed-off-by: Mickael Istria <mistria@redhat.com>
diff --git a/org.eclipse.ui.genericeditor.tests/src/org/eclipse/ui/genericeditor/tests/HoverTest.java b/org.eclipse.ui.genericeditor.tests/src/org/eclipse/ui/genericeditor/tests/HoverTest.java
index 86f5bae..6d29a39 100644
--- a/org.eclipse.ui.genericeditor.tests/src/org/eclipse/ui/genericeditor/tests/HoverTest.java
+++ b/org.eclipse.ui.genericeditor.tests/src/org/eclipse/ui/genericeditor/tests/HoverTest.java
@@ -96,6 +96,7 @@
 
 	private Object getHoverData() throws Exception {
 		this.editor.selectAndReveal(2, 0);
+		waitAndDispatch();
 		// sending event to trigger hover computation
 		StyledText editorTextWidget = (StyledText) this.editor.getAdapter(Control.class);
 		editorTextWidget.getShell().forceActive();
@@ -111,11 +112,7 @@
 		hoverEvent.doit = true;
 		editorTextWidget.notifyListeners(SWT.MouseHover, hoverEvent);
 		// Events need to be processed for hover listener to work correctly
-		long timeout = 1000; //ms
-		long start = System.currentTimeMillis();
-		while (start + timeout > System.currentTimeMillis()) {
-			Display.getDefault().readAndDispatch();
-		}
+		waitAndDispatch();
 		// retrieving hover content
 		Method getSourceViewerMethod= AbstractTextEditor.class.getDeclaredMethod("getSourceViewer");
 		getSourceViewerMethod.setAccessible(true);
@@ -126,8 +123,16 @@
 		Field informationField = AbstractInformationControlManager.class.getDeclaredField("fInformation");
 		informationField.setAccessible(true);
 		Object hoverData = informationField.get(hover);
-		Thread.sleep(500); // hoverData populated asynchronously
+		waitAndDispatch();
 		return hoverData;
 	}
 
+	private void waitAndDispatch() {
+		long timeout = 1000; //ms
+		long start = System.currentTimeMillis();
+		while (start + timeout > System.currentTimeMillis()) {
+			Display.getDefault().readAndDispatch();
+		}
+	}
+
 }
diff --git a/org.eclipse.ui.genericeditor/src/org/eclipse/ui/internal/genericeditor/ExtensionBasedTextViewerConfiguration.java b/org.eclipse.ui.genericeditor/src/org/eclipse/ui/internal/genericeditor/ExtensionBasedTextViewerConfiguration.java
index 10a89a3..d5b84b5 100644
--- a/org.eclipse.ui.genericeditor/src/org/eclipse/ui/internal/genericeditor/ExtensionBasedTextViewerConfiguration.java
+++ b/org.eclipse.ui.genericeditor/src/org/eclipse/ui/internal/genericeditor/ExtensionBasedTextViewerConfiguration.java
@@ -11,9 +11,10 @@
 package org.eclipse.ui.internal.genericeditor;
 
 import java.util.Arrays;
-import java.util.Iterator;
 import java.util.LinkedHashSet;
+import java.util.LinkedList;
 import java.util.List;
+import java.util.Queue;
 import java.util.Set;
 
 import org.eclipse.core.runtime.Platform;
@@ -58,10 +59,14 @@
 	private Set<IContentType> getContentTypes() {
 		if (this.contentTypes == null) {
 			this.contentTypes = new LinkedHashSet<>();
-			this.contentTypes.addAll(Arrays.asList(Platform.getContentTypeManager().findContentTypesFor(editor.getEditorInput().getName())));
-			Iterator<IContentType> it = this.contentTypes.iterator();
-			while (it.hasNext()) {
-				this.contentTypes.add(it.next().getBaseType());
+			Queue<IContentType> types = new LinkedList<>(Arrays.asList(Platform.getContentTypeManager().findContentTypesFor(editor.getEditorInput().getName())));
+			while (!types.isEmpty()) {
+				IContentType type = types.poll();
+				this.contentTypes.add(type);
+				IContentType parent = type.getBaseType();
+				if (parent != null) {
+					types.add(parent);
+				}
 			}
 		}
 		return this.contentTypes;