diff options
Diffstat (limited to 'src/main/scala/org/perl8/test/tap/TAPResult.scala')
-rw-r--r-- | src/main/scala/org/perl8/test/tap/TAPResult.scala | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/src/main/scala/org/perl8/test/tap/TAPResult.scala b/src/main/scala/org/perl8/test/tap/TAPResult.scala new file mode 100644 index 0000000..21c7986 --- /dev/null +++ b/src/main/scala/org/perl8/test/tap/TAPResult.scala @@ -0,0 +1,46 @@ +package org.perl8.test.tap + +import org.perl8.test.{Plan,NumericPlan,SkipAll} + +sealed trait Directive { + val message: Option[String] +} +case class SkipDirective (message: Option[String]) extends Directive +case class TodoDirective (message: Option[String]) extends Directive + +class TestResult ( + val passed: Boolean, + val number: Int, + val description: String, + val directive: Option[Directive], + val subtest: Option[TAPResult] +) + +class TAPResult (val plan: Plan, val results: Seq[TestResult]) { + val matchesPlan = plan match { + case NumericPlan(n) => results.length == n + case _ => results.length == 0 + } + + val fails = results.count { r => + !r.passed && !r.directive.isDefined + } + + val testsPassed = fails == 0 + + val success = plan match { + case SkipAll(_) => true + case _ => results.length > 0 && fails == 0 && matchesPlan + } + + val exitCode = + if (success) { + 0 + } + else if (!matchesPlan || results.length == 0) { + 255 + } + else { + fails + } +} |