Repository: assertj/assertj (Java)

Issue:
Improve describe error readability of ElementsShouldSatisfy
#### Summary
The `error: <description>` from `ElementsShouldSatisfy` should be on a new line to improve readability of objects with long `toString()`.

#### Example

Consider a complex Object with many fields in its `toString`:

```java
public class ObjectWithManyFields {

    private String field1;
    private String field2;
    // ... plus many more fields

    // getter, setters

    @Override
    public String toString() {
        return "ObjectWithManyFields{" +
                "field1='" + field1 + '\'' +
                ", field2='" + field2 + '\'' +
                // ... plus many more fields
                '}';
    }

}

```

Using `allSatisfy`
```java
@Test
void someTest() {
    List<ObjectWithManyFields> objectsWithManyFields = new ArrayList<>();

    ObjectWithManyFields objectWithManyFields = new ObjectWithManyFields();
    objectWithManyFields.setField1("my field1");
    objectsWithManyFields.add(objectWithManyFields);

    assertThat(objectsWithManyFields).allSatisfy(o -> {
        assertThat(o.getField1()).as("Field 1").isEqualTo("some value");
        assertThat(o.getField2()).as("Field 2").isEqualTo("some other value");
        // etc.
    });
}
```

Yields this
```java
java.lang.AssertionError: 
Expecting all elements of:
  <[ObjectWithManyFields{field1='my field1', field2='null', field3='null', field4='null', field5='null', field6='null', field7='null', field8='null', field9='null', field10='null', field11='null', field12='null', field13='null', field14='null', field15='null', field16='null', field17='null', field18='null', field19='null', field20='null', field21='null', field22='null', field23='null', field24='null', field25='null'}]>
to satisfy given requirements, but these elements did not:

  <ObjectWithManyFields{field1='my field1', field2='null', field3='null', field4='null', field5='null', field6='null', field7='null', field8='null', field9='null', field10='null', field11='null', field12='null', field13='null', field14='null', field15='null', field16='null', field17='null', field18='null', field19='null', field20='null', field21='null', field22='null', field23='null', field24='null', field25='null'}> error: [Field 1] 
Expecting:
 <"my field1">
to be equal to:
 <"some value">
but was not.
```

Now when I first came across this, right away I was unable to determine which assertion of my `Consumer` failed from my `as()` descriptions. I thought it was completely omitted. It was only when I scrolled right that I found the error.

It would be much better if the error description was on a new line after the toString representation of the object that failed the `assertAllSatisfy`.

Like this:

```
java.lang.AssertionError: 
Expecting all elements of:
  <[ObjectWithManyFields{field1='my field1', field2='null', field3='null', field4='null', field5='null', field6='null', field7='null', field8='null', field9='null', field10='null', field11='null', field12='null', field13='null', field14='null', field15='null', field16='null', field17='null', field18='null', field19='null', field20='null', field21='null', field22='null', field23='null', field24='null', field25='null'}]>
to satisfy given requirements, but these elements did not:

  <ObjectWithManyFields{field1='my field1', field2='null', field3='null', field4='null', field5='null', field6='null', field7='null', field8='null', field9='null', field10='null', field11='null', field12='null', field13='null', field14='null', field15='null', field16='null', field17='null', field18='null', field19='null', field20='null', field21='null', field22='null', field23='null', field24='null', field25='null'}>
error: [Field 1] 
Expecting:
 <"my field1">
to be equal to:
 <"some value">
but was not.
```

I have the change ready and can submit a PR if OK'ed.



Hints:
Fair enough, go for the PR, thanks!

Patch:
diff --git a/src/main/java/org/assertj/core/error/ElementsShouldSatisfy.java b/src/main/java/org/assertj/core/error/ElementsShouldSatisfy.java
--- a/src/main/java/org/assertj/core/error/ElementsShouldSatisfy.java
+++ b/src/main/java/org/assertj/core/error/ElementsShouldSatisfy.java
@@ -68,7 +68,7 @@ public UnsatisfiedRequirement(Object elementNotSatisfyingRequirements, String er
     }
 
     public String describe(AssertionInfo info) {
-      return format("  <%s> error: %s", info.representation().toStringOf(elementNotSatisfyingRequirements), errorMessage);
+      return format("  <%s>%nerror: %s", info.representation().toStringOf(elementNotSatisfyingRequirements), errorMessage);
     }
 
     @Override
