99import argparse
1010import json
1111import os
12+ import shutil
1213import typing
1314import pathlib
1415
1516
1617def parse_arguments ():
1718 parser = argparse .ArgumentParser (
1819 prog = 'UtBot Python test' ,
19- description = 'Generage tests for example files'
20+ description = 'Generate tests for example files'
2021 )
2122 subparsers = parser .add_subparsers (dest = "command" )
2223 parser_generate = subparsers .add_parser ('generate' , help = 'Generate tests' )
23- parser_generate .add_argument ('java' )
24- parser_generate .add_argument ('jar' )
25- parser_generate .add_argument ('path_to_test_dir' )
26- parser_generate .add_argument ('-c' , '--config_file' )
27- parser_generate .add_argument ('-p' , '--python_path' )
28- parser_generate .add_argument ('-o' , '--output_dir' )
29- parser_generate .add_argument ('-i' , '--coverage_output_dir' )
24+ parser_generate .add_argument ('java' , required = True )
25+ parser_generate .add_argument ('jar' , required = True )
26+ parser_generate .add_argument ('path_to_test_dir' , required = True )
27+ parser_generate .add_argument ('-c' , '--config_file' , required = True )
28+ parser_generate .add_argument ('-p' , '--python_path' , required = True )
29+ parser_generate .add_argument ('-o' , '--output_dir' , required = True )
30+ parser_generate .add_argument ('-i' , '--coverage_output_dir' , required = True )
3031 parser_run = subparsers .add_parser ('run' , help = 'Run tests' )
31- parser_run .add_argument ('-p' , '--python_path' )
32- parser_run .add_argument ('-t' , '--test_directory' )
33- parser_run .add_argument ('-c' , '--code_directory' )
32+ parser_run .add_argument ('-p' , '--python_path' , required = True )
33+ parser_run .add_argument ('-t' , '--test_directory' , required = True )
34+ parser_run .add_argument ('-c' , '--code_directory' , required = True )
3435 parser_coverage = subparsers .add_parser ('check_coverage' , help = 'Check coverage' )
35- parser_coverage .add_argument ('-i' , '--coverage_output_dir' )
36- parser_coverage .add_argument ('-c' , '--config_file' )
36+ parser_coverage .add_argument ('-i' , '--coverage_output_dir' , required = True )
37+ parser_coverage .add_argument ('-c' , '--config_file' , required = True )
3738 return parser .parse_args ()
3839
3940
@@ -61,7 +62,6 @@ def generate_tests(
6162 command += f" -m { ',' .join (method_names )} "
6263 print (command )
6364 code = os .system (command )
64- print (code )
6565 return code
6666
6767
@@ -89,12 +89,15 @@ def check_coverage(
8989 expected_coverage = group .get ('coverage' , 0 )
9090
9191 file_suffix = f"{ part ['path' ].replace ('/' , '_' )} _{ file ['name' ]} "
92- coverage_output_file = pathlib .PurePath (coverage_output_dir , f"coverage_{ file_suffix } .json" )
93- with open (coverage_output_file , "rt" ) as fin :
94- actual_coverage_json = json .loads (fin .readline ())
95- actual_covered = sum (lines ['end' ] - lines ['start' ] + 1 for lines in actual_coverage_json ['covered' ])
96- actual_not_covered = sum (lines ['end' ] - lines ['start' ] + 1 for lines in actual_coverage_json ['notCovered' ])
97- actual_coverage = round (actual_covered / (actual_not_covered + actual_covered ) * 100 )
92+ coverage_output_file = pathlib .Path (coverage_output_dir , f"coverage_{ file_suffix } .json" )
93+ if coverage_output_file .exists ():
94+ with open (coverage_output_file , "rt" ) as fin :
95+ actual_coverage_json = json .loads (fin .readline ())
96+ actual_covered = sum (lines ['end' ] - lines ['start' ] + 1 for lines in actual_coverage_json ['covered' ])
97+ actual_not_covered = sum (lines ['end' ] - lines ['start' ] + 1 for lines in actual_coverage_json ['notCovered' ])
98+ actual_coverage = round (actual_covered / (actual_not_covered + actual_covered ) * 100 )
99+ else :
100+ actual_coverage = 0
98101
99102 coverage [file_suffix ] = (actual_coverage , expected_coverage )
100103 report [file_suffix ] = actual_coverage >= expected_coverage
@@ -111,6 +114,7 @@ def check_coverage(
111114
112115def main_test_generation (args ):
113116 config = parse_config (args .config_file )
117+ shutil .rmtree (args .coverage_output_dir )
114118 for part in config ['parts' ]:
115119 for file in part ['files' ]:
116120 for group in file ['groups' ]:
0 commit comments