Bug 579345 - ImportFeatureProjectsTestCase.testImportMulitpleFeatures
fails on Linux

Changed test to properly report what is actually missing.

Change-Id: Id5d87d88c8b8da052405196cbd1c05ccb569b40d
Reviewed-on: https://git.eclipse.org/r/c/pde/eclipse.pde.ui/+/192083
Tested-by: PDE Bot <pde-bot@eclipse.org>
Reviewed-by: Andrey Loskutov <loskutov@gmx.de>
diff --git a/ui/org.eclipse.pde.ui.tests/src/org/eclipse/pde/ui/tests/imports/ImportFeatureProjectsTestCase.java b/ui/org.eclipse.pde.ui.tests/src/org/eclipse/pde/ui/tests/imports/ImportFeatureProjectsTestCase.java
index 7bedaf5..512f800 100644
--- a/ui/org.eclipse.pde.ui.tests/src/org/eclipse/pde/ui/tests/imports/ImportFeatureProjectsTestCase.java
+++ b/ui/org.eclipse.pde.ui.tests/src/org/eclipse/pde/ui/tests/imports/ImportFeatureProjectsTestCase.java
@@ -13,11 +13,13 @@
  *******************************************************************************/
 package org.eclipse.pde.ui.tests.imports;
 
+import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
 
-import org.eclipse.core.runtime.*;
+import java.util.*;
+import java.util.stream.Collectors;
+import org.eclipse.core.runtime.NullProgressMonitor;
 import org.eclipse.jdt.core.JavaCore;
 import org.eclipse.pde.internal.core.PDECore;
 import org.eclipse.pde.internal.core.ifeature.*;
@@ -59,14 +61,11 @@
 		fProjectName = name;
 	}
 
-	private void importFeature(IFeatureModel[] models, boolean binary) {
+	private void importFeature(IFeatureModel[] models, boolean binary) throws Exception {
 		FeatureImportOperation op = new FeatureImportOperation(models, binary, null, new ReplaceQuery(PDEPlugin.getActiveWorkbenchShell()));
-		try {
-			PDEPlugin.getWorkspace().run(op, new NullProgressMonitor());
-			if (models.length > 0)
-				lookingAtProject(models[0]);
-		} catch (OperationCanceledException | CoreException e) {
-			fail("Feature import failed...");
+		PDEPlugin.getWorkspace().run(op, new NullProgressMonitor());
+		if (models.length > 0) {
+			lookingAtProject(models[0]);
 		}
 	}
 
@@ -77,18 +76,16 @@
 			assertTrue("Verifying feature nature...", hasNature(PDE.FEATURE_NATURE));
 			IFeatureInstallHandler installHandler = element.getFeature().getInstallHandler();
 			boolean shouldHaveJavaNature = installHandler != null ? installHandler.getLibrary() != null : false;
-			assertTrue("Verifying java nature...", hasNature(JavaCore.NATURE_ID) == shouldHaveJavaNature);
+			assertEquals("Verifying java nature...", hasNature(JavaCore.NATURE_ID), shouldHaveJavaNature);
 		}
 	}
 
-	private void verifyFeature(boolean isBinary) {
+	private void verifyFeature(boolean isBinary) throws Exception {
 		IFeatureModel[] imported = PDECore.getDefault().getFeatureModelManager().getWorkspaceModels();
 		for (IFeatureModel element : imported) {
 			lookingAtProject(element);
-			try {
-				assertTrue("Verifing feature is binary...", isBinary == PDECore.BINARY_PROJECT_VALUE.equals(getProject().getPersistentProperty(PDECore.EXTERNAL_PROJECT_PROPERTY)));
-			} catch (CoreException e) {
-			}
+			assertEquals("Verifing feature is binary...", isBinary, PDECore.BINARY_PROJECT_VALUE
+					.equals(getProject().getPersistentProperty(PDECore.EXTERNAL_PROJECT_PROPERTY)));
 		}
 	}
 
@@ -102,10 +99,11 @@
 	}
 
 	@Test
-	public void testImportFeature() {
+	public void testImportFeature() throws Exception {
 		IFeatureModel[] model = PDECore.getDefault().getFeatureModelManager().getModels();
-		if (model.length == 0)
+		if (model.length == 0) {
 			return;
+		}
 		boolean binary = false;
 		importFeature(new IFeatureModel[] {model[0]}, binary);
 		verifyProjectExistence();
@@ -114,10 +112,11 @@
 	}
 
 	@Test
-	public void testImportBinaryFeature() {
+	public void testImportBinaryFeature() throws Exception {
 		IFeatureModel[] model = PDECore.getDefault().getFeatureModelManager().getModels();
-		if (model.length == 0)
+		if (model.length == 0) {
 			return;
+		}
 		boolean binary = true;
 		importFeature(new IFeatureModel[] {model[0]}, binary);
 		verifyProjectExistence();
@@ -126,24 +125,36 @@
 	}
 
 	@Test
-	public void testImportMulitpleFeatures() {
+	public void testImportMulitpleFeatures() throws Exception {
 		IFeatureModel[] models = PDECore.getDefault().getFeatureModelManager().getModels();
-		if (models.length == 0)
+		if (models.length == 0) {
 			return;
+		}
 		boolean binary = false;
 		importFeature(models, binary);
 		verifyProjectExistence();
 		verifyNatures();
 		verifyFeature(binary);
 		IFeatureModel[] imported = PDECore.getDefault().getFeatureModelManager().getWorkspaceModels();
-		assertTrue("Verifing number models imported...", imported.length == models.length);
+		if (imported.length != models.length) {
+			Set<String> expected = toFeatureIds(models);
+			Set<String> actual = toFeatureIds(imported);
+			assertEquals("Imported models differ from expected", expected.toString(), actual.toString());
+		}
+		assertEquals("Verifing number models imported...", models.length, imported.length);
+	}
+
+	private static TreeSet<String> toFeatureIds(IFeatureModel[] models) {
+		return new TreeSet<>(Arrays.asList(models).stream().map(m -> m.getFeature())
+				.filter(x -> x != null).map(f -> f.getId()).collect(Collectors.toSet()));
 	}
 
 	@Test
-	public void testFeaturePlugins() {
+	public void testFeaturePlugins() throws Exception {
 		IFeatureModel[] model = PDECore.getDefault().getFeatureModelManager().getModels();
-		if (model.length == 0)
+		if (model.length == 0) {
 			return;
+		}
 		boolean binary = false;
 		importFeature(new IFeatureModel[] {model[0]}, binary);
 		verifyProjectExistence();
@@ -155,14 +166,16 @@
 		if (plugins != null) {
 			IFeaturePlugin[] importedFeaturePlugins = getFeaturePluginsFrom(model[0].getFeature().getId(), imported);
 			assertNotNull("Verifying feature plugins exist...", importedFeaturePlugins);
-			assertTrue("Verifying total equal feature plugins...", plugins.length == importedFeaturePlugins.length);
+			assertEquals("Verifying total equal feature plugins...", plugins.length, importedFeaturePlugins.length);
 		}
 	}
 
 	private IFeaturePlugin[] getFeaturePluginsFrom(String id, IFeatureModel[] imported) {
-		for (IFeatureModel element : imported)
-			if (element.getFeature().getId().equals(id))
+		for (IFeatureModel element : imported) {
+			if (element.getFeature().getId().equals(id)) {
 				return imported[0].getFeature().getPlugins();
+			}
+		}
 		return null;
 	}