@@ -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 = "" )
0 commit comments