diff --git a/src/main/java/org/assertj/core/error/ZippedElementsShouldSatisfy.java b/src/main/java/org/assertj/core/error/ZippedElementsShouldSatisfy.java
--- a/src/main/java/org/assertj/core/error/ZippedElementsShouldSatisfy.java
+++ b/src/main/java/org/assertj/core/error/ZippedElementsShouldSatisfy.java
@@ -60,7 +60,7 @@ public ZipSatisfyError(Object actualElement, Object otherElement, String error)
     }
 
     public static String describe(AssertionInfo info, ZipSatisfyError satisfyError) {
-      return String.format("(%s, %s) error: %s",
+      return String.format("(%s, %s)%nerror: %s",
                            info.representation().toStringOf(satisfyError.actualElement),
                            info.representation().toStringOf(satisfyError.otherElement),
                            satisfyError.error);
@@ -68,7 +68,7 @@ public static String describe(AssertionInfo info, ZipSatisfyError satisfyError)
 
     @Override
     public String toString() {
-      return String.format("(%s, %s) error: %s", actualElement, otherElement, error);
+      return String.format("(%s, %s)%nerror: %s", actualElement, otherElement, error);
     }
 
   }


Test patch:
diff --git a/src/test/java/org/assertj/core/error/ElementsShouldSatisfy_create_Test.java b/src/test/java/org/assertj/core/error/ElementsShouldSatisfy_create_Test.java
--- a/src/test/java/org/assertj/core/error/ElementsShouldSatisfy_create_Test.java
+++ b/src/test/java/org/assertj/core/error/ElementsShouldSatisfy_create_Test.java
@@ -50,8 +50,10 @@ void should_create_error_message_all() {
                                    "Expecting all elements of:%n" +
                                    "  <[\"Leia\", \"Luke\", \"Yoda\"]>%n" +
                                    "to satisfy given requirements, but these elements did not:%n%n" +
-                                   "  <\"Leia\"> error: Leia mistake.%n%n" +
-                                   "  <\"Luke\"> error: Luke mistake."));
+                                   "  <\"Leia\">%n" +
+                                   "error: Leia mistake.%n%n" +
+                                   "  <\"Luke\">%n" +
+                                   "error: Luke mistake."));
   }
 
   @Test
@@ -67,8 +69,10 @@ void should_create_error_message_all_and_escape_percent_correctly() {
                                    "Expecting all elements of:%n" +
                                    "  <[\"Leia%%s\", \"Luke\", \"Yoda\"]>%n" +
                                    "to satisfy given requirements, but these elements did not:%n%n" +
-                                   "  <\"Leia%%s\"> error: Leia mistake.%n%n" +
-                                   "  <\"Luke\"> error: Luke mistake."));
+                                   "  <\"Leia%%s\">%n" +
+                                   "error: Leia mistake.%n%n" +
+                                   "  <\"Luke\">%n" +
+                                   "error: Luke mistake."));
   }
 
   @Test
@@ -84,8 +88,10 @@ void should_create_error_message_any() {
                                    "Expecting any element of:%n" +
                                    "  <[\"Luke\", \"Yoda\"]>%n" +
                                    "to satisfy the given assertions requirements but none did:%n%n" +
-                                   "  <\"Leia\"> error: Leia mistake.%n%n" +
-                                   "  <\"Luke\"> error: Luke mistake."));
+                                   "  <\"Leia\">%n" +
+                                   "error: Leia mistake.%n%n" +
+                                   "  <\"Luke\">%n" +
+                                   "error: Luke mistake."));
   }
 
   @Test
@@ -101,7 +107,9 @@ void should_create_error_message_any_and_escape_percent_correctly() {
                                    "Expecting any element of:%n" +
                                    "  <[\"Lu%%dke\", \"Yoda\"]>%n" +
                                    "to satisfy the given assertions requirements but none did:%n%n" +
-                                   "  <\"Leia\"> error: Leia mistake.%n%n" +
-                                   "  <\"Luke\"> error: Luke mistake."));
+                                   "  <\"Leia\">%n" +
+                                   "error: Leia mistake.%n%n" +
+                                   "  <\"Luke\">%n" +
+                                   "error: Luke mistake."));
   }
 }
diff --git a/src/test/java/org/assertj/core/error/ElementsShouldZipSatisfy_create_Test.java b/src/test/java/org/assertj/core/error/ElementsShouldZipSatisfy_create_Test.java
--- a/src/test/java/org/assertj/core/error/ElementsShouldZipSatisfy_create_Test.java
+++ b/src/test/java/org/assertj/core/error/ElementsShouldZipSatisfy_create_Test.java
@@ -53,8 +53,10 @@ void should_create_error_message() {
                                    "and:%n" +
                                    "  <[\"LUKE\", \"YODA\"]>%n" +
                                    "to satisfy given requirements but these zipped elements did not:" +
-                                   "%n%n- (\"Luke\", \"LUKE\") error: error luke" +
-                                   "%n%n- (\"Yo-da\", \"YODA\") error: error yoda"));
+                                   "%n%n- (\"Luke\", \"LUKE\")%n" +
+                                   "error: error luke" +
+                                   "%n%n- (\"Yo-da\", \"YODA\")%n" +
+                                   "error: error yoda"));
   }
 
   @Test
@@ -75,7 +77,9 @@ void should_create_error_message_and_escape_percent_correctly() {
                                    "and:%n" +
                                    "  <[\"LU%%dKE\", \"YODA\"]>%n" +
                                    "to satisfy given requirements but these zipped elements did not:" +
-                                   "%n%n- (\"Luke\", \"LU%%dKE\") error: error luke" +
-                                   "%n%n- (\"Yo-da\", \"YODA\") error: error yoda"));
+                                   "%n%n- (\"Luke\", \"LU%%dKE\")%n" +
+                                   "error: error luke" +
+                                   "%n%n- (\"Yo-da\", \"YODA\")%n" +
+                                   "error: error yoda"));
   }
 }