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
16 changes: 11 additions & 5 deletions reframe/frontend/loader.py
Original file line number Diff line number Diff line change
Expand Up @@ -177,17 +177,23 @@ def load_from_module(self, module):
if not self._validate_check(c):
continue

testfile = module.__file__
# Get the original filename in case of a different module name
if module.__name__ == c.__module__:
testfile = module.__file__
else:
testfile = inspect.getfile(c.__class__)

try:
conflicted = self._loaded[c.unique_name]
except KeyError:
self._loaded[c.unique_name] = testfile
final_tests.append(c)
else:
raise NameConflictError(
f'test {c.unique_name!r} from {testfile!r} '
f'is already defined in {conflicted!r}'
)
if not c.is_fixture():
raise NameConflictError(
f'test {c.unique_name!r} from {testfile!r} '
f'is already defined in {conflicted!r}'
)

getlogger().debug(f' > Loaded {len(final_tests)} test(s)')
return final_tests
Expand Down
13 changes: 13 additions & 0 deletions unittests/resources/checks_unlisted/testlib_inheritance_bar.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
# Copyright 2016-2023 Swiss National Supercomputing Centre (CSCS/ETH Zurich)
# ReFrame Project Developers. See the top-level LICENSE file for details.
#
# SPDX-License-Identifier: BSD-3-Clause

import reframe as rfm

from testlib.simple import simple_echo_check


@rfm.simple_test
class HelloBar(simple_echo_check):
message = 'Bar'
13 changes: 13 additions & 0 deletions unittests/resources/checks_unlisted/testlib_inheritance_foo.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
# Copyright 2016-2023 Swiss National Supercomputing Centre (CSCS/ETH Zurich)
# ReFrame Project Developers. See the top-level LICENSE file for details.
#
# SPDX-License-Identifier: BSD-3-Clause

import reframe as rfm

from testlib.simple import simple_echo_check


@rfm.simple_test
class HelloFoo(simple_echo_check):
message = 'Foo'
31 changes: 31 additions & 0 deletions unittests/resources/testlib/simple.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
# Copyright 2016-2023 Swiss National Supercomputing Centre (CSCS/ETH Zurich)
# ReFrame Project Developers. See the top-level LICENSE file for details.
#
# SPDX-License-Identifier: BSD-3-Clause

import reframe as rfm
import reframe.utility.sanity as sn


class dummy_fixture(rfm.RunOnlyRegressionTest, pin_prefix=True):
executable = 'echo'
sanity_patterns = sn.assert_true(1)


@rfm.simple_test
class simple_echo_check(rfm.RunOnlyRegressionTest):
descr = 'Simple Echo Test'
valid_systems = ['*']
valid_prog_environs = ['builtin']
executable = 'echo'
executable_opts = ['Hello']
message = variable(str, value='World')
dummy = fixture(dummy_fixture, scope='environment')

@run_before('run')
def set_executable_opts(self):
self.executable_opts += [self.message]

@sanity_function
def assert_sanity(self):
return sn.assert_found(rf'Hello {self.message}', self.stdout)
14 changes: 14 additions & 0 deletions unittests/test_cli.py
Original file line number Diff line number Diff line change
Expand Up @@ -1045,3 +1045,17 @@ def test_dynamic_tests_filtering(run_reframe, tmp_path):
assert returncode == 0
assert 'Ran 7/7 test case(s)' in stdout
assert 'FAILED' not in stdout


def test_testlib_inherit_fixture_in_different_files(run_reframe, monkeypatch):
monkeypatch.syspath_prepend('unittests/resources')
returncode, stdout, _ = run_reframe(
checkpath=[
'unittests/resources/checks_unlisted/testlib_inheritance_foo.py',
'unittests/resources/checks_unlisted/testlib_inheritance_bar.py'
],
action='run',
)
assert returncode == 0
assert 'Ran 3/3 test case(s)' in stdout
assert 'FAILED' not in stdout