blob: af930d5073a10710ca0dc4121087fe6f37550be4 [file] [log] [blame]
Tim Hammerquist545ba4e2017-12-12 02:36:17 +00001#!/usr/bin/env python -tt
2
3"""
4unittests.test_result
5"""
6
7try:
8 import unittest2 as unittest
9except ImportError:
10 import unittest
11
12import mock
13import StringIO
14
15import dbsign.result as R
16
17
18class TestResult(unittest.TestCase):
19 def setUp(self):
20 self.msg = "The quick brown fox."
21
22 def test_result_failure(self):
23 value = self.msg
24 failure = R.Failure(value)
25
26 self.assertFalse(failure.checked)
27 self.assertEqual(value, failure.value)
28 self.assertFalse(failure)
29 self.assertTrue(failure.checked)
30 self.assertRegexpMatches(repr(failure), value)
31
32 def test_result_success(self):
33 value = self.msg
34 success = R.Success(value)
35
36 self.assertFalse(success.checked)
37 self.assertEqual(success.value, value)
38 self.assertTrue(success)
39 self.assertTrue(success.checked)
40 self.assertRegexpMatches(repr(success), value)
41
42 def test_abstract(self):
43 text = self.msg
44 error_text = "does not support boolean evaluation"
45 res = R.Result(text)
46
47 self.assertEqual(text, res.value)
48 with self.assertRaisesRegexp(NotImplementedError, error_text):
49 bool(res)
50
51 def test_renew(self):
52 msg = self.msg
53
54 def fn(res_type):
55 # create instance
56 res = res_type(msg)
57 self.assertFalse(res.checked)
58 # invoke __nonzero__()
59 bool(res)
60 self.assertTrue(res.checked)
61 # return "renewed" object
62 return res.renew()
63
64 for res_type in (R.Success, R.Failure):
65 with self.subTest(resultType=res_type.__name__):
66 res = fn(res_type)
67 self.assertEqual(res_type, res.__class__)
68 self.assertFalse(res.checked)
69 bool(res)
70 self.assertTrue(res.checked)
71
72 @mock.patch('sys.stderr', new_callable=StringIO.StringIO)
73 def test_unchecked_asserts(self, mock_stderr):
74 for res_type in (R.Result, R.Success, R.Failure):
75 with self.subTest(resultType=res_type.__name__):
76 with self.assertRaises(AssertionError):
77 # generate an instance of the passed class
78 res = res_type(res_type.__name__)
79 # call destructor to simulate program termination
80 res.__del__()