From 8e37a3ee6eac8c31473c2b9fad472069eefcc14d Mon Sep 17 00:00:00 2001 From: Javier Otero Date: Fri, 11 Jun 2021 16:04:39 +0200 Subject: [PATCH 1/2] Restrict use of required keyword --- reframe/core/meta.py | 2 +- reframe/core/variables.py | 5 +++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/reframe/core/meta.py b/reframe/core/meta.py index 10c0b893ac..309f43db76 100644 --- a/reframe/core/meta.py +++ b/reframe/core/meta.py @@ -243,7 +243,7 @@ class was created or even at the instance level (e.g. doing blacklist = [ 'parameter', 'variable', 'bind', 'run_before', 'run_after', - 'require_deps' + 'require_deps', 'required' ] for b in blacklist: namespace.pop(b, None) diff --git a/reframe/core/variables.py b/reframe/core/variables.py index a57cadb9bf..dd79bcbe4a 100644 --- a/reframe/core/variables.py +++ b/reframe/core/variables.py @@ -493,6 +493,11 @@ def extend(self, cls): if key in self.vars: self.vars[key].define(value) _assigned_vars.add(key) + elif value is Undefined: + # Cannot be set as Undefined if not a variable + raise ValueError( + f'{key!r} has not been declared as a variable' + ) # Delete the vars from the class __dict__. for key in _assigned_vars: From 4d1c66b3f760c114b74fa7e491b1c958d1265a11 Mon Sep 17 00:00:00 2001 From: Javier Otero Date: Fri, 11 Jun 2021 16:17:45 +0200 Subject: [PATCH 2/2] Add unit tests --- unittests/test_meta.py | 2 ++ unittests/test_variables.py | 7 +++++++ 2 files changed, 9 insertions(+) diff --git a/unittests/test_meta.py b/unittests/test_meta.py index 6f97587fcd..f8244b2cc2 100644 --- a/unittests/test_meta.py +++ b/unittests/test_meta.py @@ -20,6 +20,7 @@ class MyTest(rfm.RegressionTest): run_before('run')(ext) run_after('run')(ext) require_deps(ext) + v = required def __init__(self): assert not hasattr(self, 'parameter') @@ -28,6 +29,7 @@ def __init__(self): assert not hasattr(self, 'run_before') assert not hasattr(self, 'run_after') assert not hasattr(self, 'require_deps') + assert not hasattr(self, 'required') MyTest() diff --git a/unittests/test_variables.py b/unittests/test_variables.py index 04f25e4d24..7d2f66ff66 100644 --- a/unittests/test_variables.py +++ b/unittests/test_variables.py @@ -170,6 +170,13 @@ def __init__(self): MyTest() +def test_required_non_var(): + msg = "'not_a_var' has not been declared as a variable" + with pytest.raises(ValueError, match=msg): + class Foo(rfm.RegressionTest): + not_a_var = required + + def test_invalid_field(): class Foo: '''An invalid descriptor'''