9
9
import argparse
10
10
import json
11
11
import os
12
+ import shutil
12
13
import typing
13
14
import pathlib
14
15
15
16
16
17
def parse_arguments ():
17
18
parser = argparse .ArgumentParser (
18
19
prog = 'UtBot Python test' ,
19
- description = 'Generage tests for example files'
20
+ description = 'Generate tests for example files'
20
21
)
21
22
subparsers = parser .add_subparsers (dest = "command" )
22
23
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 )
30
31
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 )
34
35
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 )
37
38
return parser .parse_args ()
38
39
39
40
@@ -61,7 +62,6 @@ def generate_tests(
61
62
command += f" -m { ',' .join (method_names )} "
62
63
print (command )
63
64
code = os .system (command )
64
- print (code )
65
65
return code
66
66
67
67
@@ -89,12 +89,15 @@ def check_coverage(
89
89
expected_coverage = group .get ('coverage' , 0 )
90
90
91
91
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
98
101
99
102
coverage [file_suffix ] = (actual_coverage , expected_coverage )
100
103
report [file_suffix ] = actual_coverage >= expected_coverage
@@ -111,6 +114,7 @@ def check_coverage(
111
114
112
115
def main_test_generation (args ):
113
116
config = parse_config (args .config_file )
117
+ shutil .rmtree (args .coverage_output_dir )
114
118
for part in config ['parts' ]:
115
119
for file in part ['files' ]:
116
120
for group in file ['groups' ]:
0 commit comments