Skip to content

Commit

Permalink
Polish contribution
Browse files Browse the repository at this point in the history
See #3264
  • Loading branch information
sbrannen committed Apr 24, 2023
1 parent 7b2688c commit 7457144
Show file tree
Hide file tree
Showing 4 changed files with 20 additions and 17 deletions.
Expand Up @@ -52,9 +52,12 @@ repository on GitHub.

==== Bug Fixes

* The `{displayName}` placeholder of `@ParameterizedTest` is no longer parsed during the
evaluation of the `MessageFormat`, now `@DisplayName` and Kotlin method names can contain
single apostrophes and `MessageFormat` elements, such as `{data}`.
* The `{displayName}` placeholder for `@ParameterizedTest` invocation names is no longer
parsed using `java.text.MessageFormat`. Consequently, any text in the display name of
the `@ParameterizedTest` method will be included unmodified in the invocation display
name. For example, Kotlin method names and custom display names configured via
`@DisplayName` can now contain apostrophes (`'`) as well as text resembling
`MessageFormat` elements such as `{0}` or `{data}`.

==== Deprecations and Breaking Changes

Expand Down
Expand Up @@ -31,7 +31,7 @@
class ParameterizedTestNameFormatter {

private static final char ELLIPSIS = '\u2026';
private static final String DISPLAY_NAME_TEMPORARY_PLACEHOLDER = "__DISPLAY_NAME__";
private static final String TEMPORARY_DISPLAY_NAME_PLACEHOLDER = "~~~JUNIT_DISPLAY_NAME~~~";

private final String pattern;
private final String displayName;
Expand Down Expand Up @@ -63,7 +63,7 @@ private String formatSafely(int invocationIndex, Object[] arguments) {
MessageFormat format = new MessageFormat(pattern);
Object[] humanReadableArguments = makeReadable(format, namedArguments);
String formatted = format.format(humanReadableArguments);
return formatted.replace(DISPLAY_NAME_TEMPORARY_PLACEHOLDER, this.displayName);
return formatted.replace(TEMPORARY_DISPLAY_NAME_PLACEHOLDER, this.displayName);
}

private Object[] extractNamedArguments(Object[] arguments) {
Expand All @@ -74,7 +74,7 @@ private Object[] extractNamedArguments(Object[] arguments) {

private String prepareMessageFormatPattern(int invocationIndex, Object[] arguments) {
String result = pattern//
.replace(DISPLAY_NAME_PLACEHOLDER, DISPLAY_NAME_TEMPORARY_PLACEHOLDER)//
.replace(DISPLAY_NAME_PLACEHOLDER, TEMPORARY_DISPLAY_NAME_PLACEHOLDER)//
.replace(INDEX_PLACEHOLDER, String.valueOf(invocationIndex));

if (result.contains(ARGUMENTS_WITH_NAMES_PLACEHOLDER)) {
Expand Down
Expand Up @@ -61,7 +61,7 @@ void formatsDisplayName() {
}

@Test
void formatsDisplayNameWithApostrophe() {
void formatsDisplayNameContainingApostrophe() {
String displayName = "display'Zero";
var formatter = formatter(DISPLAY_NAME_PLACEHOLDER, "display'Zero");

Expand Down
Expand Up @@ -16,7 +16,7 @@ class ParameterizedTestNameFormatterIntegrationTests {

@ValueSource(strings = ["foo", "bar"])
@ParameterizedTest
fun `implicit'Name`(param: String, info: TestInfo) {
fun `defaultDisplayName`(param: String, info: TestInfo) {
if (param.equals("foo")) {
assertEquals("[1] foo", info.displayName)
} else {
Expand All @@ -26,7 +26,7 @@ class ParameterizedTestNameFormatterIntegrationTests {

@ValueSource(strings = ["foo", "bar"])
@ParameterizedTest(name = "{0}")
fun `zero'Only`(param: String, info: TestInfo) {
fun `1st argument`(param: String, info: TestInfo) {
if (param.equals("foo")) {
assertEquals("foo", info.displayName)
} else {
Expand All @@ -36,27 +36,27 @@ class ParameterizedTestNameFormatterIntegrationTests {

@ValueSource(strings = ["foo", "bar"])
@ParameterizedTest(name = "{displayName}")
fun `displayName'Only`(param: String, info: TestInfo) {
assertEquals("displayName'Only(String, TestInfo)", info.displayName)
fun `displayNamePlaceholder - it's an {enigma} '{0}'`(@Suppress("UNUSED_PARAMETER") param: String, info: TestInfo) {
assertEquals("displayNamePlaceholder - it's an {enigma} '{0}'(String, TestInfo)", info.displayName)
}

@ValueSource(strings = ["foo", "bar"])
@ParameterizedTest(name = "{displayName} - {0}")
fun `displayName'Zero`(param: String, info: TestInfo) {
fun `displayName and 1st 'argument'`(param: String, info: TestInfo) {
if (param.equals("foo")) {
assertEquals("displayName'Zero(String, TestInfo) - foo", info.displayName)
assertEquals("displayName and 1st 'argument'(String, TestInfo) - foo", info.displayName)
} else {
assertEquals("displayName'Zero(String, TestInfo) - bar", info.displayName)
assertEquals("displayName and 1st 'argument'(String, TestInfo) - bar", info.displayName)
}
}

@ValueSource(strings = ["foo", "bar"])
@ParameterizedTest(name = "{0} - {displayName}")
fun `zero'DisplayName`(param: String, info: TestInfo) {
fun `1st 'argument' and displayName`(param: String, info: TestInfo) {
if (param.equals("foo")) {
assertEquals("foo - zero'DisplayName(String, TestInfo)", info.displayName)
assertEquals("foo - 1st 'argument' and displayName(String, TestInfo)", info.displayName)
} else {
assertEquals("bar - zero'DisplayName(String, TestInfo)", info.displayName)
assertEquals("bar - 1st 'argument' and displayName(String, TestInfo)", info.displayName)
}
}
}

0 comments on commit 7457144

Please sign in to comment.