Skip to content

Commit 692e77f

Browse files
committed
Fixed -ini flag detection in Questa/Modelsim vcom help
1 parent e75cfc2 commit 692e77f

File tree

2 files changed

+51
-5
lines changed

2 files changed

+51
-5
lines changed

tests/unit/test_modelsim_interface.py

Lines changed: 50 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -257,11 +257,11 @@ def test_compile_project_verilog_define(self, process, check_output, modelsim_ch
257257
]
258258
check_output.assert_called_once_with(process_args, env=simif.get_env())
259259

260-
def _get_inis(self):
260+
def _get_inis(self, name="modelsim"):
261261
return (
262-
str(Path(self.output_path) / "modelsim.ini"),
263-
str(Path(self.prefix_path) / ".." / "modelsim.ini"),
264-
str(Path(self.test_path) / "my_modelsim.ini"),
262+
str(Path(self.output_path) / f"{name}.ini"),
263+
str(Path(self.prefix_path) / ".." / f"{name}.ini"),
264+
str(Path(self.test_path) / f"my_{name}.ini"),
265265
)
266266

267267
@mock.patch("vunit.sim_if.modelsim.check_output", autospec=True, return_value="")
@@ -330,6 +330,52 @@ def test_overwrites_modelsim_ini_file_from_user(self, _check_output):
330330
with open(modelsim_ini, "r") as fptr:
331331
self.assertEqual(fptr.read(), "user")
332332

333+
@mock.patch("vunit.sim_if.vsim_simulator_mixin.Process", autospec=True)
334+
def test_modelsim_ini_file_detection(self, vsim_simulator_mixin_process):
335+
(_, _, user_modelsim_ini) = self._get_inis("questa")
336+
337+
with open(user_modelsim_ini, "w") as fptr:
338+
fptr.write("user")
339+
340+
def check_output(*args, **kwargs):
341+
return """\
342+
-initoutcompositeparam
343+
Initialize array and record mode OUT parameters of subprogram
344+
-modelsimini <modelsim.ini>
345+
Specify path to the modelsim.ini file.
346+
"""
347+
348+
with (
349+
set_env(VUNIT_MODELSIM_INI=user_modelsim_ini),
350+
mock.patch("vunit.sim_if.vsim_simulator_mixin.Process", return_value=None),
351+
mock.patch("vunit.sim_if.modelsim.check_output", side_effect=check_output),
352+
):
353+
simif = ModelSimInterface(prefix=self.prefix_path, output_path=self.output_path, persistent=False)
354+
self.assertEqual(simif._ini_flag, "-modelsimini")
355+
self.assertEqual(simif._ini_file, "modelsim.ini")
356+
357+
@mock.patch("vunit.sim_if.vsim_simulator_mixin.Process", autospec=True)
358+
def test_questa_ini_file_detection(self, vsim_simulator_mixin_process):
359+
(_, _, user_questa_ini) = self._get_inis("questa")
360+
361+
with open(user_questa_ini, "w") as fptr:
362+
fptr.write("user")
363+
364+
def check_output(*args, **kwargs):
365+
return """\
366+
-modelsimini <modelsim.ini> Specify path to the modelsim.ini file
367+
-ini <questa.ini> Specify path to the questa.ini file
368+
"""
369+
370+
with (
371+
set_env(VUNIT_MODELSIM_INI=user_questa_ini),
372+
mock.patch("vunit.sim_if.vsim_simulator_mixin.Process", return_value=None),
373+
mock.patch("vunit.sim_if.modelsim.check_output", side_effect=check_output),
374+
):
375+
simif = ModelSimInterface(prefix=self.prefix_path, output_path=self.output_path, persistent=False)
376+
self.assertEqual(simif._ini_flag, "-ini")
377+
self.assertEqual(simif._ini_file, "questa.ini")
378+
333379
@mock.patch("vunit.sim_if.modelsim.check_output", autospec=True, return_value="")
334380
@mock.patch("vunit.sim_if.modelsim.LOGGER", autospec=True)
335381
@mock.patch("vunit.sim_if.check_output", autospec=True, return_value="")

vunit/sim_if/modelsim.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -119,7 +119,7 @@ def _find_in_help(self, prefix: str, tool: str, key: str) -> bool:
119119
"""
120120
try:
121121
help_output = check_output([str(Path(prefix) / tool), "-help", "all"], env=self.get_env())
122-
return key in help_output
122+
return key in help_output.split()
123123
except Process.NonZeroExitCode:
124124
return False
125125

0 commit comments

Comments
 (0)