1from unittest2.test.support import LoggingResult
2
3import unittest2
4
5
6class Test_TestSkipping(unittest2.TestCase):
7
8    def test_skipping(self):
9        class Foo(unittest2.TestCase):
10            def test_skip_me(self):
11                self.skipTest("skip")
12        events = []
13        result = LoggingResult(events)
14        test = Foo("test_skip_me")
15        test.run(result)
16        self.assertEqual(events, ['startTest', 'addSkip', 'stopTest'])
17        self.assertEqual(result.skipped, [(test, "skip")])
18
19        # Try letting setUp skip the test now.
20        class Foo(unittest2.TestCase):
21            def setUp(self):
22                self.skipTest("testing")
23            def test_nothing(self): pass
24        events = []
25        result = LoggingResult(events)
26        test = Foo("test_nothing")
27        test.run(result)
28        self.assertEqual(events, ['startTest', 'addSkip', 'stopTest'])
29        self.assertEqual(result.skipped, [(test, "testing")])
30        self.assertEqual(result.testsRun, 1)
31
32    def test_skipping_decorators(self):
33        op_table = ((unittest2.skipUnless, False, True),
34                    (unittest2.skipIf, True, False))
35        for deco, do_skip, dont_skip in op_table:
36            class Foo(unittest2.TestCase):
37                @deco(do_skip, "testing")
38                def test_skip(self):
39                    pass
40
41                @deco(dont_skip, "testing")
42                def test_dont_skip(self):
43                    pass
44
45            test_do_skip = Foo("test_skip")
46            test_dont_skip = Foo("test_dont_skip")
47            suite = unittest2.TestSuite([test_do_skip, test_dont_skip])
48            events = []
49            result = LoggingResult(events)
50            suite.run(result)
51            self.assertEqual(len(result.skipped), 1)
52            expected = ['startTest', 'addSkip', 'stopTest',
53                        'startTest', 'addSuccess', 'stopTest']
54            self.assertEqual(events, expected)
55            self.assertEqual(result.testsRun, 2)
56            self.assertEqual(result.skipped, [(test_do_skip, "testing")])
57            self.assertTrue(result.wasSuccessful())
58
59    def test_skip_class(self):
60        class Foo(unittest2.TestCase):
61            def test_1(self):
62                record.append(1)
63
64        # was originally a class decorator...
65        Foo = unittest2.skip("testing")(Foo)
66        record = []
67        result = unittest2.TestResult()
68        test = Foo("test_1")
69        suite = unittest2.TestSuite([test])
70        suite.run(result)
71        self.assertEqual(result.skipped, [(test, "testing")])
72        self.assertEqual(record, [])
73
74    def test_expected_failure(self):
75        class Foo(unittest2.TestCase):
76            @unittest2.expectedFailure
77            def test_die(self):
78                self.fail("help me!")
79        events = []
80        result = LoggingResult(events)
81        test = Foo("test_die")
82        test.run(result)
83        self.assertEqual(events,
84                         ['startTest', 'addExpectedFailure', 'stopTest'])
85        self.assertEqual(result.expectedFailures[0][0], test)
86        self.assertTrue(result.wasSuccessful())
87
88    def test_unexpected_success(self):
89        class Foo(unittest2.TestCase):
90            @unittest2.expectedFailure
91            def test_die(self):
92                pass
93        events = []
94        result = LoggingResult(events)
95        test = Foo("test_die")
96        test.run(result)
97        self.assertEqual(events,
98                         ['startTest', 'addUnexpectedSuccess', 'stopTest'])
99        self.assertFalse(result.failures)
100        self.assertEqual(result.unexpectedSuccesses, [test])
101        self.assertTrue(result.wasSuccessful())
102
103    def test_skip_doesnt_run_setup(self):
104        class Foo(unittest2.TestCase):
105            wasSetUp = False
106            wasTornDown = False
107            def setUp(self):
108                Foo.wasSetUp = True
109            def tornDown(self):
110                Foo.wasTornDown = True
111            @unittest2.skip('testing')
112            def test_1(self):
113                pass
114
115        result = unittest2.TestResult()
116        test = Foo("test_1")
117        suite = unittest2.TestSuite([test])
118        suite.run(result)
119        self.assertEqual(result.skipped, [(test, "testing")])
120        self.assertFalse(Foo.wasSetUp)
121        self.assertFalse(Foo.wasTornDown)
122
123    def test_decorated_skip(self):
124        def decorator(func):
125            def inner(*a):
126                return func(*a)
127            return inner
128
129        class Foo(unittest2.TestCase):
130            @decorator
131            @unittest2.skip('testing')
132            def test_1(self):
133                pass
134
135        result = unittest2.TestResult()
136        test = Foo("test_1")
137        suite = unittest2.TestSuite([test])
138        suite.run(result)
139        self.assertEqual(result.skipped, [(test, "testing")])
140
141
142if __name__ == '__main__':
143    unittest2.main()
144