aboutsummaryrefslogtreecommitdiffstats
path: root/src/main/scala/org/perl8/test/tap/TAPResult.scala
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/scala/org/perl8/test/tap/TAPResult.scala')
-rw-r--r--src/main/scala/org/perl8/test/tap/TAPResult.scala46
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
+ }
+}