First part of fix to scripted test logging. Second part is in main sbt.

git-svn-id: https://simple-build-tool.googlecode.com/svn/trunk@926 d89573ee-9141-11dd-94d4-bdf5e562f29c
This commit is contained in:
dmharrah 2009-08-02 00:58:17 +00:00
parent e7522e5691
commit 9344dcb63e
3 changed files with 54 additions and 27 deletions

View File

@ -1,8 +1,8 @@
#Project properties
#Sat Jul 25 23:01:36 EDT 2009
#Sat Aug 01 10:32:20 EDT 2009
project.organization=org.scala-tools.sbt
project.name=test
sbt.version=0.5.2
project.version=0.5.2
project.version=0.5.3-p1
scala.version=2.7.5
project.initialize=false

View File

@ -20,13 +20,44 @@ final class ScriptedTests(testResources: Resources) extends NotNull
{
val log = new RemoteLogger(logger)
val result = readOnlyResourceDirectory(group, name).fold(err => Some(err), testDirectory => scriptedTest(testDirectory, log))
wrapOption(result)
translateOption(result)
}
private def scriptedTest(testDirectory: File, log: Logger): Option[String] =
{
(for(script <- (new TestScriptParser(testDirectory, log)).parse(new File(testDirectory, ScriptFilename)).right;
u <- withProject(testDirectory, log)(script).right )
yield u).left.toOption
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 wrapOption[T >: Null](s: Option[T]): T = s match { case Some(t) => t; case None => null }
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)
}

View File

@ -134,30 +134,26 @@ private class TestScriptParser(baseDirectory: File, log: Logger) extends RegexPa
private def evaluate(successExpected: Boolean, label: String, project: Project)(body: => Option[String]): Option[String] =
{
def startRecordingLog() { foreachBufferedLogger(project)(_.startRecording()) }
def playLog() { foreachBufferedLogger(project)(_.playAll()) }
def stopLog() { foreachBufferedLogger(project)(_.stop()) }
def clearLog() { foreachBufferedLogger(project)(_.clearAll()) }
def playLog(message: String) =
{
foreachBufferedLogger(project)(_.playAll())
Some(message)
}
startRecordingLog()
val result =
body match
try
{
val result = body
if(result.isEmpty == successExpected)
None
else
{
case None =>
if(successExpected) None
else
{
playLog()
Some(label + " succeeded (expected failure).")
}
case Some(failure) =>
if(successExpected)
{
playLog()
Some(label + " failed (expected success): " + failure)
}
else None
val mainMessage = result.map("failed (expected success): " + _).getOrElse("succeeded (expected failure).")
playLog(label + " " + mainMessage)
}
stopLog()
result
}
finally { clearLog() }
}
private def evaluateAction(action: List[String], successExpected: Boolean)(project: Project): Option[String] =
{