@@ -238,46 +238,48 @@ def test_parseTransaction():
238238 # CLI string: result (reg, offset, read_size, write_vals)
239239 # regname Read from named register (str) 'regname'
240240 "foo" : ("foo" , 0 , None , None ),
241- # regaddr Read from explicit address (int) 'regaddr'
242- "0x100" : (0x100 , 0 , None , None ),
243241 # regname=val Write (int) 'val' to named register (str) 'regname'
244242 "foo=42" : ("foo" , 0 , 0 , 42 ),
245243 "bar=0x42" : ("bar" , 0 , 0 , 0x42 ),
246244 "foo_baz=0b100" : ("foo_baz" , 0 , 0 , 0b100 ),
247- # regaddr=val Write (int) 'val' to explicit address (int) 'regaddr'
248- "0x123=100" : (0x123 , 0 , 0 , 100 ),
249- "123=0xabc" : (123 , 0 , 0 , 0xabc ),
250- "0b1010=-10" : (0b1010 , 0 , 0 , - 10 ),
251245 # regname=val0,...,valN Write (int) 'val0' through 'valN' to consecutive addresses beginning at the
252246 # address of named register (str) 'regname'
253247 "reg_foo=1,2,3,4,5" : ("reg_foo" , 0 , 0 , [1 , 2 , 3 , 4 , 5 ]),
254- # regaddr=val0,...,valN Write (int) 'val0' through 'valN' to consecutive addresses beginning at
255- # address (int) 'regaddr'
256- "0x4000=1,-1,0,42,0x10" : (0x4000 , 0 , 0 , [1 , - 1 , 0 , 42 , 0x10 ]),
257248 # regname+offset Read from address = romx['regname']['base_addr'] + (int) 'offset'
258249 "BINGO+100" : ("BINGO" , 100 , None , None ),
259- # regaddr+offset Read from address = (int) 'regaddr' + (int) 'offset'
260- "0x100+100" : (0x100 , 100 , None , None ),
261250 # regname:size Read (int) 'size' elements starting from address romx['regname']['base_addr']
262251 "_reg_:32" : ("_reg_" , 0 , 32 , None ),
263- # regaddr:size Read (int) 'size' elements starting from (int) 'regaddr'
264- "0:0xff" : (0 , 0 , 0xff , None ),
265252 # regname+offset=val Write (int) 'val' to address romx['regname']['base_addr'] + (int) 'offset'
266253 "bandit+0x100=5000" : ("bandit" , 0x100 , 0 , 5000 ),
267254 # regname+offset=val0,...,valN Write (int) 'val0' through 'valN' to consecutive addresses beginning at
268255 # address romx['regname']['base_addr'] + (int) 'offset'
269256 "status+0x20=50,40,0x30" : ("status" , 0x20 , 0 , [50 , 40 , 0x30 ]),
270- # regaddr+offset=val Write (int) 'val' to address (int) 'regaddr' + (int) 'offset'
271- "128+0xc0=-1000" : (128 , 0xc0 , 0 , - 1000 ),
272- # regaddr+offset=val0,...,valN Write (int) 'val0' through 'valN' to consecutive addresses beginning at
273- # address (int) 'regaddr'
274- "0x128+0xc0=1,0,1,0,2" : (0x128 , 0xc0 , 0 , [1 , 0 , 1 , 0 , 2 ]),
275257 # regname+offset:size Read (int) 'size' elements starting from address romx['regname']['base_addr'] + \
276258 # (int) 'offset'
277259 "Socks+0x100:100" : ("Socks" , 0x100 , 100 , None ),
278- # regaddr+offset:size Read (int) 'size' elements starting from (int) 'regaddr' + (int) 'offset'
279- "0x4000+15:0b1111" : (0x4000 , 15 , 0b1111 , None ),
280260 }
261+ bads = [
262+ # regaddr Read from explicit address (int) 'regaddr'
263+ "0x100" ,
264+ # regaddr=val Write (int) 'val' to explicit address (int) 'regaddr'
265+ "0x123=100" ,
266+ "123=0xabc" ,
267+ "0b1010=-10" ,
268+ # regaddr=val0,...,valN Write (int) 'val0' through 'valN' to consecutive addresses beginning at
269+ # address (int) 'regaddr'
270+ "0x4000=1,-1,0,42,0x10" ,
271+ # regaddr+offset Read from address = (int) 'regaddr' + (int) 'offset'
272+ "0x100+100" ,
273+ # regaddr:size Read (int) 'size' elements starting from (int) 'regaddr'
274+ "0:0xff" ,
275+ # regaddr+offset=val Write (int) 'val' to address (int) 'regaddr' + (int) 'offset'
276+ "128+0xc0=-1000" ,
277+ # regaddr+offset=val0,...,valN Write (int) 'val0' through 'valN' to consecutive addresses beginning at
278+ # address (int) 'regaddr'
279+ "0x128+0xc0=1,0,1,0,2" ,
280+ # regaddr+offset:size Read (int) 'size' elements starting from (int) 'regaddr' + (int) 'offset'
281+ "0x4000+15:0b1111" ,
282+ ]
281283 errors = 0
282284 for _input , _expected in dd .items ():
283285 try :
@@ -287,6 +289,17 @@ def test_parseTransaction():
287289 if result != _expected :
288290 print ("Failed on input: {}.\n Expected: {}\n Result: {}" .format (_input , _expected , result ))
289291 errors += 1
292+
293+ for _input in bads :
294+ try :
295+ result = parseTransaction (_input )
296+ print (f"Expected an exception for input: { _input } but got { result } " )
297+ errors += 1
298+ except ValueError :
299+ pass
300+ except Exception as ex :
301+ print (f"Unexpected exception for input: { _input } : { ex } " )
302+ errors += 1
290303 return errors
291304
292305
@@ -318,4 +331,8 @@ def runServer(args):
318331 parserTest = subparsers .add_parser ("test" , help = "Run regression tests." )
319332 parserTest .set_defaults (handler = doTests )
320333 args = parser .parse_args ()
321- sys .exit (args .handler (args ))
334+ try :
335+ args .handler (args )
336+ except Exception as e :
337+ print (f"Error: { e } " , file = sys .stderr )
338+ sys .exit (1 )
0 commit comments