diff --git a/reframe/frontend/cli.py b/reframe/frontend/cli.py index af37b6ba3a..30c6a5ed18 100644 --- a/reframe/frontend/cli.py +++ b/reframe/frontend/cli.py @@ -999,6 +999,15 @@ def print_infoline(param, value): f'{len(testcases)} remaining' ) + # Warn on any unset test variables for the final set of selected tests + for clsname in {type(tc.check).__name__ for tc in testcases}: + varlist = ', '.join(f'{v!r}' for v in loader.unset_vars(clsname)) + if varlist: + printer.warning( + f'test {clsname!r}: ' + f'the following variables were not set: {varlist}' + ) + # Filter in failed cases if options.failed: if options.restore_session is None: diff --git a/reframe/frontend/loader.py b/reframe/frontend/loader.py index 4e73bcc009..a286587345 100644 --- a/reframe/frontend/loader.py +++ b/reframe/frontend/loader.py @@ -60,9 +60,13 @@ def __init__(self, load_path, recurse=False, external_vars=None, # Variables set in the command line self._external_vars = external_vars or {} + self._unset_vars = {} self._skip_system_check = bool(skip_system_check) self._skip_prgenv_check = bool(skip_prgenv_check) + def unset_vars(self, testname): + return self._unset_vars.get(testname, []) + def _module_name(self, filename): '''Figure out a module name from filename. @@ -133,7 +137,7 @@ def _set_defaults(self, test_registry): if test_registry is None: return - unset_vars = {} + self._unset_vars = {} for test in test_registry: for name, val in self._external_vars.items(): if '.' in name: @@ -149,16 +153,8 @@ def _set_defaults(self, test_registry): val = fields.make_convertible(val) if not test.setvar(varname, val): - unset_vars.setdefault(test.__name__, []) - unset_vars[test.__name__].append(varname) - - # Warn for all unset variables - for testname, varlist in unset_vars.items(): - varlist = ', '.join(f'{v!r}' for v in varlist) - getlogger().warning( - f'test {testname!r}: ' - f'the following variables were not set: {varlist}' - ) + self._unset_vars.setdefault(test.__name__, []) + self._unset_vars[test.__name__].append(varname) def load_from_module(self, module): '''Load user checks from module.