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 #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.organization=org.scala-tools.sbt
project.name=test project.name=test
sbt.version=0.5.2 sbt.version=0.5.2
project.version=0.5.2 project.version=0.5.3-p1
scala.version=2.7.5 scala.version=2.7.5
project.initialize=false project.initialize=false

View File

@ -20,13 +20,44 @@ final class ScriptedTests(testResources: Resources) extends NotNull
{ {
val log = new RemoteLogger(logger) val log = new RemoteLogger(logger)
val result = readOnlyResourceDirectory(group, name).fold(err => Some(err), testDirectory => scriptedTest(testDirectory, log)) 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] = private def scriptedTest(testDirectory: File, log: Logger): Option[String] =
{ {
(for(script <- (new TestScriptParser(testDirectory, log)).parse(new File(testDirectory, ScriptFilename)).right; val buffered = new BufferedLogger(log)
u <- withProject(testDirectory, log)(script).right ) //buffered.startRecording()
yield u).left.toOption 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] = private def evaluate(successExpected: Boolean, label: String, project: Project)(body: => Option[String]): Option[String] =
{ {
def startRecordingLog() { foreachBufferedLogger(project)(_.startRecording()) } def startRecordingLog() { foreachBufferedLogger(project)(_.startRecording()) }
def playLog() { foreachBufferedLogger(project)(_.playAll()) } def clearLog() { foreachBufferedLogger(project)(_.clearAll()) }
def stopLog() { foreachBufferedLogger(project)(_.stop()) } def playLog(message: String) =
{
foreachBufferedLogger(project)(_.playAll())
Some(message)
}
startRecordingLog() startRecordingLog()
val result = try
body match {
val result = body
if(result.isEmpty == successExpected)
None
else
{ {
case None => val mainMessage = result.map("failed (expected success): " + _).getOrElse("succeeded (expected failure).")
if(successExpected) None playLog(label + " " + mainMessage)
else
{
playLog()
Some(label + " succeeded (expected failure).")
}
case Some(failure) =>
if(successExpected)
{
playLog()
Some(label + " failed (expected success): " + failure)
}
else None
} }
stopLog() }
result finally { clearLog() }
} }
private def evaluateAction(action: List[String], successExpected: Boolean)(project: Project): Option[String] = private def evaluateAction(action: List[String], successExpected: Boolean)(project: Project): Option[String] =
{ {