Skip to content

Commit 1dff063

Browse files
committed
Add tests for WarningAggregator class
Signed-off-by: John Pennycook <john.pennycook@intel.com>
1 parent a166b8c commit 1dff063

File tree

1 file changed

+119
-0
lines changed

1 file changed

+119
-0
lines changed

tests/cli/test_warning_aggregator.py

Lines changed: 119 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,119 @@
1+
# Copyright (C) 2019-2024 Intel Corporation
2+
# SPDX-License-Identifier: BSD-3-Clause
3+
4+
import logging
5+
import unittest
6+
7+
from codebasin.cli import WarningAggregator
8+
9+
10+
class TestWarningAggregator(unittest.TestCase):
11+
"""
12+
Test WarningAggregator class.
13+
"""
14+
15+
def test_constructor(self):
16+
"""Check constructor arguments"""
17+
wa = WarningAggregator()
18+
self.assertEqual(len(wa.meta_warnings), 3)
19+
20+
def test_filter(self):
21+
"""Check filter inspects warnings correctly"""
22+
wa = WarningAggregator()
23+
record = logging.makeLogRecord(
24+
{
25+
"msg": "test1",
26+
"levelname": "WARNING",
27+
"levelno": logging.WARNING,
28+
},
29+
)
30+
self.assertTrue(wa.filter(record))
31+
self.assertEqual(wa.meta_warnings[0]._count, 1)
32+
self.assertEqual(wa.meta_warnings[1]._count, 0)
33+
self.assertEqual(wa.meta_warnings[2]._count, 0)
34+
35+
record = logging.makeLogRecord(
36+
{
37+
"msg": "Missing user include",
38+
"levelname": "WARNING",
39+
"levelno": logging.WARNING,
40+
},
41+
)
42+
self.assertTrue(wa.filter(record))
43+
self.assertEqual(wa.meta_warnings[0]._count, 2)
44+
self.assertEqual(wa.meta_warnings[1]._count, 1)
45+
self.assertEqual(wa.meta_warnings[2]._count, 0)
46+
47+
record = logging.makeLogRecord(
48+
{
49+
"msg": "Missing system include",
50+
"levelname": "WARNING",
51+
"levelno": logging.WARNING,
52+
},
53+
)
54+
self.assertTrue(wa.filter(record))
55+
self.assertEqual(wa.meta_warnings[0]._count, 3)
56+
self.assertEqual(wa.meta_warnings[1]._count, 1)
57+
self.assertEqual(wa.meta_warnings[2]._count, 1)
58+
59+
# NB: This matches on message but not levelname.
60+
record = logging.makeLogRecord(
61+
{
62+
"msg": "Missing system include",
63+
"levelname": "ERROR",
64+
"levelno": logging.ERROR,
65+
},
66+
)
67+
self.assertTrue(wa.filter(record))
68+
self.assertEqual(wa.meta_warnings[0]._count, 3)
69+
self.assertEqual(wa.meta_warnings[1]._count, 1)
70+
self.assertEqual(wa.meta_warnings[2]._count, 1)
71+
72+
def test_warn(self):
73+
"""Check warn produces expected logging messages"""
74+
logging.disable(logging.NOTSET)
75+
logger = logging.getLogger("codebasin")
76+
77+
wa = WarningAggregator()
78+
with self.assertNoLogs(logger):
79+
wa.warn(logger)
80+
81+
wa.filter(
82+
logging.makeLogRecord(
83+
{
84+
"msg": "test1",
85+
"levelname": "WARNING",
86+
"levelno": logging.WARNING,
87+
},
88+
),
89+
)
90+
wa.filter(
91+
logging.makeLogRecord(
92+
{
93+
"msg": "Missing user include",
94+
"levelname": "WARNING",
95+
"levelno": logging.WARNING,
96+
},
97+
),
98+
)
99+
wa.filter(
100+
logging.makeLogRecord(
101+
{
102+
"msg": "Missing system include",
103+
"levelname": "WARNING",
104+
"levelno": logging.WARNING,
105+
},
106+
),
107+
)
108+
with self.assertLogs(logger, level="WARNING") as cm:
109+
wa.warn(logger)
110+
111+
self.assertRegex(cm.output[0], "3 warnings generated")
112+
self.assertRegex(cm.output[1], "user include files")
113+
self.assertRegex(cm.output[2], "system include files")
114+
115+
logging.disable()
116+
117+
118+
if __name__ == "__main__":
119+
unittest.main()

0 commit comments

Comments
 (0)