Skip to content

Commit a4d121c

Browse files
authored
Merge pull request #109 from radarsh/feature/honour-class-display-name
Use classDisplayName for friendlier suite names
2 parents c5e4c95 + 8d54757 commit a4d121c

File tree

18 files changed

+146
-19
lines changed

18 files changed

+146
-19
lines changed

README.md

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@ testlogger {
5959
showExceptions true
6060
slowThreshold 2000
6161
showSummary true
62+
showSimpleNames false
6263
showPassed true
6364
showSkipped true
6465
showFailed true
@@ -164,6 +165,17 @@ testlogger {
164165
}
165166
```
166167

168+
### Show simple names
169+
170+
If you don't like seeing long, fully-qualified class names being used for displaying the test suite names, you can choose to
171+
show only [simple names](https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html#getSimpleName--) by setting the below flag to true.
172+
173+
```groovy
174+
testlogger {
175+
showSimpleNames true
176+
}
177+
```
178+
167179
### Show standard streams
168180

169181
The display of standard output and error streams alongside the test logs can be controlled using the below configuration.

src/main/groovy/com/adarshr/gradle/testlogger/TestDescriptorWrapper.groovy

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,9 +22,23 @@ class TestDescriptorWrapper {
2222
escape(testDescriptor.className)
2323
}
2424

25+
@CompileDynamic
26+
String getClassDisplayName() {
27+
def className = testDescriptor.className
28+
def classDisplayName = testDescriptor.properties.classDisplayName as String
29+
def useClassDisplayName = classDisplayName && classDisplayName != className && !className.endsWith(classDisplayName)
30+
31+
if (testLoggerExtension.showSimpleNames) {
32+
className = className.substring(className.lastIndexOf('.') + 1)
33+
className = className.substring(className.lastIndexOf('$') + 1)
34+
}
35+
36+
escape(useClassDisplayName ? classDisplayName : className)
37+
}
38+
2539
@CompileDynamic
2640
String getDisplayName() {
27-
escape(testDescriptor.properties.displayName ?: name)
41+
escape(testDescriptor.properties.displayName ?: testDescriptor.name as String)
2842
}
2943

3044
String getSuiteKey() {

src/main/groovy/com/adarshr/gradle/testlogger/TestLoggerExtension.groovy

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ class TestLoggerExtension {
2525
boolean showPassed = true
2626
boolean showSkipped = true
2727
boolean showFailed = true
28+
boolean showSimpleNames = false
2829

2930
private final ConsoleOutput consoleType
3031
private Set<String> configuredProperties = []
@@ -46,6 +47,7 @@ class TestLoggerExtension {
4647
this.showPassed = source.showPassed
4748
this.showSkipped = source.showSkipped
4849
this.showFailed = source.showFailed
50+
this.showSimpleNames = source.showSimpleNames
4951
this.consoleType = source.consoleType
5052
this.configuredProperties = source.configuredProperties
5153
}
@@ -118,6 +120,11 @@ class TestLoggerExtension {
118120
this.configuredProperties << 'showFailed'
119121
}
120122

123+
void setShowSimpleNames(boolean showSimpleNames) {
124+
this.showSimpleNames = showSimpleNames
125+
this.configuredProperties << 'showSimpleNames'
126+
}
127+
121128
TestLoggerExtension undecorate() {
122129
new TestLoggerExtension(this)
123130
}
@@ -155,6 +162,7 @@ class TestLoggerExtension {
155162
override(overrides, 'showPassed', Boolean)
156163
override(overrides, 'showSkipped', Boolean)
157164
override(overrides, 'showFailed', Boolean)
165+
override(overrides, 'showSimpleNames', Boolean)
158166

159167
this
160168
}

src/main/groovy/com/adarshr/gradle/testlogger/theme/MochaParallelTheme.groovy

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ class MochaParallelTheme extends MochaTheme {
1616

1717
@Override
1818
protected String testTextInternal(TestDescriptorWrapper descriptor, TestResultWrapper result) {
19-
super.testTextInternal(" [erase-ahead,default]${descriptor.className} ", descriptor, result)
19+
super.testTextInternal(" [erase-ahead,default]${descriptor.classDisplayName} ", descriptor, result)
2020
}
2121

2222
@Override

src/main/groovy/com/adarshr/gradle/testlogger/theme/MochaTheme.groovy

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ class MochaTheme extends AbstractTheme {
1616

1717
@Override
1818
protected String suiteTextInternal(TestDescriptorWrapper descriptor) {
19-
" [erase-ahead,default]${descriptor.className}[/]${lineSeparator()}"
19+
" [erase-ahead,default]${descriptor.classDisplayName}[/]${lineSeparator()}"
2020
}
2121

2222
@Override

src/main/groovy/com/adarshr/gradle/testlogger/theme/PlainParallelTheme.groovy

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ class PlainParallelTheme extends PlainTheme {
1616

1717
@Override
1818
protected String testTextInternal(TestDescriptorWrapper descriptor, TestResultWrapper result) {
19-
super.testTextInternal("${descriptor.className} ${descriptor.displayName} ${RESULT_TYPE_MAPPING[result.resultType]}", descriptor, result)
19+
super.testTextInternal("${descriptor.classDisplayName} ${descriptor.displayName} ${RESULT_TYPE_MAPPING[result.resultType]}", descriptor, result)
2020
}
2121

2222
@Override

src/main/groovy/com/adarshr/gradle/testlogger/theme/PlainTheme.groovy

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ class PlainTheme extends AbstractTheme {
2121

2222
@Override
2323
protected String suiteTextInternal(TestDescriptorWrapper descriptor) {
24-
"${descriptor.className}${lineSeparator()}"
24+
"${descriptor.classDisplayName}${lineSeparator()}"
2525
}
2626

2727
@Override

src/main/groovy/com/adarshr/gradle/testlogger/theme/StandardParallelTheme.groovy

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ class StandardParallelTheme extends StandardTheme {
1616

1717
@Override
1818
protected String testTextInternal(TestDescriptorWrapper descriptor, TestResultWrapper result) {
19-
super.testTextInternal("[erase-ahead,bold]${descriptor.className}[bold-off] ${descriptor.displayName}", descriptor, result)
19+
super.testTextInternal("[erase-ahead,bold]${descriptor.classDisplayName}[bold-off] ${descriptor.displayName}", descriptor, result)
2020
}
2121

2222
@Override

src/main/groovy/com/adarshr/gradle/testlogger/theme/StandardTheme.groovy

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ class StandardTheme extends AbstractTheme {
1515

1616
@Override
1717
protected String suiteTextInternal(TestDescriptorWrapper descriptor) {
18-
"[erase-ahead,bold]${descriptor.className}[/]${lineSeparator()}"
18+
"[erase-ahead,bold]${descriptor.classDisplayName}[/]${lineSeparator()}"
1919
}
2020

2121
@Override

src/test-functional/groovy/com/adarshr/gradle/testlogger/functional/TestLoggerPluginSpec.groovy

Lines changed: 47 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -194,7 +194,30 @@ class TestLoggerPluginSpec extends AbstractFunctionalSpec {
194194
lines[2] == render('')
195195
lines[3] == render('[erase-ahead,bold] Test [bold-off]nestedTestsetLevelOne()[green] PASSED[/]')
196196
lines[4] == render('')
197-
lines[5] == render('[erase-ahead,bold]com.adarshr.test.DeepNestedTest$NestedTestsetLevelOne$NestedTestsetLevelTwo[/]')
197+
lines[5] == render('[erase-ahead,bold]Nested test set level two[/]')
198+
lines[6] == render('')
199+
lines[7] == render('[erase-ahead,bold] Test [bold-off]nestedTestsetLevelTwo()[green] PASSED[/]')
200+
and:
201+
result.task(":test").outcome == SUCCESS
202+
}
203+
204+
def "log junit5 jupiter engine deep-nested tests when showSimpleNames is true"() {
205+
when:
206+
def result = run(
207+
'sample-junit5-jupiter-deep-nested-tests',
208+
'testlogger { showSimpleNames true }',
209+
'clean test'
210+
)
211+
then:
212+
def lines = getLoggerOutput(result.output).lines
213+
and:
214+
lines.size() == 8
215+
lines[0] == render('')
216+
lines[1] == render('[erase-ahead,bold]NestedTestsetLevelOne[/]')
217+
lines[2] == render('')
218+
lines[3] == render('[erase-ahead,bold] Test [bold-off]nestedTestsetLevelOne()[green] PASSED[/]')
219+
lines[4] == render('')
220+
lines[5] == render('[erase-ahead,bold]Nested test set level two[/]')
198221
lines[6] == render('')
199222
lines[7] == render('[erase-ahead,bold] Test [bold-off]nestedTestsetLevelTwo()[green] PASSED[/]')
200223
and:
@@ -226,6 +249,29 @@ class TestLoggerPluginSpec extends AbstractFunctionalSpec {
226249
result.task(":test").outcome == FAILED
227250
}
228251

252+
def "log spock tests when showSimpleNames is true"() {
253+
when:
254+
def result = run(
255+
'single-spock-test',
256+
'''
257+
testlogger {
258+
theme 'plain'
259+
showSimpleNames true
260+
}
261+
''',
262+
'clean test'
263+
)
264+
def lines = getLoggerOutput(result.output).lines
265+
then:
266+
lines.size() == 4
267+
lines[0] == render('')
268+
lines[1] == render('SingleSpec')
269+
lines[2] == render('')
270+
lines[3] == render(' Test this is a single test PASSED')
271+
and:
272+
result.task(':test').outcome == SUCCESS
273+
}
274+
229275
def "do not print empty suites when filtering tests"() {
230276
when:
231277
def result = run(

0 commit comments

Comments
 (0)