introduce SysProp sbt.testing.legacyreport

either create test reports with legacy file names (legacyreport=true) or with standard file names (legacyreport=false or omitted) but not both as suggested in #4451
This commit is contained in:
Jannik Theiß 2020-01-08 11:46:19 +01:00
parent b37bad6644
commit cea516175f
3 changed files with 13 additions and 6 deletions

View File

@ -70,6 +70,7 @@ object SysProp {
def client: Boolean = getOrFalse("sbt.client")
def ci: Boolean = getOrFalse("sbt.ci")
def allowRootDir: Boolean = getOrFalse("sbt.rootdir")
def legacyTestReport: Boolean = getOrFalse("sbt.testing.legacyreport")
def watchMode: String =
sys.props.get("sbt.watch.mode").getOrElse("auto")

View File

@ -10,6 +10,7 @@ package plugins
import Def.Setting
import Keys._
import sbt.internal.SysProp
/**
* An experimental plugin that adds the ability for junit-xml to be generated.
@ -30,6 +31,10 @@ object JUnitXmlReportPlugin extends AutoPlugin {
// It might be a good idea to derive this setting into specific test scopes.
override lazy val projectSettings: Seq[Setting[_]] =
Seq(
testListeners += new JUnitXmlTestsListener(target.value.getAbsolutePath, streams.value.log)
testListeners += new JUnitXmlTestsListener(
target.value.getAbsolutePath,
streams.value.log,
SysProp.legacyTestReport
)
)
}

View File

@ -33,9 +33,10 @@ import sbt.protocol.testing.TestResult
* report format.
* @param outputDir path to the dir in which a folder with results is generated
*/
class JUnitXmlTestsListener(val outputDir: String, logger: Logger) extends TestsListener {
class JUnitXmlTestsListener(val outputDir: String, logger: Logger, legacyTestReport: Boolean)
extends TestsListener {
// This constructor is for binary compatibility with older versions of sbt.
def this(outputDir: String) = this(outputDir, null)
def this(outputDir: String) = this(outputDir, null, false)
/**Current hostname so we know which machine executed the tests*/
val hostname: String = {
@ -248,14 +249,14 @@ class JUnitXmlTestsListener(val outputDir: String, logger: Logger) extends Tests
d.truncatedTo(ChronoUnit.SECONDS).format(DateTimeFormatter.ISO_LOCAL_DATE_TIME)
private def writeSuite(): Unit = {
val legacyFile =
val file = if (legacyTestReport) {
new File(targetDir, s"${normalizeName(withTestSuite(_.name))}.xml").getAbsolutePath
val file =
} else {
new File(targetDir, s"TEST-${normalizeName(withTestSuite(_.name))}.xml").getAbsolutePath
}
// TODO would be nice to have a logger and log this with level debug
// System.err.println("Writing JUnit XML test report: " + file)
val testSuiteResult = withTestSuite(_.stop())
XML.save(legacyFile, testSuiteResult, "UTF-8", xmlDecl = true, null)
XML.save(file, testSuiteResult, "UTF-8", xmlDecl = true, null)
testSuite.remove()
}