lib.cdc: add tests for MultiReg.
[nmigen.git] / nmigen / test / tools.py
1 import re
2 import unittest
3 import warnings
4 from contextlib import contextmanager
5
6 from ..hdl.ast import *
7
8
9 __all__ = ["FHDLTestCase"]
10
11
12 class FHDLTestCase(unittest.TestCase):
13 def assertRepr(self, obj, repr_str):
14 obj = Statement.wrap(obj)
15 repr_str = re.sub(r"\s+", " ", repr_str)
16 repr_str = re.sub(r"\( (?=\()", "(", repr_str)
17 repr_str = re.sub(r"\) (?=\))", ")", repr_str)
18 self.assertEqual(repr(obj), repr_str.strip())
19
20 @contextmanager
21 def assertRaises(self, exception, msg=None):
22 with super().assertRaises(exception) as cm:
23 yield
24 if msg is not None:
25 # WTF? unittest.assertRaises is completely broken.
26 self.assertEqual(str(cm.exception), msg)
27
28 @contextmanager
29 def assertRaisesRegex(self, exception, regex=None):
30 with super().assertRaises(exception) as cm:
31 yield
32 if regex is not None:
33 # unittest.assertRaisesRegex also seems broken...
34 self.assertRegex(str(cm.exception), regex)
35
36 @contextmanager
37 def assertWarns(self, category, msg=None):
38 with warnings.catch_warnings(record=True) as warns:
39 yield
40 self.assertEqual(len(warns), 1)
41 self.assertEqual(warns[0].category, category)
42 if msg is not None:
43 self.assertEqual(str(warns[0].message), msg)