aboutsummaryrefslogtreecommitdiffstats
path: root/src/main/scala/org/perl8/test/tap/TAPResult.scala
blob: 21c7986d73ad45e54631518875309907a962ae52 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
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
    }
}