mirror of https://github.com/sbt/sbt.git
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:
parent
e7522e5691
commit
9344dcb63e
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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] =
|
||||
{
|
||||
|
|
|
|||
Loading…
Reference in New Issue