Bug 538956: [JUnit 5] Incorrect JUnit 5 test results without JUnit 4 on
the classpath

Change-Id: I2401e7861756e3b3497fc3679348e35722e75782
diff --git a/org.eclipse.jdt.junit5.runtime/src/org/eclipse/jdt/internal/junit5/runner/JUnit5TestListener.java b/org.eclipse.jdt.junit5.runtime/src/org/eclipse/jdt/internal/junit5/runner/JUnit5TestListener.java
index 1254ade..b6c9b61 100644
--- a/org.eclipse.jdt.junit5.runtime/src/org/eclipse/jdt/internal/junit5/runner/JUnit5TestListener.java
+++ b/org.eclipse.jdt.junit5.runtime/src/org/eclipse/jdt/internal/junit5/runner/JUnit5TestListener.java
@@ -110,7 +110,9 @@
 				return null;
 			}
 			return new FailedComparison(expected.getStringRepresentation(), actual.getStringRepresentation());
-		} else if (exception instanceof MultipleFailuresError) {
+		}
+
+		if (exception instanceof MultipleFailuresError) {
 			String expectedStr= ""; //$NON-NLS-1$
 			String actualStr= ""; //$NON-NLS-1$
 			String delimiter= "\n\n"; //$NON-NLS-1$
@@ -130,13 +132,21 @@
 				}
 			}
 			return new FailedComparison(expectedStr, actualStr);
-		} else if (exception instanceof junit.framework.ComparisonFailure) {
-			junit.framework.ComparisonFailure comparisonFailure= (junit.framework.ComparisonFailure) exception;
-			return new FailedComparison(comparisonFailure.getExpected(), comparisonFailure.getActual());
-		} else if (exception instanceof org.junit.ComparisonFailure) {
-			org.junit.ComparisonFailure comparisonFailure= (org.junit.ComparisonFailure) exception;
-			return new FailedComparison(comparisonFailure.getExpected(), comparisonFailure.getActual());
 		}
+
+		// Avoid reference to ComparisonFailure initially to avoid NoClassDefFoundError for ComparisonFailure when junit.jar is not on the build path 
+		String classname= exception.getClass().getName();
+		if (classname.equals("junit.framework.ComparisonFailure") || classname.equals("org.junit.ComparisonFailure")) { //$NON-NLS-1$ //$NON-NLS-2$
+			if (exception instanceof junit.framework.ComparisonFailure) {
+				junit.framework.ComparisonFailure comparisonFailure= (junit.framework.ComparisonFailure) exception;
+				return new FailedComparison(comparisonFailure.getExpected(), comparisonFailure.getActual());
+			}
+			if (exception instanceof org.junit.ComparisonFailure) {
+				org.junit.ComparisonFailure comparisonFailure= (org.junit.ComparisonFailure) exception;
+				return new FailedComparison(comparisonFailure.getExpected(), comparisonFailure.getActual());
+			}
+		}
+
 		return null;
 	}