Browse Source

test.py ethdev: add color support

The MMGen Project 4 years ago
parent
commit
38ade95f23
2 changed files with 28 additions and 26 deletions
  1. 26 25
      test/test_py_d/ts_ethdev.py
  2. 2 1
      test/test_py_d/ts_shared.py

+ 26 - 25
test/test_py_d/ts_ethdev.py

@@ -144,6 +144,7 @@ class TestSuiteEthdev(TestSuiteBase,TestSuiteShared):
 	extra_spawn_args = ['--regtest=1']
 	tmpdir_nums = [22]
 	solc_vers = ('0.5.1','0.5.3') # 0.5.1: Raspbian Stretch, 0.5.3: Ubuntu Bionic
+	color = True
 	cmd_group = (
 		('setup',               'Ethereum Parity dev mode tests for coin {} (start parity)'.format(coin)),
 		('wallet_upgrade1',     'upgrading the tracking wallet (v1 -> v2)'),
@@ -382,11 +383,11 @@ class TestSuiteEthdev(TestSuiteBase,TestSuiteShared):
 	def txcreate(self,args=[],menu=[],acct='1',non_mmgen_inputs=0,caller='txcreate',
 						interactive_fee = '50G',
 						eth_fee_res     = None,
-						fee_res_fs      = '0.00105 {} (50 gas price in Gwei)',
+						fee_res_data    = ('0.00105','50'),
 						fee_desc        = 'gas price',
 						no_read         = False,
 						tweaks          = [] ):
-		fee_res = fee_res_fs.format(self.proto.coin)
+		fee_res = r'\D{}\D.* {c} (.*\D{}\D.* gas price in Gwei)'.format(*fee_res_data,c=self.proto.coin)
 		t = self.spawn('mmgen-'+caller, self.eth_args + ['-B'] + args)
 		t.expect(r'add \[l\]abel, .*?:.','p', regex=True)
 		t.written_to_file('Account balances listing')
@@ -483,14 +484,11 @@ class TestSuiteEthdev(TestSuiteBase,TestSuiteShared):
 		return self.tx_status(ext='2.345,50000]{}.regtest.sigtx',expect_str='has 2 confirmations')
 
 	def txcreate4(self):
-		args = ['98831F3A:E:2,23.45495']
-		interactive_fee='40G'
-		fee_res_fs='0.00084 {} (40 gas price in Gwei)'
-		return self.txcreate(   args             = args,
+		return self.txcreate(   args             = ['98831F3A:E:2,23.45495'],
 								acct             = '1',
 								non_mmgen_inputs = 0,
-								interactive_fee  = interactive_fee,
-								fee_res_fs       = fee_res_fs,
+								interactive_fee  = '40G',
+								fee_res_data     = ('0.00084','40'),
 								eth_fee_res      = True )
 
 	def txbump(self,ext=',40000]{}.regtest.rawtx',fee='50G',add_args=[]):
@@ -515,27 +513,30 @@ class TestSuiteEthdev(TestSuiteBase,TestSuiteShared):
 	#bal_corr = Decimal('0.0000032') # gas use for token sends varies between ETH and ETC!
 	bal_corr = Decimal('0.0000000') # update: Parity team seems to have corrected this
 
-	def bal(self,n=None):
+	def bal(self,n):
 		t = self.spawn('mmgen-tool', self.eth_args + ['twview','wide=1'])
+		text = strip_ansi_escapes(t.read())
 		for b in bals[n]:
 			addr,amt,adj = b if len(b) == 3 else b + (False,)
 			if adj and self.proto.coin == 'ETC':
 				amt = str(Decimal(amt) + Decimal(adj[1]) * self.bal_corr)
-			pat = r'{}\s+{}\s'.format(addr,amt.replace('.',r'\.'))
-			t.expect(pat,regex=True)
-		t.read()
+			pat = r'\D{}\D.*\D{}\D'.format(addr,amt.replace('.',r'\.'))
+			assert re.search(pat,text), pat
+		ss = f'Total {self.proto.coin}:'
+		assert re.search(ss,text),ss
 		return t
 
 	def token_bal(self,n=None):
 		t = self.spawn('mmgen-tool', self.eth_args + ['--token=mm1','twview','wide=1'])
+		text = strip_ansi_escapes(t.read())
 		for b in token_bals[n]:
 			addr,_amt1,_amt2,adj = b if len(b) == 4 else b + (False,)
 			if adj and self.proto.coin == 'ETC':
 				_amt2 = str(Decimal(_amt2) + Decimal(adj[1]) * self.bal_corr)
-			pat = r'{}\s+{}\s+{}\s'.format(addr,_amt1.replace('.',r'\.'),_amt2.replace('.',r'\.'))
-			t.expect(pat,regex=True)
-		t.expect('Total MM1:')
-		t.read()
+			pat = r'{}\b.*\D{}\D.*\b{}\D'.format(addr,_amt1,_amt2)
+			assert re.search(pat,text), pat
+		ss = 'Total MM1:'
+		assert re.search(ss,text),ss
 		return t
 
 	def bal_getbalance(self,idx,etc_adj=False,extra_args=[]):
@@ -545,9 +546,9 @@ class TestSuiteEthdev(TestSuiteBase,TestSuiteShared):
 		if etc_adj and self.proto.coin == 'ETC':
 			bal1 += self.bal_corr
 		t = self.spawn('mmgen-tool', self.eth_args + extra_args + ['getbalance'])
-		t.expect(r'\n[0-9A-F]{8}: .* '+str(bal1),regex=True)
-		t.expect(r'\nNon-MMGen: .* '+bal2,regex=True)
-		total = t.expect_getend(r'\nTOTAL:\s+',regex=True).split()[0]
+		t.expect(r'\n[0-9A-F]{8}: .*\D'+str(bal1),regex=True)
+		t.expect(r'\nNon-MMGen: .*\D'+bal2,regex=True)
+		total = strip_ansi_escapes(t.expect_getend(r'\nTOTAL:\s+',regex=True)).split()[0]
 		t.read()
 		assert Decimal(bal1) + Decimal(bal2) == Decimal(total)
 		return t
@@ -559,7 +560,7 @@ class TestSuiteEthdev(TestSuiteBase,TestSuiteShared):
 
 	def chk_label(self,lbl_pat,addr='98831F3A:E:3'):
 		t = self.spawn('mmgen-tool', self.eth_args + ['listaddresses','all_labels=1'])
-		t.expect(r'{}\s+\S{{30}}\S+\s+{}\s+'.format(addr,lbl_pat),regex=True)
+		t.expect(r'{}\b.*\S{{30}}\b.*{}\b'.format(addr,lbl_pat),regex=True)
 		return t
 
 	def add_label1(self): return self.add_label(lbl=tw_label_zh)
@@ -635,7 +636,7 @@ class TestSuiteEthdev(TestSuiteBase,TestSuiteShared):
 		txid = self.txsend_ui_common(t,caller=mmgen_cmd,
 			quiet = mmgen_cmd == 'txdo' or not g.debug,
 			bogus_send=False)
-		addr = t.expect_getend('Contract address: ')
+		addr = strip_ansi_escapes(t.expect_getend('Contract address: '))
 		assert (await self.get_exec_status(txid)) != 0, f'Contract {num}:{key} failed to execute. Aborting'
 		if key == 'Token':
 			self.write_to_tmpfile( f'token_addr{num}', addr+'\n' )
@@ -874,11 +875,11 @@ class TestSuiteEthdev(TestSuiteBase,TestSuiteShared):
 
 	def txdo_cached_balances(self,
 			acct = '2',
-			fee_res_fs = '0.00105 {} (50 gas price in Gwei)',
+			fee_res_data = ('0.00105','50'),
 			add_args = ['98831F3A:E:3,0.4321']):
 		args = ['--tx-fee=20G','--cached-balances'] + add_args + [dfl_words_file]
 		os.environ['MMGEN_BOGUS_SEND'] = ''
-		t = self.txcreate(args=args,acct=acct,caller='txdo',fee_res_fs=fee_res_fs,no_read=True)
+		t = self.txcreate(args=args,acct=acct,caller='txdo',fee_res_data=fee_res_data,no_read=True)
 		os.environ['MMGEN_BOGUS_SEND'] = '1'
 		self._do_confirm_send(t,quiet=not g.debug,sure=False)
 		t.read()
@@ -902,7 +903,7 @@ class TestSuiteEthdev(TestSuiteBase,TestSuiteShared):
 			t.expect(' main menu): ',n)
 			t.expect('Is this what you want? (y/N): ','y')
 		t.expect('[R]efresh balance:\b','q')
-		t.expect('Total unspent: {} {}'.format(total,total_coin))
+		t.expect('Total unspent: .*\D{}\D.*{}'.format(total,total_coin),regex=True)
 		t.read()
 		return t
 
@@ -911,7 +912,7 @@ class TestSuiteEthdev(TestSuiteBase,TestSuiteShared):
 	def token_txdo_cached_balances(self):
 		return self.txdo_cached_balances(
 					acct='1',
-					fee_res_fs='0.0026 {} (50 gas price in Gwei)',
+					fee_res_data=('0.0026','50'),
 					add_args=['--token=mm1','98831F3A:E:12,43.21'])
 
 	def token_txcreate_refresh_balances(self):

+ 2 - 1
test/test_py_d/ts_shared.py

@@ -70,7 +70,8 @@ class TestSuiteShared(object):
 				t.expect('or gas price: ',interactive_fee+'\n')
 			else:
 				t.send(interactive_fee+'\n')
-			if fee_res: t.expect(fee_res)
+			if fee_res:
+				t.expect(fee_res,regex=True)
 			t.expect('OK? (Y/n): ','y')
 
 		t.expect('(Y/n): ','\n')     # chg amt OK?