Merge "Analyse code when running tox"
[functest.git] / functest / tests / unit / core / test_pytest_suite_runner.py
1 #!/usr/bin/env python
2
3 # All rights reserved. This program and the accompanying materials
4 # are made available under the terms of the Apache License, Version 2.0
5 # which accompanies this distribution, and is available at
6 # http://www.apache.org/licenses/LICENSE-2.0
7
8 # pylint: disable=missing-docstring
9
10 import logging
11 import unittest
12
13 import mock
14
15 from functest.core import pytest_suite_runner
16 from functest.core import testcase
17
18
19 class PyTestSuiteRunnerTesting(unittest.TestCase):
20
21     def setUp(self):
22         self.psrunner = pytest_suite_runner.PyTestSuiteRunner()
23
24     @mock.patch('unittest.TestLoader')
25     def _test_run(self, mock_class=None, result=mock.Mock(),
26                   status=testcase.TestCase.EX_OK):
27         with mock.patch('functest.core.pytest_suite_runner.'
28                         'unittest.TextTestRunner.run',
29                         return_value=result):
30             self.assertEqual(self.psrunner.run(), status)
31             mock_class.assert_not_called()
32
33     def test_check_suite_null(self):
34         self.assertEqual(self.psrunner.suite, None)
35
36     def test_run_no_ut(self):
37         mock_result = mock.Mock(testsRun=0, errors=[], failures=[])
38         self._test_run(result=mock_result,
39                        status=testcase.TestCase.EX_RUN_ERROR)
40         self.assertEqual(self.psrunner.result, 0)
41         self.assertEqual(self.psrunner.details, {'errors': [], 'failures': []})
42         self.assertEqual(self.psrunner.is_successful(),
43                          testcase.TestCase.EX_TESTCASE_FAILED)
44
45     def test_run_result_ko(self):
46         self.psrunner.criteria = 100
47         mock_result = mock.Mock(testsRun=50, errors=[('test1', 'error_msg1')],
48                                 failures=[('test2', 'failure_msg1')])
49         self._test_run(result=mock_result)
50         self.assertEqual(self.psrunner.result, 96)
51         self.assertEqual(self.psrunner.details,
52                          {'errors': [('test1', 'error_msg1')],
53                           'failures': [('test2', 'failure_msg1')]})
54         self.assertEqual(self.psrunner.is_successful(),
55                          testcase.TestCase.EX_TESTCASE_FAILED)
56
57     def test_run_result_ok(self):
58         mock_result = mock.Mock(testsRun=50, errors=[],
59                                 failures=[])
60         self._test_run(result=mock_result)
61         self.assertEqual(self.psrunner.result, 100)
62         self.assertEqual(self.psrunner.details, {'errors': [], 'failures': []})
63         self.assertEqual(self.psrunner.is_successful(),
64                          testcase.TestCase.EX_OK)
65
66     @mock.patch('unittest.TestLoader')
67     def test_run_name_exc(self, mock_class=None):
68         mock_obj = mock.Mock(side_effect=ImportError)
69         mock_class.side_effect = mock_obj
70         self.assertEqual(self.psrunner.run(name='foo'),
71                          testcase.TestCase.EX_RUN_ERROR)
72         mock_class.assert_called_once_with()
73         mock_obj.assert_called_once_with()
74
75     @mock.patch('unittest.TestLoader')
76     def test_run_name(self, mock_class=None):
77         mock_result = mock.Mock(testsRun=50, errors=[],
78                                 failures=[])
79         mock_obj = mock.Mock()
80         mock_class.side_effect = mock_obj
81         with mock.patch('functest.core.pytest_suite_runner.'
82                         'unittest.TextTestRunner.run',
83                         return_value=mock_result):
84             self.assertEqual(self.psrunner.run(name='foo'),
85                              testcase.TestCase.EX_OK)
86         mock_class.assert_called_once_with()
87         mock_obj.assert_called_once_with()
88
89
90 if __name__ == "__main__":
91     logging.disable(logging.CRITICAL)
92     unittest.main(verbosity=2)