Skip to content

Commit 33ff15a

Browse files
committed
feat(parsing): emit conformance script warning in dry-run as well
1 parent d292801 commit 33ff15a

2 files changed

Lines changed: 47 additions & 12 deletions

File tree

‎plain2code.py‎

Lines changed: 19 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -158,31 +158,34 @@ def _check_connection(codeplainAPI: codeplain_api.CodeplainAPI):
158158
)
159159

160160

161-
def warn_if_acceptance_tests_without_conformance_script(plain_module, args) -> None:
161+
def warn_acceptance_tests_without_conformance_script(module_names_with_acceptance_tests, args) -> None:
162162
"""Warn when acceptance tests are specified but no conformance tests script is configured.
163163
164164
Acceptance tests are treated as conformance tests, so a conformance tests script is required
165165
to actually run them. Without it, the acceptance tests cannot be executed.
166166
"""
167-
if args.conformance_tests_script:
167+
if args.conformance_tests_script or not module_names_with_acceptance_tests:
168168
return
169169

170-
modules_with_acceptance_tests = [
171-
module
172-
for module in plain_module.all_required_modules + [plain_module]
173-
if plain_spec.has_acceptance_tests(module.plain_source)
174-
]
175-
if not modules_with_acceptance_tests:
176-
return
177-
178-
module_names = ", ".join(module.module_name for module in modules_with_acceptance_tests)
170+
module_names = ", ".join(module_names_with_acceptance_tests)
179171
console.warning(
180172
f"Acceptance tests were found ({module_names}) but no conformance tests script is configured. "
181173
"Acceptance tests are treated as conformance tests and require a conformance tests script "
182174
"(--conformance-tests-script or 'conformance_tests_script' in config) to be executed."
183175
)
184176

185177

178+
def warn_if_acceptance_tests_without_conformance_script(plain_module, args) -> None:
179+
"""Warn when any loaded module (including required modules) defines acceptance tests
180+
but no conformance tests script is configured."""
181+
module_names_with_acceptance_tests = [
182+
module.module_name
183+
for module in plain_module.all_required_modules + [plain_module]
184+
if plain_spec.has_acceptance_tests(module.plain_source)
185+
]
186+
warn_acceptance_tests_without_conformance_script(module_names_with_acceptance_tests, args)
187+
188+
186189
def render(args, run_state: RunState, event_bus: EventBus, default_log_level: str = "INFO"): # noqa: C901
187190
template_dirs = file_utils.get_template_directories(args.filename, args.template_dir, DEFAULT_TEMPLATE_DIRS)
188191

@@ -350,9 +353,13 @@ def main(): # noqa: C901
350353

351354
if args.dry_run:
352355
console.info("Printing dry run output...\n")
353-
_, plain_source_tree, _ = plain_file.plain_file_parser(args.filename, template_dirs)
356+
module_name, plain_source_tree, _ = plain_file.plain_file_parser(args.filename, template_dirs)
354357
render_range = plain_spec.compute_render_range(args, plain_source_tree)
355358
print_dry_run_output(plain_source_tree, render_range)
359+
module_names_with_acceptance_tests = (
360+
[module_name] if plain_spec.has_acceptance_tests(plain_source_tree) else []
361+
)
362+
warn_acceptance_tests_without_conformance_script(module_names_with_acceptance_tests, args)
356363
return
357364
except Exception as e:
358365
console.error(f"Error: {str(e)}")

‎tests/test_plain2code.py‎

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,3 +68,31 @@ def test_warns_when_acceptance_tests_only_in_required_module():
6868
mock_console.warning.assert_called_once()
6969
warning_message = mock_console.warning.call_args.args[0]
7070
assert "dependency" in warning_message
71+
72+
73+
def test_core_helper_warns_with_module_names_and_no_script():
74+
args = Namespace(conformance_tests_script=None)
75+
76+
with patch("plain2code.console") as mock_console:
77+
plain2code.warn_acceptance_tests_without_conformance_script(["top"], args)
78+
79+
mock_console.warning.assert_called_once()
80+
assert "top" in mock_console.warning.call_args.args[0]
81+
82+
83+
def test_core_helper_no_warning_with_empty_module_names():
84+
args = Namespace(conformance_tests_script=None)
85+
86+
with patch("plain2code.console") as mock_console:
87+
plain2code.warn_acceptance_tests_without_conformance_script([], args)
88+
89+
mock_console.warning.assert_not_called()
90+
91+
92+
def test_core_helper_no_warning_when_conformance_script_configured():
93+
args = Namespace(conformance_tests_script="run_conformance_tests.sh")
94+
95+
with patch("plain2code.console") as mock_console:
96+
plain2code.warn_acceptance_tests_without_conformance_script(["top"], args)
97+
98+
mock_console.warning.assert_not_called()

0 commit comments

Comments
 (0)