File: test_loader.py

package info (click to toggle)
tap.py 3.2.1-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 476 kB
  • sloc: python: 1,808; makefile: 164; sh: 40
file content (118 lines) | stat: -rw-r--r-- 3,705 bytes parent folder | download | duplicates (2)
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
import inspect
import os
import tempfile
import unittest
from io import StringIO
from unittest import mock

from tap.loader import Loader
from tap.tests import TestCase


class TestLoader(TestCase):
    """Tests for tap.loader.Loader"""

    def test_handles_file(self):
        """The loader handles a file."""
        sample = inspect.cleandoc(
            """TAP version 13
            1..2
            # This is a diagnostic.
            ok 1 A passing test
            not ok 2 A failing test
            This is an unknown line.
            Bail out! This test would abort.
            """
        )
        with tempfile.NamedTemporaryFile(delete=False) as temp:
            temp.write(sample.encode("utf-8"))
        loader = Loader()

        suite = loader.load_suite_from_file(temp.name)

        # The bail line counts as a failed test.
        self.assertEqual(3, len(suite._tests))

    def test_file_does_not_exist(self):
        """The loader records a failure when a file does not exist."""
        loader = Loader()

        suite = loader.load_suite_from_file("phony.tap")

        self.assertEqual(1, len(suite._tests))
        self.assertEqual(
            "{filename} does not exist.".format(filename="phony.tap"),
            suite._tests[0]._line.description,
        )

    def test_handles_directory(self):
        directory = tempfile.mkdtemp()
        sub_directory = os.path.join(directory, "sub")
        os.mkdir(sub_directory)
        with open(os.path.join(directory, "a_file.tap"), "w") as f:
            f.write("ok A passing test")
        with open(os.path.join(sub_directory, "another_file.tap"), "w") as f:
            f.write("not ok A failing test")
        loader = Loader()

        suite = loader.load([directory])

        self.assertEqual(2, len(suite._tests))

    def test_errors_with_multiple_version_lines(self):
        sample = inspect.cleandoc(
            """TAP version 13
            TAP version 13
            1..0
            """
        )
        with tempfile.NamedTemporaryFile(delete=False) as temp:
            temp.write(sample.encode("utf-8"))
        loader = Loader()

        suite = loader.load_suite_from_file(temp.name)

        self.assertEqual(1, len(suite._tests))
        self.assertEqual(
            "Multiple version lines appeared.", suite._tests[0]._line.description
        )

    def test_errors_with_version_not_on_first_line(self):
        sample = inspect.cleandoc(
            """# Something that doesn't belong.
            TAP version 13
            1..0
            """
        )
        with tempfile.NamedTemporaryFile(delete=False) as temp:
            temp.write(sample.encode("utf-8"))
        loader = Loader()

        suite = loader.load_suite_from_file(temp.name)

        self.assertEqual(1, len(suite._tests))
        self.assertEqual(
            "The version must be on the first line.",
            suite._tests[0]._line.description,
        )

    def test_skip_plan_aborts_loading(self):
        sample = inspect.cleandoc(
            """1..0 # Skipping this test file.
            ok This should not get processed.
            """
        )
        with tempfile.NamedTemporaryFile(delete=False) as temp:
            temp.write(sample.encode("utf-8"))
        loader = Loader()

        suite = loader.load_suite_from_file(temp.name)

        self.assertEqual(1, len(suite._tests))
        self.assertEqual("Skipping this test file.", suite._tests[0]._line.description)

    @mock.patch("tap.parser.sys.stdin", StringIO(""))
    def test_loads_from_stream(self):
        loader = Loader()
        suite = loader.load_suite_from_stdin()
        self.assertTrue(isinstance(suite, unittest.TestSuite))