aboutsummaryrefslogtreecommitdiff
path: root/packages/Python/lldbsuite/test_event/test/src/TestCatchInvalidDecorator.py
blob: 56814416c33368efe4bcd5fa976e6f2ad7acce54 (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
#!/usr/bin/env python
"""
Tests that the event system reports issues during decorator
handling as errors.
"""
# System-provided imports
import os
import unittest

# Local-provided imports
import event_collector


class TestCatchInvalidDecorator(unittest.TestCase):

    TEST_DIR = os.path.join(
        os.path.dirname(__file__),
        os.path.pardir,
        "resources",
        "invalid_decorator")

    def test_with_whole_file(self):
        """
        Test that a non-existent decorator generates a test-event error
        when running all tests in the file.
        """
        # Determine the test case file we're using.
        test_file = os.path.join(self.TEST_DIR, "TestInvalidDecorator.py")

        # Collect all test events generated for this file.
        error_results = _filter_error_results(
            event_collector.collect_events_whole_file(test_file))

        self.assertGreater(
            len(error_results),
            0,
            "At least one job or test error result should have been returned")

    def test_with_function_filter(self):
        """
        Test that a non-existent decorator generates a test-event error
        when running a filtered test.
        """
        # Collect all test events generated during running of tests
        # in a given directory using a test name filter.  Internally,
        # this runs through a different code path that needs to be
        # set up to catch exceptions.
        error_results = _filter_error_results(
            event_collector.collect_events_for_directory_with_filter(
                self.TEST_DIR,
                "NonExistentDecoratorTestCase.test"))

        self.assertGreater(
            len(error_results),
            0,
            "At least one job or test error result should have been returned")


def _filter_error_results(events):
    # Filter out job result events.
    return [
        event
        for event in events
        if event.get("event", None) in ["job_result", "test_result"] and
        event.get("status", None) == "error"
        ]


if __name__ == "__main__":
    unittest.main()