Merge pull request #812 from juherr/issue-784

Fix issue #784: Duplicate error messages
diff --git a/src/main/java/org/testng/asserts/SoftAssert.java b/src/main/java/org/testng/asserts/SoftAssert.java
index 95dad5f..845bdea 100644
--- a/src/main/java/org/testng/asserts/SoftAssert.java
+++ b/src/main/java/org/testng/asserts/SoftAssert.java
@@ -11,7 +11,7 @@
  */
 public class SoftAssert extends Assertion {
   // LinkedHashMap to preserve the order
-  private Map<AssertionError, IAssert<?>> m_errors = Maps.newLinkedHashMap();
+  private final Map<AssertionError, IAssert<?>> m_errors = Maps.newLinkedHashMap();
 
   @Override
   protected void doAssert(IAssert<?> a) {
@@ -28,21 +28,16 @@
   }
 
   public void assertAll() {
-    if (! m_errors.isEmpty()) {
+    if (!m_errors.isEmpty()) {
       StringBuilder sb = new StringBuilder("The following asserts failed:");
       boolean first = true;
       for (Map.Entry<AssertionError, IAssert<?>> ae : m_errors.entrySet()) {
         if (first) {
           first = false;
         } else {
-          sb.append(", ");
+          sb.append(",");
         }
         sb.append("\n\t");
-        final String message = ae.getValue().getMessage();
-        if (message != null) {
-          sb.append(message).append("\t");
-        }
-        //noinspection ThrowableResultOfMethodCallIgnored
         sb.append(ae.getKey().getMessage());
       }
       throw new AssertionError(sb.toString());
diff --git a/src/test/java/test/assertion/SoftAssertTest.java b/src/test/java/test/assertion/SoftAssertTest.java
index 66e850c..2aebaed 100644
--- a/src/test/java/test/assertion/SoftAssertTest.java
+++ b/src/test/java/test/assertion/SoftAssertTest.java
@@ -33,15 +33,18 @@
 
   @Test
   public void testAssertAllCount() throws Exception {
-    final SoftAssert sa = new SoftAssert();
+    String message = "My message";
+    SoftAssert sa = new SoftAssert();
     sa.assertTrue(true);
-    sa.assertTrue(false);
+    sa.assertTrue(false, message);
     try {
       sa.assertAll();
       Assert.fail("Exception expected");
     } catch (AssertionError e) {
-      final String message = e.getMessage();
-      Assert.assertEquals(message.split("\r?\n").length, 2, message);
+      String[] lines = e.getMessage().split("\r?\n");
+      Assert.assertEquals(lines.length, 2);
+      lines[1] = lines[1].replaceFirst(message, "");
+      Assert.assertFalse(lines[1].contains(message));
     }
   }
 }