File: test__actions.py

package info (click to toggle)
python-pyforge 1.4.0-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 464 kB
  • sloc: python: 3,666; makefile: 12; sh: 7
file content (79 lines) | stat: -rw-r--r-- 3,134 bytes parent folder | download | duplicates (3)
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
from .ut_utils import ForgeTestCase
from .ut_utils import Checkpoint
from forge import ConflictingActions
from sentinels import NOTHING

class ActionsTest(ForgeTestCase):
    def setUp(self):
        super(ActionsTest, self).setUp()
        self.stub = self.forge.create_function_stub(lambda *args, **kwargs: None)
    def test__return_value(self):
        rv = self.stub(1, 2, 3).and_return(666)
        self.assertEqual(rv, 666)
        self.forge.replay()
        self.assertEqual(666, self.stub(1, 2, 3))
        self.assertNoMoreCalls()
        self.forge.verify()
    def test__raised_exception(self):
        raised = Exception()
        rv = self.stub(1, 2, 3).and_raise(raised)
        self.assertIs(rv, raised)
        self.forge.replay()
        with self.assertRaises(Exception) as caught:
            self.stub(1, 2, 3)
        self.assertIs(caught.exception, raised)
        self.assertNoMoreCalls()
        self.forge.verify()
    def test__conflicting_actions(self):
        expected_call = self.stub(1, 2, 3)
        expected_call.and_return(2)
        with self.assertRaises(ConflictingActions):
            expected_call.and_raise(Exception())
        #conflict should not affect existing expectations
        self.assertEqual(expected_call._return_value, 2)
        self.assertIs(expected_call._raised_exception, NOTHING)

        expected_call = self.stub(1, 2, 3)
        exc = Exception()
        expected_call.and_raise(exc)
        with self.assertRaises(ConflictingActions):
            expected_call.and_return(2)
                #conflict should not affect existing expectations
        self.assertIs(expected_call._return_value, NOTHING)
        self.assertIs(expected_call._raised_exception, exc)
        self.forge.reset()
    def test__and_call(self):
        return_value = 666
        cp = Checkpoint()
        rv = self.stub(1, 2, 3).and_call(cp.trigger).and_return(return_value)
        self.assertEqual(rv, return_value)
        self.forge.replay()
        rv = self.stub(1, 2, 3)
        self.assertEqual(rv, return_value)
        self.assertTrue(cp.called)
    def test__and_call__specify_args_kwargs(self):
        return_value = 666
        cp = Checkpoint()
        def callback(a, b, c, d):
            self.assertEqual((a, b, c, d), (1, 2, 3, 4))
            cp.trigger()
        rv = self.stub(1, 2, 3).and_call(callback, args=(1, 2, 3), kwargs=dict(d=4)).and_return(return_value)
        self.assertEqual(rv, return_value)
        self.forge.replay()
        rv = self.stub(1, 2, 3)
        self.assertEqual(rv, return_value)
        self.assertTrue(cp.called)

    def test__and_call_with_args(self):
        return_value = 666
        cp = Checkpoint()
        def trigger(*args, **kwargs):
            self.assertEqual(args, (1, 2, 3))
            self.assertEqual(kwargs, dict(d=4))
            cp.trigger()
        rv = self.stub(1, 2, 3, d=4).and_call_with_args(trigger).and_return(return_value)
        self.assertEqual(rv, return_value)
        self.forge.replay()
        rv = self.stub(1, 2, 3, d=4)
        self.assertEqual(rv, return_value)
        self.assertTrue(cp.called)