# UnitTest_FileProcess.py
###### tags: `UnitTest_FileProcess`
```
import os
import MJ_tiletest_new
from MJ_tiletest_new import hu_test
# C:\\Users\\chsta\\Desktop\\Majong_Project\\test\\turn3_0327\\
# C:\\Users\\chsta\\Desktop\\Majong_Project\\windows_MJ_new\\windows\\enter\\Board\\Mahjong\\33test\\
#dir = 'C:\\Users\\chsta\\Desktop\\Majong_Project\\test\\turn3_0327\\'
'''
dir_dict = {'a1': 'C:\\Users\\chsta\\Desktop\\Majong_Project\\windows_MJ_new\\windows\\open\\Board\\Mahjong\\a1_vs_a3_vs_a4_vs_a2_2022_03_21_03_09_54\\',
'a3': 'C:\\Users\\chsta\\Desktop\\Majong_Project\\windows_MJ_new\\windows\\enter2\\Board\\Mahjong\\a1_vs_a3_vs_a4_vs_a2_2022_03_21_03_09_54\\',
'a4': 'C:\\Users\\chsta\\Desktop\\Majong_Project\\windows_MJ_new\\windows\\enter3\\Board\\Mahjong\\a1_vs_a3_vs_a4_vs_a2_2022_03_21_03_09_54\\',
'a2': 'C:\\Users\\chsta\\Desktop\\Majong_Project\\windows_MJ_new\\windows\\enter\\Board\\Mahjong\\500contest\\'}
out_dir = 'C:\\Users\\chsta\\Desktop\\Majong_Project\\test\\turn4_0330\\'
'''
dir_dict = {'a1': 'C:\\Users\\chsta\\Desktop\\Majong_Project\\test\\2973r\\a1\\',
'a2': 'C:\\Users\\chsta\\Desktop\\Majong_Project\\test\\2973r\\a2\\',
'a3': 'C:\\Users\\chsta\\Desktop\\Majong_Project\\test\\2973r\\a3\\',
'a4': 'C:\\Users\\chsta\\Desktop\\Majong_Project\\test\\2973r\\a4\\'}
out_dir = 'C:\\Users\\chsta\\Desktop\\Majong_Project\\test\\2973r\\test\\'
#dir_dict = {'a1': 'C:\\Users\\chsta\\Desktop\\Majong_Project\\test\\debug\\old_file\\'}
#out_dir = 'C:\\Users\\chsta\\Desktop\\Majong_Project\\test\\debug\\new_file\\'
def check_chucker(txt_list):
player_game_wind = txt_list[2].split()[2]
for i in range(len(txt_list)-1, 0, -1):
if txt_list[i].find('/throw') != -1:
chucker_game_wind = txt_list[i].split()[1]
if player_game_wind == chucker_game_wind:
return True
else:
break
return False
def print_info(txt_list, player_card):
print(' out: ' + outfilename)
#print(" game_wind = " + str(txt_list[2].split()[2]))
#print(" txt_list = " + str(txt_list))
#print(" txt_list_len = " + str(len(txt_list)))
#print(" player = " + dir_k)
print(" player_card =", player_card)
def get_player_card(txt_list, wind, master):
begin = 1
if wind == master:
end = 18
else:
end = 17
player_card = txt_list[4].split()[begin:end]
#player_card_int = [int(c) for c in player_card]
return player_card
def modify_player_card(player_card, txt_list, wind, file):
#print(' last txt_list =', txt_list[-1])
for i in range(0, len(txt_list)):
line_list = txt_list[i].split()
#print(i,line_list)
if line_list[0] == '/throw' and line_list[1] == str(wind):
player_card.remove(line_list[2])
elif line_list[0] == '/mo':
player_card.append(line_list[1])
elif line_list[0] == '/eat' and line_list[1] == str(wind):
player_card.remove(line_list[2])
player_card.remove(line_list[4])
elif line_list[0] == '/pong' and line_list[1] == str(wind):
player_card.remove(line_list[3])
player_card.remove(line_list[4])
elif line_list[0] == '/gong' and line_list[1] == str(wind) and line_list[2] == 4:
player_card.remove(line_list[4])
player_card.remove(line_list[5])
player_card.remove(line_list[6])
elif line_list[0] == '/gong' and line_list[1] == str(wind) and line_list[2] == 0:
player_card.remove(line_list[3])
player_card.remove(line_list[4])
player_card.remove(line_list[5])
player_card.remove(line_list[6])
elif line_list[0] == '/gong' and line_list[1] == str(wind) and line_list[2] == 1:
player_card.remove(line_list[3])
return player_card
def is_ready_hand(player_card, file):
#player_card.pop()
player_card_int = [int(c) for c in player_card]
copy_card = player_card_int.copy()
for j in range(len(player_card_int)):
copy_card = player_card_int.copy()
copy_card.pop(j)
for i in range(11, 48):
if i%10 == 0: continue
x = i*10 +1
if hu_test(copy_card, x):
return True
return False
def read_file(file_fullpath):
f = open(file_fullpath, 'r')
txt_list = f.read()
txt_list = txt_list.split('\n')
f.close()
return txt_list
def modify_file(txt_list):
# process the last hand and the follwing commands
for i in range(len(txt_list)-1, 0, -1):
if txt_list[i].find('/ask throw') != -1: #not find is -1
break
else:
txt_list.pop()
# process the commands with '/ask' and '>>'
for i in range(len(txt_list)-1, 0, -1):
line_list = txt_list[i].split()
if line_list[0] == '/ask':
txt_list.pop(i)
if line_list[0] == '/throw':
if ((line_list[1] != '1') and (line_list[1] != '2') and (line_list[1] != '3') and (line_list[1] != '4')):
txt_list.pop(i)
if line_list[0] == '/eat':
if ((line_list[1] != '1') and (line_list[1] != '2') and (line_list[1] != '3') and (line_list[1] != '4')):
txt_list.pop(i)
if line_list[0] == '/pong':
if ((line_list[1] != '1') and (line_list[1] != '2') and (line_list[1] != '3') and (line_list[1] != '4')):
txt_list.pop(i)
if line_list[0] == '/gong':
if ((line_list[1] != '1') and (line_list[1] != '2') and (line_list[1] != '3') and (line_list[1] != '4')):
txt_list.pop(i)
if line_list[0] == '/ready':
txt_list.pop(i)
if line_list[0] == '/pass':
txt_list.pop(i)
return txt_list
def write_file(txt_list, out_file_fullpath, file):
f = open(out_file_fullpath, 'w')
# save the old file name at the top
f.write('>>' + file + '\n')
f.write('\n'.join(txt_list))
#f.write('\n')
f.close()
# save the test number to file
f1 = open(out_dir + 'test_number.txt', 'a')
f1.write(file.split()[0] + '\n')
f1.close()
# main
i = 0
for file in os.listdir(dir_dict['a1']):
file_fullpath = dir_dict['a1']+file
# check (is file) and (the filename have chucker) and (is .command)
if (os.path.isfile(file_fullpath)) and ('.command' in file) and ('chucker' in file):
#print("filename = " + file)
outfilename = 'round_' + str(i) + '.command'
#print(' file_fullpath =',file_fullpath)
# find chucker and modify
for (dir_k, dir_v) in dir_dict.items():
file_fullpath = dir_v + file
# read file to get txt_list(list of line)
txt_list = read_file(file_fullpath)
#print(' txt_list =',txt_list[4])
# check the file is the chucker vision
is_chucker = check_chucker(txt_list)
if is_chucker:
wind = txt_list[2].split()[2]
master = txt_list[3].split()[4]
# get player cards
player_card = get_player_card(txt_list, wind, master)
# modify the file to the state before chucker
txt_list = modify_file(txt_list)
# modify the player cards to the state before chucker
player_card = modify_player_card(player_card, txt_list, wind, file)
# check is ready hand
if not is_ready_hand(player_card, file):
if len(txt_list)-4 > 55:
print('not ready hand', file)
# write the modified file to the new place
out_file_fullpath = out_dir + outfilename
write_file(txt_list, out_file_fullpath, file)
# print_info for debug
print_info(txt_list, player_card)
i = i + 1
else:
print('is ready hand', file)