Skip to content

Commit f9555bb

Browse files
committed
feat: display TestNG initialization failure
See gradle/gradle#23268
1 parent 292c09a commit f9555bb

File tree

3 files changed

+89
-9
lines changed

3 files changed

+89
-9
lines changed

plugins/gradle-extensions-plugin/src/main/kotlin/com/github/vlsi/gradle/ThrowablePrinter.kt

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,12 @@ class ThrowablePrinter {
7777

7878
private val defaultHideThrowables =
7979
listOf<Predicate<Throwable>>(
80+
{ it.message?.startsWith("Could not complete execution for") == true },
81+
{
82+
it is PlaceholderException &&
83+
it.exceptionClassName.endsWith("TestSuiteExecutionException") &&
84+
it.message?.startsWith("Could not complete execution for") == true
85+
},
8086
{ it is LocationAwareException && it.message == it.cause?.message },
8187
{ it is UncheckedException || it is UncheckedIOException },
8288
{ it is AssertionError &&
@@ -130,10 +136,11 @@ class ThrowablePrinter {
130136

131137
private val defaultFaintPackages =
132138
setOf(
133-
"java.util.stream.",
139+
"java.",
134140
"jdk.internal.",
141+
"org.gradle.",
135142
"org.junit.",
136-
"org.gradle."
143+
"org.testng."
137144
)
138145
private val defaultFrameStyles =
139146
listOf<(StackTraceElement) -> Style?> {

plugins/gradle-extensions-plugin/src/main/kotlin/com/github/vlsi/gradle/test/dsl/PrintTestResults.kt

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -168,6 +168,15 @@ fun Test.printTestResults(
168168
} else {
169169
sb.appendTestName(displayName)
170170
}
171+
if (showStacktrace && result.exceptions.isNotEmpty()) {
172+
val throwablePrinter = project.createThrowablePrinter().apply {
173+
indent = " "
174+
}
175+
result.exceptions.forEach {
176+
sb.appendPlatformLine()
177+
throwablePrinter.print(it, sb)
178+
}
179+
}
171180
}
172181
println(sb.toString())
173182
}
@@ -184,7 +193,8 @@ fun Test.printTestResults(
184193
)
185194
afterSuite(
186195
KotlinClosure2<TestDescriptor, TestResult, Any>({ descriptor, result ->
187-
if (descriptor.name.startsWith("Gradle Test Executor")) {
196+
if (descriptor.name.startsWith("Gradle Test Executor") &&
197+
result.exceptions.isEmpty()) {
188198
return@KotlinClosure2
189199
}
190200
if (result.resultType == TestResult.ResultType.FAILURE ||

plugins/gradle-extensions-plugin/src/test/kotlin/com/github/vlsi/gradle/ErrorReportingTest.kt

Lines changed: 69 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -28,25 +28,28 @@ class ErrorReportingTest : BaseGradleTest() {
2828
private fun gradleVersionAndSettings(): Iterable<Arguments> {
2929
return mutableListOf<Arguments>().apply {
3030
if (JavaVersion.current() <= JavaVersion.VERSION_1_8) {
31-
add(Arguments.of("4.4.1"))
31+
add(Arguments.of("4.9"))
3232
}
3333
if (JavaVersion.current() <= JavaVersion.VERSION_12) {
3434
addAll(
3535
listOf(
3636
Arguments.of("5.6.2"),
37-
Arguments.of("5.4.1"),
3837
Arguments.of("4.10.2")
3938
)
4039
)
4140
}
42-
add(Arguments.of("6.0"))
43-
add(Arguments.of("6.1.1"))
41+
if (JavaVersion.current() < JavaVersion.VERSION_17) {
42+
add(Arguments.of("6.0"))
43+
add(Arguments.of("6.8"))
44+
add(Arguments.of("7.6.1"))
45+
}
46+
add(Arguments.of("8.0.2"))
4447
}
4548
}
4649
}
4750

48-
@ParameterizedTest
49-
@MethodSource("gradleVersionAndSettings")
51+
// @ParameterizedTest
52+
// @MethodSource("gradleVersionAndSettings")
5053
// @ValueSource(strings=["6.1.1"])
5154
fun `stacktrace is printed`(gradleVersion: String) {
5255
createSettings()
@@ -76,4 +79,64 @@ class ErrorReportingTest : BaseGradleTest() {
7679
)
7780
}
7881
}
82+
83+
@ParameterizedTest
84+
@MethodSource("gradleVersionAndSettings")
85+
fun `testng init failure test`(gradleVersion: String) {
86+
createSettings()
87+
88+
projectDir.resolve("build.gradle").write(
89+
/* language=groovy */
90+
"""
91+
plugins {
92+
id('com.github.vlsi.gradle-extensions')
93+
id('java-library')
94+
}
95+
96+
repositories {
97+
mavenCentral()
98+
}
99+
100+
dependencies {
101+
testImplementation("org.testng:testng:6.8.1")
102+
}
103+
104+
tasks.test {
105+
useTestNG()
106+
}
107+
""".trimIndent()
108+
)
109+
110+
val dir = projectDir.resolve("src/test/java/com/example")
111+
dir.toFile().mkdirs()
112+
113+
projectDir.resolve("src/test/java/com/example/MyTest.java").write(
114+
/* language=java */
115+
"""
116+
package com.example;
117+
118+
import org.testng.annotations.Test;
119+
120+
public class MyTest {
121+
@Test(dependsOnMethods = {"missingMethod"})
122+
public void test() {
123+
}
124+
}
125+
""".trimIndent()
126+
)
127+
128+
val result =
129+
prepare(gradleVersion, "test", "-q")
130+
.buildAndFail()
131+
132+
val output = result.output
133+
if ("missingMethod" !in output) {
134+
Assertions.fail<Any>(
135+
"""
136+
Expecting 'Task :test FAILURE reason:... com.example.MyTest.test() depends on nonexistent method missingMethod:
137+
$output
138+
""".trimIndent()
139+
)
140+
}
141+
}
79142
}

0 commit comments

Comments
 (0)