Skip to content

Commit

Permalink
Added warning on setting non-existing generic
Browse files Browse the repository at this point in the history
  • Loading branch information
kraigher committed Oct 2, 2015
1 parent 2d1a926 commit 4a62226
Show file tree
Hide file tree
Showing 2 changed files with 32 additions and 10 deletions.
24 changes: 19 additions & 5 deletions vunit/test/unit/test_test_scanner.py
Original file line number Diff line number Diff line change
Expand Up @@ -143,7 +143,7 @@ def test_warning_on_configuration_of_non_existent_test(self, mock_logger):
project = ProjectStub()
lib = project.add_library("lib")
ent = lib.add_entity("tb_entity",
generic_names=["runner_cfg"])
generic_names=["runner_cfg", "name"])

ent.set_contents('if run("Test")')

Expand Down Expand Up @@ -251,10 +251,6 @@ def test_warning_on_non_overrriden_tb_path(self, mock_logger):
generic_names=["tb_path"])
ent.set_contents("")

# Should not yield warning since it does not have tb_path generic
ent_without = lib.add_entity("tb_entity_without")
ent_without.set_contents("")

tb_path_non_overriden_value = "foo"
self.configuration.set_generic("tb_path", tb_path_non_overriden_value)
tests = self.test_scanner.from_project(project)
Expand All @@ -269,6 +265,24 @@ def test_warning_on_non_overrriden_tb_path(self, mock_logger):
generics = find_generics(tests, "lib.tb_entity")
self.assertEqual(generics["tb_path"], tb_path_value)

@mock.patch("vunit.test_scanner.LOGGER")
def test_warning_on_setting_missing_generic(self, mock_logger):
project = ProjectStub()
lib = project.add_library("lib")

ent = lib.add_entity("tb_entity",
generic_names=[""])
ent.set_contents("")
self.configuration.set_generic("name123", "value123")
self.test_scanner.from_project(project)
warning_calls = mock_logger.warning.call_args_list
self.assertEqual(len(warning_calls), 1)
call_args = warning_calls[0][0]
self.assertIn("lib", call_args)
self.assertIn("tb_entity", call_args)
self.assertIn("name123", call_args)
self.assertIn("value123", call_args)

def assert_has_tests(self, test_list, tests):
"""
Asser that the test_list contains tests.
Expand Down
18 changes: 13 additions & 5 deletions vunit/test_scanner.py
Original file line number Diff line number Diff line change
Expand Up @@ -147,9 +147,12 @@ def add_tb_path_generic(generics):
generics["tb_path"] = new_value

generics = config.sim_config.generics.copy()
add_tb_path_generic(generics)

if "tb_path" in entity.generic_names:
add_tb_path_generic(generics)

config.sim_config.fail_on_warning = fail_on_warning
config.sim_config.generics = prune_generics(generics, entity.generic_names)
config.sim_config.generics = prune_generics(generics, entity)

return TestBench(simulator_if=self._simulator_if,
library_name=entity.library_name,
Expand Down Expand Up @@ -281,13 +284,18 @@ def dotjoin(*args):
return ".".join(arg for arg in args if arg not in ("", None))


def prune_generics(generics, generic_names):
def prune_generics(generics, entity):
"""
Keep only generics with name in generic_names
Keep only generics with name in entity.generic_names
"""
generics = generics.copy()
for gname in list(generics.keys()):
if gname not in generic_names:
if gname not in entity.generic_names:
LOGGER.warning(
"Generic '%s' set to value '%s' not found in entity '%s.%s'. Possible values are [%s]",
gname, generics[gname],
entity.library_name, entity.name,
", ".join('%s' % name for name in entity.generic_names))
del generics[gname]
return generics

Expand Down

0 comments on commit 4a62226

Please sign in to comment.