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
|
#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
|
||||||
|
|
|
||||||
|
|
@ -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)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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] =
|
||||||
{
|
{
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue