mmgen-wallet/test/modtest_d/flags.py

85 lines
2.2 KiB
Python
Raw Normal View History

2021-08-10 19:38:20 +00:00
#!/usr/bin/env python3
2022-11-14 09:54:07 +00:00
2021-08-10 19:38:20 +00:00
"""
test.modtest_d.flags: unit test for the MMGen suite's ClassFlags class
2021-08-10 19:38:20 +00:00
"""
2024-10-18 10:32:14 +00:00
from mmgen.flags import ClassOpts, ClassFlags
2024-10-18 10:32:14 +00:00
from ..include.common import qmsg, qmsg_r, vmsg
2021-08-10 19:38:20 +00:00
class unit_test:
2021-08-10 19:38:20 +00:00
2024-10-18 10:32:14 +00:00
def run_test(self, name, ut):
2021-08-10 19:38:20 +00:00
class MyClassOpts(ClassOpts):
reserved_attrs = ('foo',)
2021-08-10 19:38:20 +00:00
class cls1:
avail_opts = ()
avail_flags = ()
2024-10-18 10:32:14 +00:00
def __init__(self, opts=None, flags=None):
self.opt = ClassOpts(self, opts)
self.flag = ClassFlags(self, flags)
2021-08-10 19:38:20 +00:00
class cls2(cls1):
2024-10-18 10:32:14 +00:00
avail_opts = ('foo', 'bar')
2021-08-10 19:38:20 +00:00
avail_flags = ('baz',)
class cls3(cls1):
avail_opts = ('_foo',)
class cls4(cls1):
avail_opts = ('foo',)
2024-10-18 10:32:14 +00:00
def __init__(self, opts=None, flags=None):
self.opt = MyClassOpts(self, opts)
2021-08-10 19:38:20 +00:00
def test_flags():
def gen():
2024-10-18 10:32:14 +00:00
for n, cls in enumerate((
2021-08-10 19:38:20 +00:00
cls1(),
cls2(),
cls2(opts=['bar']),
cls2(flags=['baz']),
)):
vmsg(f'Cfg {n+1}:')
2024-10-18 10:32:14 +00:00
for k in ('opt', 'flag'):
vmsg(f' {k}s: {getattr(cls, k)}')
2021-08-10 19:38:20 +00:00
yield cls
return list(gen())
def test_flags_err(d):
def bad1(): d[1].flag.foo = False
def bad2(): d[1].opt.baz = False
def bad3(): cls3()
def bad4(): cls4()
def bad5(): cls1(opts='foo')
def bad6(): cls2(opts=['qux'])
def bad7(): d[1].flag.baz = False
def bad8(): d[3].flag.baz = True
def bad9(): d[1].flag.baz = 'x'
ut.process_bad_data((
2024-10-18 10:32:14 +00:00
('flag (1)', 'ClassFlagsError', 'unrecognized flag', bad1),
('opt (1)', 'ClassFlagsError', 'unrecognized opt', bad2),
('avail_opts (1)', 'ClassFlagsError', 'underscore', bad3),
('avail_opts (2)', 'ClassFlagsError', 'reserved name', bad4),
('class invocation (1)', 'AssertionError', 'list or tuple', bad5),
('class invocation (2)', 'ClassFlagsError', 'unrecognized opt', bad6),
('flag (2)', 'ClassFlagsError', 'not set', bad7),
('flag (3)', 'ClassFlagsError', 'already set', bad8),
('flag (4)', 'AssertionError', 'not boolean', bad9),
2021-08-10 19:38:20 +00:00
))
qmsg_r('Testing flags and opts...')
vmsg('')
classes = test_flags()
qmsg('OK')
qmsg_r('Testing error handling for flags and opts...')
vmsg('')
test_flags_err(classes)
qmsg('OK')
return True