Skip to content

Commit f308d95

Browse files
Fix StandardRepresentation regression for unquoted strings (#3735)
1 parent e5959f4 commit f308d95

4 files changed

Lines changed: 47 additions & 24 deletions

File tree

assertj-core/src/main/java/org/assertj/core/error/BasicErrorMessageFactory.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323

2424
import java.util.Arrays;
2525
import java.util.Objects;
26+
2627
import org.assertj.core.description.Description;
2728
import org.assertj.core.presentation.Representation;
2829
import org.assertj.core.util.VisibleForTesting;

assertj-core/src/main/java/org/assertj/core/presentation/StandardRepresentation.java

Lines changed: 32 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -12,16 +12,18 @@
1212
*/
1313
package org.assertj.core.presentation;
1414

15-
import org.assertj.core.configuration.Configuration;
16-
import org.assertj.core.configuration.ConfigurationProvider;
17-
import org.assertj.core.data.MapEntry;
18-
import org.assertj.core.groups.Tuple;
19-
import org.assertj.core.internal.ComparatorBasedComparisonStrategy;
20-
import org.assertj.core.util.Closeables;
21-
import org.assertj.core.util.VisibleForTesting;
22-
import org.assertj.core.util.diff.ChangeDelta;
23-
import org.assertj.core.util.diff.DeleteDelta;
24-
import org.assertj.core.util.diff.InsertDelta;
15+
import static java.lang.Integer.toHexString;
16+
import static java.util.stream.Collectors.toList;
17+
import static org.assertj.core.util.Arrays.isArray;
18+
import static org.assertj.core.util.Arrays.isArrayTypePrimitive;
19+
import static org.assertj.core.util.Arrays.isObjectArray;
20+
import static org.assertj.core.util.Arrays.notAnArrayOfPrimitives;
21+
import static org.assertj.core.util.DateUtil.formatAsDatetime;
22+
import static org.assertj.core.util.DateUtil.formatAsDatetimeWithMs;
23+
import static org.assertj.core.util.Preconditions.checkArgument;
24+
import static org.assertj.core.util.Strings.concat;
25+
import static org.assertj.core.util.Strings.quote;
26+
import static org.assertj.core.util.Throwables.getStackTrace;
2527

2628
import java.io.File;
2729
import java.io.PrintWriter;
@@ -61,18 +63,16 @@
6163
import java.util.concurrent.atomic.LongAdder;
6264
import java.util.function.Function;
6365

64-
import static java.lang.Integer.toHexString;
65-
import static java.util.stream.Collectors.toList;
66-
import static org.assertj.core.util.Arrays.isArray;
67-
import static org.assertj.core.util.Arrays.isArrayTypePrimitive;
68-
import static org.assertj.core.util.Arrays.isObjectArray;
69-
import static org.assertj.core.util.Arrays.notAnArrayOfPrimitives;
70-
import static org.assertj.core.util.DateUtil.formatAsDatetime;
71-
import static org.assertj.core.util.DateUtil.formatAsDatetimeWithMs;
72-
import static org.assertj.core.util.Preconditions.checkArgument;
73-
import static org.assertj.core.util.Strings.concat;
74-
import static org.assertj.core.util.Strings.quote;
75-
import static org.assertj.core.util.Throwables.getStackTrace;
66+
import org.assertj.core.configuration.Configuration;
67+
import org.assertj.core.configuration.ConfigurationProvider;
68+
import org.assertj.core.data.MapEntry;
69+
import org.assertj.core.groups.Tuple;
70+
import org.assertj.core.internal.ComparatorBasedComparisonStrategy;
71+
import org.assertj.core.util.Closeables;
72+
import org.assertj.core.util.VisibleForTesting;
73+
import org.assertj.core.util.diff.ChangeDelta;
74+
import org.assertj.core.util.diff.DeleteDelta;
75+
import org.assertj.core.util.diff.InsertDelta;
7676

7777
/**
7878
* Standard java object representation.
@@ -234,6 +234,7 @@ public String toStringOf(Object object) {
234234
if (object instanceof AtomicReferenceFieldUpdater) return AtomicReferenceFieldUpdater.class.getSimpleName();
235235
if (object instanceof File) return toStringOf((File) object);
236236
if (object instanceof Path) return fallbackToStringOf(object);
237+
if (isUnquotedString(object)) return toUnquotedStringOf(object);
237238
if (object instanceof String) return toStringOf((String) object);
238239
if (object instanceof CharSequence) return toStringOf((CharSequence) object);
239240
if (object instanceof Character) return toStringOf((Character) object);
@@ -262,6 +263,11 @@ public String toStringOf(Object object) {
262263
return fallbackToStringOf(object);
263264
}
264265

266+
private static boolean isUnquotedString(Object object) {
267+
String className = object.getClass().getName();
268+
return className.contains("org.assertj.core") && className.contains("UnquotedString");
269+
}
270+
265271
private static boolean isInstanceOfNotOverridingToString(Object object, Class<?> type) {
266272
return type.isInstance(object) && !hasOverriddenToStringInSubclassOf(object.getClass(), type);
267273
}
@@ -404,6 +410,10 @@ protected String toStringOf(String s) {
404410
return concatWithDoubleQuotes(s);
405411
}
406412

413+
protected String toUnquotedStringOf(Object s) {
414+
return s.toString();
415+
}
416+
407417
protected String toStringOf(CharSequence s) {
408418
return concatWithDoubleQuotes(s);
409419
}

assertj-core/src/test/java/org/assertj/core/error/BasicErrorMessageFactory_unquotedString_Test.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414

1515
import static org.assertj.core.api.BDDAssertions.then;
1616
import static org.assertj.core.error.BasicErrorMessageFactory.unquotedString;
17+
import static org.assertj.core.presentation.StandardRepresentation.STANDARD_REPRESENTATION;
1718

1819
import org.junit.jupiter.api.Test;
1920

@@ -26,4 +27,15 @@ class BasicErrorMessageFactory_unquotedString_Test {
2627
void should_implement_toString() {
2728
then(unquotedString("some value")).hasToString("some value");
2829
}
30+
31+
@Test
32+
void StandardRepresentation_should_not_quote_unquoted_String() {
33+
// GIVEN
34+
CharSequence unquotedString = unquotedString("Hello");
35+
// WHEN
36+
String unquotedStringStandardRepresentation = STANDARD_REPRESENTATION.toStringOf(unquotedString);
37+
// THEN
38+
then(unquotedStringStandardRepresentation).isEqualTo("Hello");
39+
}
40+
2941
}

assertj-tests/assertj-integration-tests/assertj-core-tests/src/test/java/org/assertj/tests/core/presentation/StandardRepresentation_toStringOf_Test.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -109,9 +109,9 @@ void should_quote_CharSequence_implementation() {
109109
// GIVEN
110110
CharSequence charSequence = new StringBuilder("Hello");
111111
// WHEN
112-
String emptyStringStandardRepresentation = STANDARD_REPRESENTATION.toStringOf(charSequence);
112+
String charSequenceStandardRepresentation = STANDARD_REPRESENTATION.toStringOf(charSequence);
113113
// THEN
114-
then(emptyStringStandardRepresentation).isEqualTo("\"Hello\"");
114+
then(charSequenceStandardRepresentation).isEqualTo("\"Hello\"");
115115
}
116116

117117
@Test

0 commit comments

Comments
 (0)