|
1 | 1 | import datetime |
2 | 2 | import os |
3 | 3 | import shutil |
| 4 | +import sys |
4 | 5 | import wandb |
5 | 6 |
|
6 | 7 | from cover_agent.CustomLogger import CustomLogger |
@@ -47,59 +48,57 @@ def _duplicate_test_file(self): |
47 | 48 | self.args.test_file_output_path = self.args.test_file_path |
48 | 49 |
|
49 | 50 | def run(self): |
50 | | - |
51 | 51 | if 'WANDB_API_KEY' in os.environ: |
52 | 52 | wandb.login(key=os.environ['WANDB_API_KEY']) |
53 | 53 | time_and_date = datetime.datetime.now().strftime("%Y-%m-%d_%H-%M-%S") |
54 | 54 | run_name = f"{self.args.model}_" + time_and_date |
55 | 55 | wandb.init(project="cover-agent", name=run_name) |
56 | 56 |
|
57 | | - if not self.args.prompt_only: |
58 | | - iteration_count = 0 |
59 | | - test_results_list = [] |
60 | | - |
61 | | - self.test_gen.initial_test_suite_analysis() |
| 57 | + iteration_count = 0 |
| 58 | + test_results_list = [] |
62 | 59 |
|
63 | | - while ( |
64 | | - self.test_gen.current_coverage < (self.test_gen.desired_coverage / 100) |
65 | | - and iteration_count < self.args.max_iterations |
66 | | - ): |
67 | | - self.logger.info( |
68 | | - f"Current Coverage: {round(self.test_gen.current_coverage * 100, 2)}%" |
69 | | - ) |
70 | | - self.logger.info(f"Desired Coverage: {self.test_gen.desired_coverage}%") |
| 60 | + self.test_gen.initial_test_suite_analysis() |
71 | 61 |
|
72 | | - generated_tests_dict = self.test_gen.generate_tests(max_tokens=4096) |
| 62 | + while ( |
| 63 | + self.test_gen.current_coverage < (self.test_gen.desired_coverage / 100) |
| 64 | + and iteration_count < self.args.max_iterations |
| 65 | + ): |
| 66 | + self.logger.info( |
| 67 | + f"Current Coverage: {round(self.test_gen.current_coverage * 100, 2)}%" |
| 68 | + ) |
| 69 | + self.logger.info(f"Desired Coverage: {self.test_gen.desired_coverage}%") |
73 | 70 |
|
74 | | - for generated_test in generated_tests_dict.get("new_tests", []): |
75 | | - test_result = self.test_gen.validate_test( |
76 | | - generated_test, generated_tests_dict |
77 | | - ) |
78 | | - test_results_list.append(test_result) |
| 71 | + generated_tests_dict = self.test_gen.generate_tests(max_tokens=4096) |
79 | 72 |
|
80 | | - iteration_count += 1 |
| 73 | + for generated_test in generated_tests_dict.get("new_tests", []): |
| 74 | + test_result = self.test_gen.validate_test( |
| 75 | + generated_test, generated_tests_dict |
| 76 | + ) |
| 77 | + test_results_list.append(test_result) |
81 | 78 |
|
82 | | - if self.test_gen.current_coverage < ( |
83 | | - self.test_gen.desired_coverage / 100 |
84 | | - ): |
85 | | - self.test_gen.run_coverage() |
| 79 | + iteration_count += 1 |
86 | 80 |
|
87 | | - if self.test_gen.current_coverage >= (self.test_gen.desired_coverage / 100): |
88 | | - self.logger.info( |
89 | | - f"Reached above target coverage of {self.test_gen.desired_coverage}% (Current Coverage: {round(self.test_gen.current_coverage * 100, 2)}%) in {iteration_count} iterations." |
90 | | - ) |
91 | | - elif iteration_count == self.args.max_iterations: |
92 | | - self.logger.info( |
93 | | - f"Reached maximum iteration limit without achieving desired coverage. Current Coverage: {round(self.test_gen.current_coverage * 100, 2)}%" |
94 | | - ) |
| 81 | + if self.test_gen.current_coverage < ( |
| 82 | + self.test_gen.desired_coverage / 100 |
| 83 | + ): |
| 84 | + self.test_gen.run_coverage() |
95 | 85 |
|
96 | | - ReportGenerator.generate_report( |
97 | | - test_results_list, self.args.report_filepath |
98 | | - ) |
99 | | - else: |
| 86 | + if self.test_gen.current_coverage >= (self.test_gen.desired_coverage / 100): |
100 | 87 | self.logger.info( |
101 | | - f"Prompt only option requested. Skipping call to LLM. Prompt can be found at: {self.args.prompt_only}" |
| 88 | + f"Reached above target coverage of {self.test_gen.desired_coverage}% (Current Coverage: {round(self.test_gen.current_coverage * 100, 2)}%) in {iteration_count} iterations." |
102 | 89 | ) |
| 90 | + elif iteration_count == self.args.max_iterations: |
| 91 | + failure_message = f"Reached maximum iteration limit without achieving desired coverage. Current Coverage: {round(self.test_gen.current_coverage * 100, 2)}%" |
| 92 | + if self.args.strict_coverage: |
| 93 | + # User requested strict coverage (similar to "--cov-fail-under in pytest-cov"). Fail with exist code 2. |
| 94 | + self.logger.error(failure_message) |
| 95 | + sys.exit(2) |
| 96 | + else: |
| 97 | + self.logger.info(failure_message) |
| 98 | + |
| 99 | + ReportGenerator.generate_report( |
| 100 | + test_results_list, self.args.report_filepath |
| 101 | + ) |
103 | 102 |
|
104 | 103 | if 'WANDB_API_KEY' in os.environ: |
105 | 104 | wandb.finish() |
0 commit comments