Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
31 changes: 22 additions & 9 deletions reframe/core/decorators.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,16 +7,26 @@

import collections
import inspect
import sys
import traceback

import reframe
from reframe.core.exceptions import ReframeSyntaxError
from reframe.core.exceptions import ReframeSyntaxError, user_frame
from reframe.core.logging import getlogger
from reframe.core.pipeline import RegressionTest
from reframe.utility.versioning import Version, VersionValidator


def _register_test(cls, args=None):
def _instantiate():
def _instantiate(cls, args):
if isinstance(args, collections.Sequence):
return cls(*args)
elif isinstance(args, collections.Mapping):
return cls(**args)
elif args is None:
return cls()

def _instantiate_all():
ret = []
for cls, args in mod.__rfm_test_registry:
try:
Expand All @@ -26,18 +36,21 @@ def _instantiate():
except AttributeError:
mod.__rfm_skip_tests = set()

if isinstance(args, collections.Sequence):
ret.append(cls(*args))
elif isinstance(args, collections.Mapping):
ret.append(cls(**args))
elif args is None:
ret.append(cls())
try:
ret.append(_instantiate(cls, args))
except Exception as e:
frame = user_frame(sys.exc_info()[2])
msg = "skipping test due to errors: %s: " % cls.__name__
msg += "use `-v' for more information\n"
msg += " FILE: %s:%s" % (frame.filename, frame.lineno)
getlogger().warning(msg)
getlogger().verbose(traceback.format_exc())

return ret

mod = inspect.getmodule(cls)
if not hasattr(mod, '_rfm_gettests'):
mod._rfm_gettests = _instantiate
mod._rfm_gettests = _instantiate_all

try:
mod.__rfm_test_registry.append((cls, args))
Expand Down
7 changes: 7 additions & 0 deletions unittests/resources/checks_unlisted/bad_init_check.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
import reframe as rfm


@rfm.simple_test
class BadInitTest(rfm.RegressionTest):
def __init__(self):
foo
5 changes: 5 additions & 0 deletions unittests/test_loader.py
Original file line number Diff line number Diff line change
Expand Up @@ -63,3 +63,8 @@ def test_load_bad_required_version(self):
with self.assertRaises(ValueError):
self.loader.load_from_file('unittests/resources/checks_unlisted/'
'no_required_version.py')

def test_load_bad_init(self):
tests = self.loader.load_from_file(
'unittests/resources/checks_unlisted/bad_init_check.py')
self.assertEqual(0, len(tests))