Merge "Re-Enable Promise testcases"
[functest.git] / functest / tests / unit / core / test_unit.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 unit
16 from functest.core import testcase
17
18
19 class PyTestSuiteRunnerTesting(unittest.TestCase):
20
21     def setUp(self):
22         self.psrunner = unit.Suite()
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.unit.unittest.TextTestRunner.run',
28                         return_value=result):
29             self.assertEqual(self.psrunner.run(), status)
30             mock_class.assert_not_called()
31
32     def test_check_suite_null(self):
33         self.assertEqual(self.psrunner.suite, None)
34
35     def test_run_no_ut(self):
36         mock_result = mock.Mock(testsRun=0, errors=[], failures=[])
37         self._test_run(result=mock_result,
38                        status=testcase.TestCase.EX_RUN_ERROR)
39         self.assertEqual(self.psrunner.result, 0)
40         self.assertEqual(self.psrunner.details, {'errors': [], 'failures': []})
41         self.assertEqual(self.psrunner.is_successful(),
42                          testcase.TestCase.EX_TESTCASE_FAILED)
43
44     def test_run_result_ko(self):
45         self.psrunner.criteria = 100
46         mock_result = mock.Mock(testsRun=50, errors=[('test1', 'error_msg1')],
47                                 failures=[('test2', 'failure_msg1')])
48         self._test_run(result=mock_result)
49         self.assertEqual(self.psrunner.result, 96)
50         self.assertEqual(self.psrunner.details,
51                          {'errors': [('test1', 'error_msg1')],
52                           'failures': [('test2', 'failure_msg1')]})
53         self.assertEqual(self.psrunner.is_successful(),
54                          testcase.TestCase.EX_TESTCASE_FAILED)
55
56     def test_run_result_ok(self):
57         mock_result = mock.Mock(testsRun=50, errors=[],
58                                 failures=[])
59         self._test_run(result=mock_result)
60         self.assertEqual(self.psrunner.result, 100)
61         self.assertEqual(self.psrunner.details, {'errors': [], 'failures': []})
62         self.assertEqual(self.psrunner.is_successful(),
63                          testcase.TestCase.EX_OK)
64
65     @mock.patch('unittest.TestLoader')
66     def test_run_name_exc(self, mock_class=None):
67         mock_obj = mock.Mock(side_effect=ImportError)
68         mock_class.side_effect = mock_obj
69         self.assertEqual(self.psrunner.run(name='foo'),
70                          testcase.TestCase.EX_RUN_ERROR)
71         mock_class.assert_called_once_with()
72         mock_obj.assert_called_once_with()
73
74     @mock.patch('unittest.TestLoader')
75     def test_run_name(self, mock_class=None):
76         mock_result = mock.Mock(testsRun=50, errors=[],
77                                 failures=[])
78         mock_obj = mock.Mock()
79         mock_class.side_effect = mock_obj
80         with mock.patch('functest.core.unit.unittest.TextTestRunner.run',
81                         return_value=mock_result):
82             self.assertEqual(self.psrunner.run(name='foo'),
83                              testcase.TestCase.EX_OK)
84         mock_class.assert_called_once_with()
85         mock_obj.assert_called_once_with()
86
87
88 if __name__ == "__main__":
89     logging.disable(logging.CRITICAL)
90     unittest.main(verbosity=2)