mirror of https://github.com/sbt/sbt.git
64 lines
2.0 KiB
Scala
64 lines
2.0 KiB
Scala
/* sbt -- Simple Build Tool
|
|
* Copyright 2009 Mark Harrah
|
|
*/
|
|
|
|
package sbt.test
|
|
|
|
import java.io.File
|
|
|
|
final class ScriptedTests(testResources: Resources) extends NotNull
|
|
{
|
|
def this(resourceBaseDirectory: File, additional: ClassLoader) = this(new Resources(resourceBaseDirectory, additional))
|
|
def this(resourceBaseDirectory: File) = this(new Resources(resourceBaseDirectory))
|
|
|
|
val ScriptFilename = "test"
|
|
import testResources._
|
|
|
|
private def printClass(c: Class[_]) = println(c.getName + " loader=" +c.getClassLoader + " location=" + FileUtilities.classLocationFile(c))
|
|
|
|
def scriptedTest(group: String, name: String, logger: Reflected.Logger): String =
|
|
{
|
|
val log = new RemoteLogger(logger)
|
|
val result = readOnlyResourceDirectory(group, name).fold(err => Some(err), testDirectory => scriptedTest(testDirectory, log))
|
|
translateOption(result)
|
|
}
|
|
private def scriptedTest(testDirectory: File, log: Logger): Option[String] =
|
|
{
|
|
val buffered = new BufferedLogger(log)
|
|
//buffered.startRecording()
|
|
val filtered = new FilterLogger(buffered)
|
|
val parsedScript = (new TestScriptParser(testDirectory, filtered)).parse(new File(testDirectory, ScriptFilename))
|
|
val result = parsedScript.right.flatMap(withProject(testDirectory, filtered))
|
|
//result.left.foreach(x => buffered.playAll())
|
|
//buffered.clearAll()
|
|
result.left.toOption
|
|
}
|
|
private[this] def translateOption[T >: Null](s: Option[T]): T = s match { case Some(t) => t; case None => null }
|
|
}
|
|
|
|
// TODO: remove for sbt 0.5.3
|
|
final class FilterLogger(delegate: Logger) extends BasicLogger
|
|
{
|
|
def trace(t: => Throwable)
|
|
{
|
|
if(traceEnabled)
|
|
delegate.trace(t)
|
|
}
|
|
def log(level: Level.Value, message: => String)
|
|
{
|
|
if(atLevel(level))
|
|
delegate.log(level, message)
|
|
}
|
|
def success(message: => String)
|
|
{
|
|
if(atLevel(Level.Info))
|
|
delegate.success(message)
|
|
}
|
|
def control(event: ControlEvent.Value, message: => String)
|
|
{
|
|
if(atLevel(Level.Info))
|
|
delegate.control(event, message)
|
|
}
|
|
def logAll(events: Seq[LogEvent]): Unit = events.foreach(delegate.log)
|
|
}
|