mirror of https://github.com/sbt/sbt.git
Compatibility fixes for specs 1.6
git-svn-id: https://simple-build-tool.googlecode.com/svn/trunk@1001 d89573ee-9141-11dd-94d4-bdf5e562f29c
This commit is contained in:
parent
299cef4a57
commit
2bba348717
|
|
@ -168,7 +168,7 @@ final case class SpecificationReportEvent(successes: Int, failures: Int, errors:
|
|||
{
|
||||
def result = if(errors > 0) Some(Result.Error) else if(failures > 0) Some(Result.Failed) else Some(Result.Passed)
|
||||
}
|
||||
final case class SystemReportEvent(description: String, verb: String, skippedSus:Option[Throwable], literateDescription: Option[Seq[String]], examples: Seq[ExampleReportEvent]) extends SpecsEvent { def result = None }
|
||||
final case class SystemReportEvent(description: String, verb: String, skipped: Seq[Throwable], literateDescription: Option[Seq[String]], examples: Seq[ExampleReportEvent]) extends SpecsEvent { def result = None }
|
||||
final case class ExampleReportEvent(description: String, errors: Seq[Throwable], failures: Seq[RuntimeException], skipped: Seq[RuntimeException], subExamples: Seq[ExampleReportEvent]) extends SpecsEvent { def result = None }
|
||||
|
||||
trait EventOutput[E <: TestEvent]
|
||||
|
|
@ -240,7 +240,8 @@ class SpecsOutput(val log: Logger) extends EventOutput[SpecsEvent]
|
|||
}
|
||||
private def reportSystem(sus: SystemReportEvent, padding: String)
|
||||
{
|
||||
log.info(padding + sus.description + " " + sus.verb + sus.skippedSus.map(" (skipped: " + _.getMessage + ")").getOrElse(""))
|
||||
val skipped = if(sus.skipped.isEmpty) "" else sus.skipped.map(_.getMessage).mkString(" (skipped: ", ", ", ")")
|
||||
log.info(padding + sus.description + " " + sus.verb + skipped)
|
||||
for(description <- sus.literateDescription)
|
||||
log.info(padding + description.mkString)
|
||||
reportExamples(sus.examples, padding)
|
||||
|
|
|
|||
|
|
@ -171,8 +171,17 @@ private[sbt] class SpecsRunner(val log: Logger, val listeners: Seq[TestReportLis
|
|||
description.desc.map(_.text) // LiterateDescription
|
||||
}
|
||||
}
|
||||
|
||||
SystemReportEvent(sus.description, sus.verb, sus.skippedSus, format, reportExamples(sus.examples))
|
||||
// these are for 1.6 compatibility, which removed skippedSus (skipped still exists) and examples (moved to specification)
|
||||
def skipped(sus: Sus) = classOf[Sus].getMethod("skipped").invoke(sus).asInstanceOf[Seq[Throwable]]
|
||||
def examples(sus: Sus) =
|
||||
{
|
||||
try { sus.examples } // we compile against specs 1.4.x, which has examples directly on Sus so this compiles
|
||||
catch { case _: NoSuchMethodError => // It fails at runtime for specs 1.6 because examples is now on BaseSpecification
|
||||
val spec = classOf[Sus].getMethod("specification").invoke(sus)
|
||||
spec.getClass.getMethod("examples").invoke(spec).asInstanceOf[List[Example]]
|
||||
}
|
||||
}
|
||||
SystemReportEvent(sus.description, sus.verb, skipped(sus), format, reportExamples(examples(sus)))
|
||||
}
|
||||
private def reportExamples(examples: Seq[Example]): Seq[ExampleReportEvent] =
|
||||
{
|
||||
|
|
@ -181,6 +190,11 @@ private[sbt] class SpecsRunner(val log: Logger, val listeners: Seq[TestReportLis
|
|||
}
|
||||
private def reportExample(example: Example): ExampleReportEvent =
|
||||
{
|
||||
ExampleReportEvent(example.description, example.errors, example.failures, example.skipped, reportExamples(example.subExamples))
|
||||
def examples(example: Example) =
|
||||
try { example.subExamples } // we compile against specs 1.4.x, which has subExamples defined on Example, so this compiles
|
||||
catch { case _ : NoSuchMethodError => // It fails at runtime for specs 1.6 because examples is the new method
|
||||
classOf[Example].getMethod("examples").invoke(example).asInstanceOf[Seq[Example]]
|
||||
}
|
||||
ExampleReportEvent(example.description, example.errors, example.failures, example.skipped, reportExamples(examples(example)))
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue