From 9c5f4de9360173b76d7d71d6464440cd2793c8da Mon Sep 17 00:00:00 2001 From: The MMGen Project Date: Sun, 5 Sep 2021 18:40:44 +0000 Subject: [PATCH] scripts/create-token.py, test.py oneshot_warning; minor fixes --- scripts/create-token.py | 23 +++++++++++------------ test/test_py_d/ts_misc.py | 8 +++++--- 2 files changed, 16 insertions(+), 15 deletions(-) diff --git a/scripts/create-token.py b/scripts/create-token.py index 5753105a..30485732 100755 --- a/scripts/create-token.py +++ b/scripts/create-token.py @@ -24,9 +24,9 @@ from mmgen.common import * ti = namedtuple('token_param_info',['default','conversion','test']) class TokenData: fields = ('decimals','supply','name','symbol','owner_addr') - decimals = ti('18', int, lambda s: s.isdigit() and 0 < int(s) <= 36) + decimals = ti('18', int, lambda s: s.isascii() and s.isdigit() and 0 < int(s) <= 36) name = ti(None, str, lambda s: s.isascii() and s.isprintable() and len(s) < 256) - supply = ti(None, int, lambda s: s.isdigit() and 0 < int(s) <= 2**256 - 1) + supply = ti(None, int, lambda s: s.isascii() and s.isdigit() and 0 < int(s) <= 2**256 - 1) symbol = ti(None, str, lambda s: s.isascii() and s.isalnum() and len(s) <= 20) owner_addr = ti(None, str, lambda s: s.isascii() and s.isalnum() and len(s) == 40) # checked separately @@ -180,20 +180,19 @@ def create_src(proto,template,token_data,owner_addr): def gen(): for k in token_data.fields: field = getattr(token_data,k) - val = ( - owner_addr if k == 'owner_addr' else - getattr(opt,k) if getattr(opt,k,None) else - field.default if field.default is not None else - die(1,f'The --{k} option must be specified') - ) - if k == 'owner_addr': from mmgen.obj import is_coin_addr if not is_coin_addr( proto, owner_addr.lower() ): die(1,f'{owner_addr}: not a valid {proto.coin} coin address') - val = '0x' + val - elif not field.test(val): - die(1,f'{val!r}: invalid parameter for option --{k}') + val = '0x' + owner_addr + else: + val = ( + getattr(opt,k) if getattr(opt,k,None) else + field.default if field.default is not None else + die(1,f'The --{k} option must be specified') + ) + if not field.test(val): + die(1,f'{val!r}: invalid parameter for option --{k}') yield(k,field.conversion(val)) diff --git a/test/test_py_d/ts_misc.py b/test/test_py_d/ts_misc.py index ad97f810..6cc40d26 100755 --- a/test/test_py_d/ts_misc.py +++ b/test/test_py_d/ts_misc.py @@ -123,8 +123,8 @@ class TestSuiteOutput(TestSuiteBase): def oneshot_warning(self): t = self.spawn('test/misc/oneshot_warning.py',cmd_dir='.') - t.expect('pw\nwg1') for s in ( + 'pw\nwg1', 'foo is experimental', 'wg2', 'The bar command is dangerous', 'wg3', 'baz variant alpha', @@ -132,12 +132,14 @@ class TestSuiteOutput(TestSuiteBase): 'w1', 'foo variant alpha', 'w2', 'foo variant beta', 'w3', 'bar is experimental', - 'bottom', + 'pw', "passphrase from file 'A'", "passphrase from file 'B'", - 'bottom', + 'wg1\nwg2\nwg3\nwg4\nw1\nw2\nw3', + 'pw', "passphrase from file 'A'", "passphrase from file 'B'", + 'wg1\nwg2\nwg3\nwg4\nw1\nw2\nw3', 'bottom', ): t.expect(s)