2016-02-23 12:58:39 +01:00
/* *
* Copyright ( C ) 2016 Lightbend Inc . < http : //www.lightbend.com>
*/
2014-04-17 16:38:48 +02:00
package akka
2016-04-27 09:45:58 +02:00
import sbt.Keys._
2014-04-17 16:38:48 +02:00
import sbt._
object TestExtras {
object JUnitFileReporting {
val settings = Seq (
// we can enable junit-style reports everywhere with this
testOptions += Tests . Argument ( TestFrameworks . JUnit , "-v" , "-a" , "-u" , ( target . value / "test-reports" ) . getAbsolutePath ) ,
testOptions += Tests . Argument ( TestFrameworks . ScalaTest , "-u" , ( target . value / "test-reports" ) . getAbsolutePath )
)
}
2014-05-07 14:49:35 +02:00
object Filter {
object Keys {
val excludeTestNames = settingKey [ Set [ String ] ] ( "Names of tests to be excluded. Not supported by MultiJVM tests. Example usage: -Dakka.test.names.exclude=TimingSpec" )
val excludeTestTags = settingKey [ Set [ String ] ] ( "Tags of tests to be excluded. It will not be used if you specify -Dakka.test.tags.only. Example usage: -Dakka.test.tags.exclude=long-running" )
val onlyTestTags = settingKey [ Set [ String ] ] ( "Tags of tests to be ran. Example usage: -Dakka.test.tags.only=long-running" )
}
import Keys._
2014-05-12 15:36:49 +02:00
private [ Filter ] object Params {
val testNamesExclude = systemPropertyAsSeq ( "akka.test.names.exclude" ) . toSet
val testTagsExlcude = systemPropertyAsSeq ( "akka.test.tags.exclude" ) . toSet
val testTagsOnly = systemPropertyAsSeq ( "akka.test.tags.only" ) . toSet
}
2014-05-07 14:49:35 +02:00
def settings = {
Seq (
2014-05-12 15:36:49 +02:00
excludeTestNames : = Params . testNamesExclude ,
2014-05-07 14:49:35 +02:00
excludeTestTags : = {
2014-05-12 15:36:49 +02:00
if ( onlyTestTags . value . isEmpty ) Params . testTagsExlcude
2014-05-07 14:49:35 +02:00
else Set . empty
} ,
2014-05-12 15:36:49 +02:00
onlyTestTags : = Params . testTagsOnly ,
2014-05-07 14:49:35 +02:00
// add filters for tests excluded by name
testOptions in Test <++= excludeTestNames map { _ . toSeq . map ( exclude => Tests . Filter ( test => ! test . contains ( exclude ) ) ) } ,
// add arguments for tests excluded by tag
testOptions in Test <++= excludeTestTags map { tags =>
if ( tags . isEmpty ) Seq . empty else Seq ( Tests . Argument ( "-l" , tags . mkString ( " " ) ) )
} ,
// add arguments for running only tests by tag
testOptions in Test <++= onlyTestTags map { tags =>
if ( tags . isEmpty ) Seq . empty else Seq ( Tests . Argument ( "-n" , tags . mkString ( " " ) ) )
}
)
}
2014-05-12 15:36:49 +02:00
def containsOrNotExcludesTag ( tag : String ) = {
Params . testTagsOnly . contains ( tag ) || ! Params . testTagsExlcude ( tag )
}
2014-05-07 14:49:35 +02:00
def systemPropertyAsSeq ( name : String ) : Seq [ String ] = {
val prop = sys . props . get ( name ) . getOrElse ( "" )
if ( prop . isEmpty ) Seq . empty else prop . split ( "," ) . toSeq
}
}
}