mirror of https://github.com/sbt/sbt.git
Continuation of previous commit's workaround for #937: close test streams early
This commit is contained in:
parent
ca7e78d03d
commit
c5120636e4
|
|
@ -373,7 +373,7 @@ object Defaults extends BuildCommon
|
|||
lazy val ConfigGlobal: Scope = ThisScope.copy(config = Global)
|
||||
def testTaskOptions(key: Scoped): Seq[Setting[_]] = inTask(key)( Seq(
|
||||
testListeners := {
|
||||
TestLogger(streams.value.log, testLogger(streamsManager.value, test in resolvedScoped.value.scope), logBuffered.value) +:
|
||||
TestLogger.make(streams.value.log, closeableTestLogger(streamsManager.value, test in resolvedScoped.value.scope, logBuffered.value)) +:
|
||||
new TestStatusReporter(succeededFile( streams.in(test).value.cacheDirectory )) +:
|
||||
testListeners.in(TaskGlobal).value
|
||||
},
|
||||
|
|
@ -382,6 +382,7 @@ object Defaults extends BuildCommon
|
|||
) ) ++ Seq(
|
||||
derive(testGrouping <<= singleTestGroupDefault)
|
||||
)
|
||||
@deprecated("Doesn't provide for closing the underlying resources.", "0.13.1")
|
||||
def testLogger(manager: Streams, baseKey: Scoped)(tdef: TestDefinition): Logger =
|
||||
{
|
||||
val scope = baseKey.scope
|
||||
|
|
@ -389,6 +390,14 @@ object Defaults extends BuildCommon
|
|||
val key = ScopedKey(scope.copy(extra = Select(testExtra(extra, tdef))), baseKey.key)
|
||||
manager(key).log
|
||||
}
|
||||
private[this] def closeableTestLogger(manager: Streams, baseKey: Scoped, buffered: Boolean)(tdef: TestDefinition): TestLogger.PerTest =
|
||||
{
|
||||
val scope = baseKey.scope
|
||||
val extra = scope.extra match { case Select(x) => x; case _ => AttributeMap.empty }
|
||||
val key = ScopedKey(scope.copy(extra = Select(testExtra(extra, tdef))), baseKey.key)
|
||||
val s = manager(key)
|
||||
new TestLogger.PerTest(s.log, () => s.close(), buffered)
|
||||
}
|
||||
def buffered(log: Logger): Logger = new BufferedLogger(FullLogger(log))
|
||||
def testExtra(extra: AttributeMap, tdef: TestDefinition): AttributeMap =
|
||||
{
|
||||
|
|
|
|||
|
|
@ -71,15 +71,34 @@ object TestEvent
|
|||
|
||||
object TestLogger
|
||||
{
|
||||
@deprecated("Doesn't provide for underlying resources to be released.", "0.13.1")
|
||||
def apply(logger: sbt.Logger, logTest: TestDefinition => sbt.Logger, buffered: Boolean): TestLogger =
|
||||
new TestLogger(new TestLogging(wrap(logger), tdef => contentLogger(logTest(tdef), buffered)) )
|
||||
|
||||
@deprecated("Doesn't provide for underlying resources to be released.", "0.13.1")
|
||||
def contentLogger(log: sbt.Logger, buffered: Boolean): ContentLogger =
|
||||
{
|
||||
val blog = new BufferedLogger(FullLogger(log))
|
||||
if(buffered) blog.record()
|
||||
new ContentLogger(wrap(blog), () => blog.stopQuietly())
|
||||
}
|
||||
|
||||
final class PerTest private[sbt](val log: sbt.Logger, val flush: () => Unit, val buffered: Boolean)
|
||||
|
||||
def make(global: sbt.Logger, perTest: TestDefinition => PerTest): TestLogger =
|
||||
{
|
||||
def makePerTest(tdef: TestDefinition): ContentLogger =
|
||||
{
|
||||
val per = perTest(tdef)
|
||||
val blog = new BufferedLogger(FullLogger(per.log))
|
||||
if(per.buffered) blog.record()
|
||||
new ContentLogger(wrap(blog), () => { blog.stopQuietly(); per.flush() })
|
||||
}
|
||||
val config = new TestLogging(wrap(global), makePerTest)
|
||||
new TestLogger(config)
|
||||
}
|
||||
|
||||
|
||||
def wrap(logger: sbt.Logger): TLogger =
|
||||
new TLogger
|
||||
{
|
||||
|
|
@ -97,7 +116,7 @@ final class ContentLogger(val log: TLogger, val flush: () => Unit)
|
|||
class TestLogger(val logging: TestLogging) extends TestsListener
|
||||
{
|
||||
import logging.{global => log, logTest}
|
||||
|
||||
|
||||
def startGroup(name: String) {}
|
||||
def testEvent(event: TestEvent): Unit = {}
|
||||
def endGroup(name: String, t: Throwable)
|
||||
|
|
|
|||
Loading…
Reference in New Issue