1# Copyright (c) Twisted Matrix Laboratories.
2# See LICENSE for details.
3
4"""
5Tests for L{twisted.trial._dist.workerreporter}.
6"""
7
8from twisted.python.failure import Failure
9from twisted.trial.unittest import TestCase, Todo
10from twisted.trial._dist.workerreporter import WorkerReporter
11from twisted.trial._dist import managercommands
12
13
14class FakeAMProtocol(object):
15    """
16    A fake C{AMP} implementations to track C{callRemote} calls.
17    """
18    id = 0
19    lastCall = None
20
21    def callRemote(self, command, **kwargs):
22        self.lastCall = command
23
24
25
26class WorkerReporterTestCase(TestCase):
27    """
28    Tests for L{WorkerReporter}.
29    """
30
31    def setUp(self):
32        self.fakeAMProtocol = FakeAMProtocol()
33        self.workerReporter = WorkerReporter(self.fakeAMProtocol)
34        self.test = TestCase()
35
36
37    def test_addSuccess(self):
38        """
39        L{WorkerReporter.addSuccess} sends a L{managercommands.AddSuccess}
40        command.
41        """
42        self.workerReporter.addSuccess(self.test)
43        self.assertEqual(self.fakeAMProtocol.lastCall,
44                         managercommands.AddSuccess)
45
46
47    def test_addError(self):
48        """
49        L{WorkerReporter.addError} sends a L{managercommands.AddError} command.
50        """
51        self.workerReporter.addError(self.test, Failure(RuntimeError('error')))
52        self.assertEqual(self.fakeAMProtocol.lastCall,
53                         managercommands.AddError)
54
55
56    def test_addErrorTuple(self):
57        """
58        Adding an error using L{WorkerReporter.addError} as a
59        C{sys.exc_info}-style tuple sends an L{managercommands.AddError}
60        command.
61        """
62        self.workerReporter.addError(
63            self.test, (RuntimeError, RuntimeError('error'), None))
64        self.assertEqual(self.fakeAMProtocol.lastCall,
65                         managercommands.AddError)
66
67
68    def test_addFailure(self):
69        """
70        L{WorkerReporter.addFailure} sends a L{managercommands.AddFailure}
71        command.
72        """
73        self.workerReporter.addFailure(self.test,
74                                       Failure(RuntimeError('fail')))
75        self.assertEqual(self.fakeAMProtocol.lastCall,
76                         managercommands.AddFailure)
77
78
79    def test_addFailureTuple(self):
80        """
81        Adding a failure using L{WorkerReporter.addFailure} as a
82        C{sys.exc_info}-style tuple sends an L{managercommands.AddFailure}
83        message.
84        """
85        self.workerReporter.addFailure(
86            self.test, (RuntimeError, RuntimeError('fail'), None))
87        self.assertEqual(self.fakeAMProtocol.lastCall,
88                         managercommands.AddFailure)
89
90
91    def test_addSkip(self):
92        """
93        L{WorkerReporter.addSkip} sends a L{managercommands.AddSkip} command.
94        """
95        self.workerReporter.addSkip(self.test, 'reason')
96        self.assertEqual(self.fakeAMProtocol.lastCall,
97                         managercommands.AddSkip)
98
99
100    def test_addExpectedFailure(self):
101        """
102        L{WorkerReporter.addExpectedFailure} sends a
103        L{managercommands.AddExpectedFailure} command.
104        protocol.
105        """
106        self.workerReporter.addExpectedFailure(
107            self.test, Failure(RuntimeError('error')), Todo('todo'))
108        self.assertEqual(self.fakeAMProtocol.lastCall,
109                         managercommands.AddExpectedFailure)
110
111
112    def test_addUnexpectedSuccess(self):
113        """
114        L{WorkerReporter.addUnexpectedSuccess} sends a
115        L{managercommands.AddUnexpectedSuccess} command.
116        """
117        self.workerReporter.addUnexpectedSuccess(self.test, Todo('todo'))
118        self.assertEqual(self.fakeAMProtocol.lastCall,
119                         managercommands.AddUnexpectedSuccess)
120