diff --git a/scripted/project/build.properties b/scripted/project/build.properties index 3f9316f18..accc374de 100644 --- a/scripted/project/build.properties +++ b/scripted/project/build.properties @@ -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 diff --git a/scripted/src/main/scala/ScriptedTests.scala b/scripted/src/main/scala/ScriptedTests.scala index 1016fa72d..b785618bb 100644 --- a/scripted/src/main/scala/ScriptedTests.scala +++ b/scripted/src/main/scala/ScriptedTests.scala @@ -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) } diff --git a/scripted/src/main/scala/TestScriptParser.scala b/scripted/src/main/scala/TestScriptParser.scala index a87e34de6..84b8746c3 100644 --- a/scripted/src/main/scala/TestScriptParser.scala +++ b/scripted/src/main/scala/TestScriptParser.scala @@ -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] = {