diff --git a/composer/src/main/kotlin/com/gojuno/composer/JUnitReport.kt b/composer/src/main/kotlin/com/gojuno/composer/JUnitReport.kt index a97f763..175ee37 100644 --- a/composer/src/main/kotlin/com/gojuno/composer/JUnitReport.kt +++ b/composer/src/main/kotlin/com/gojuno/composer/JUnitReport.kt @@ -45,9 +45,15 @@ fun writeJunit4Report(suite: Suite, outputFile: File): Completable = Single Passed -> { appendln("/>") } - Ignored -> { + is Ignored -> { appendln(">") - appendln("") + if (test.status.stacktrace.isEmpty()) { + appendln("") + } else { + appendln("") + appendln(StringEscapeUtils.escapeXml10(test.status.stacktrace)) + appendln("") + } appendln("") } is Failed -> { diff --git a/composer/src/main/kotlin/com/gojuno/composer/TestRun.kt b/composer/src/main/kotlin/com/gojuno/composer/TestRun.kt index 9b9d711..ce88529 100644 --- a/composer/src/main/kotlin/com/gojuno/composer/TestRun.kt +++ b/composer/src/main/kotlin/com/gojuno/composer/TestRun.kt @@ -33,7 +33,7 @@ data class AdbDeviceTest( ) { sealed class Status { object Passed : Status() - object Ignored : Status() + data class Ignored(val stacktrace: String) : Status() data class Failed(val stacktrace: String) : Status() } } @@ -106,7 +106,7 @@ fun AdbDevice.runTests( testName = test.testName, status = when (test.status) { is InstrumentationTest.Status.Passed -> AdbDeviceTest.Status.Passed - is InstrumentationTest.Status.Ignored -> AdbDeviceTest.Status.Ignored + is InstrumentationTest.Status.Ignored -> AdbDeviceTest.Status.Ignored(test.status.stacktrace) is InstrumentationTest.Status.Failed -> AdbDeviceTest.Status.Failed(test.status.stacktrace) }, durationNanos = test.durationNanos, diff --git a/composer/src/main/kotlin/com/gojuno/composer/html/HtmlFullTest.kt b/composer/src/main/kotlin/com/gojuno/composer/html/HtmlFullTest.kt index 10e33b8..cf4b0c4 100644 --- a/composer/src/main/kotlin/com/gojuno/composer/html/HtmlFullTest.kt +++ b/composer/src/main/kotlin/com/gojuno/composer/html/HtmlFullTest.kt @@ -76,11 +76,12 @@ fun AdbDeviceTest.toHtmlFullTest(suiteId: String, htmlReportDir: File) = HtmlFul durationMillis = NANOSECONDS.toMillis(durationNanos), status = when (status) { AdbDeviceTest.Status.Passed -> HtmlFullTest.Status.Passed - AdbDeviceTest.Status.Ignored -> HtmlFullTest.Status.Ignored + is AdbDeviceTest.Status.Ignored -> HtmlFullTest.Status.Ignored is AdbDeviceTest.Status.Failed -> HtmlFullTest.Status.Failed }, stacktrace = when (status) { - is AdbDeviceTest.Status.Failed -> status.stacktrace + is AdbDeviceTest.Status.Ignored -> status.stacktrace + is AdbDeviceTest.Status.Failed -> status.stacktrace else -> null }, logcatPath = logcat.relativePathTo(htmlReportDir), diff --git a/composer/src/test/kotlin/com/gojuno/composer/JUnitReportSpec.kt b/composer/src/test/kotlin/com/gojuno/composer/JUnitReportSpec.kt index a33a14f..a10c9fe 100644 --- a/composer/src/test/kotlin/com/gojuno/composer/JUnitReportSpec.kt +++ b/composer/src/test/kotlin/com/gojuno/composer/JUnitReportSpec.kt @@ -58,7 +58,17 @@ class JUnitReportSpec : Spek({ adbDevice = adbDevice, className = "test.class.name4", testName = "test4", - status = Ignored, + status = Ignored(""), + durationNanos = SECONDS.toNanos(0), + logcat = testFile(), + files = emptyList(), + screenshots = emptyList() + ), + AdbDeviceTest( + adbDevice = adbDevice, + className = "test.class.name5", + testName = "test5", + status = Ignored("multi\nline\nstacktrace"), durationNanos = SECONDS.toNanos(0), logcat = testFile(), files = emptyList(), @@ -66,7 +76,7 @@ class JUnitReportSpec : Spek({ ) ), passedCount = 2, - ignoredCount = 1, + ignoredCount = 2, failedCount = 1, durationNanos = MILLISECONDS.toNanos(6250), timestampMillis = 1490200150000 @@ -78,7 +88,7 @@ class JUnitReportSpec : Spek({ it("produces correct xml report") { assertThat(outputFile.readText()).isEqualTo(""" - + @@ -92,6 +102,13 @@ class JUnitReportSpec : Spek({ + + + multi + line + stacktrace + + """.trimIndent() + "\n" )