aboutsummaryrefslogtreecommitdiffstats
path: root/src/test/scala/org/perl8/test/tap/ConsumerTest.scala
blob: 7471a8cebe41852acb432afa6c3f1e614cd8e803 (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
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
package org.perl8.test.tap

import org.scalatest.FunSuite

import org.perl8.test.Utils._

class ConsumerTest extends FunSuite {
  test ("basic") {
    val tap =
      "1..1\n" +
      "ok 1\n"

    val result = Consumer.parse(tap)
    assert(result.plan === NumericPlan(1))
    assert(result.results.map(_.passed) === Seq(true))
  }

  test ("skip all") {
    val tap =
      "1..0 # SKIP nope\n"

    val result = Consumer.parse(tap)
    assert(result.plan === SkipAll("nope"))
    assert(result.results === Seq())
  }

  test ("more complicated") {
    val tap =
      "# starting...\n" +
      "ok 1 - stuff\n" +
      "not ok 2 - does this work?\n" +
      "not ok 3 - eventually # TODO doesn't work yet\n" +
      "# skipping some stuff\n" +
      "ok 4 # skip don't do this yet\n" +
      "# finished!\n" +
      "1..4\n" +
      "# Looks like you failed 1 test of 4.\n"

    val result = Consumer.parse(tap)
    assert(result.plan === NumericPlan(4))
    assert(result.results.map(_.passed) === Seq(true, false, false, true))
    assert(result.results.map(_.number) === Seq(1, 2, 3, 4))
    assert(
      result.results.map(_.description) === Seq(
        "- stuff",
        "- does this work?",
        "- eventually",
        ""
      )
    )
    assert(
      result.results.map(_.directive) === Seq(
        None,
        None,
        Some(TodoDirective(Some("doesn't work yet"))),
        Some(SkipDirective(Some("don't do this yet")))
      )
    )
  }

  test ("subtests") {
    val tap =
      "ok 1 - not subtest\n" +
      "    ok 1 - passed\n" +
      "    not ok 2 - failed\n" +
      "    ok 3 - passed again\n" +
      "        1..1\n" +
      "        ok 1 - sub-sub-test\n" +
      "    ok 4 - nested subtests\n" +
      "    1..4\n" +
      "    # Looks like you failed 1 test of 4.\n" +
      "not ok 2 - subtest\n" +
      "1..2\n" +
      "# Looks like you failed 1 test of 2.\n"

    val result = Consumer.parse(tap)
    assert(result.plan === NumericPlan(2))
    assert(result.results.map(_.passed) === Seq(true, false))
    assert(result.results.map(_.number) === Seq(1, 2))
    assert(
      result.results.map(_.description) === Seq(
        "- not subtest",
        "- subtest"
      )
    )
    assert(result.results.map(_.directive) === Seq(None, None))

    assert(result.results(0).subtest === None)
    assert(result.results(1).subtest.isDefined)

    val subtest = result.results(1).subtest.get
    assert(subtest.plan === NumericPlan(4))
    assert(subtest.results.map(_.passed) === Seq(true, false, true, true))
    assert(subtest.results.map(_.number) === Seq(1, 2, 3, 4))
    assert(
      subtest.results.map(_.description) === Seq(
        "- passed",
        "- failed",
        "- passed again",
        "- nested subtests"
      )
    )
    assert(subtest.results.map(_.directive) === Seq(None, None, None, None))

    assert(subtest.results(0).subtest === None)
    assert(subtest.results(1).subtest === None)
    assert(subtest.results(2).subtest === None)
    assert(subtest.results(3).subtest.isDefined)

    val subsubtest = subtest.results(3).subtest.get
    assert(subsubtest.plan === NumericPlan(1))
    assert(subsubtest.results.map(_.passed) === Seq(true))
    assert(subsubtest.results.map(_.number) === Seq(1))
    assert(
      subsubtest.results.map(_.description) === Seq(
        "- sub-sub-test"
      )
    )
    assert(subsubtest.results.map(_.directive) === Seq(None))

    assert(subsubtest.results(0).subtest === None)
  }
}