diff --git a/avocado/core/safeloader.py b/avocado/core/safeloader.py index c2fec89195b4fee1a2e9bfe985beedcd6ecc3a04..68de1693cebec5039708444f82f5f217f56a60f9 100644 --- a/avocado/core/safeloader.py +++ b/avocado/core/safeloader.py @@ -65,7 +65,7 @@ class AvocadoModule(object): for name in statement.names: if name.name == 'avocado': if name.asname is not None: - self.mod_import = name.nasname + self.mod_import = name.asname else: self.mod_import = name.name diff --git a/selftests/.data/loader_instrumented/double_import.py b/selftests/.data/loader_instrumented/double_import.py new file mode 100644 index 0000000000000000000000000000000000000000..cea7bfa942d143ec2c2c59b6b9bd980a0a972a57 --- /dev/null +++ b/selftests/.data/loader_instrumented/double_import.py @@ -0,0 +1,26 @@ +# This currently only discovers 2 tests in avocado due to bug +import avocado as foo +import avocado as bar # pylint: disable=W0404 + +from avocado import Test as Foo +from avocado import Test as Bar # pylint: disable=W0404 + + +class Test1(foo.Test): + def test1(self): + pass + + +class Test2(bar.Test): + def test2(self): + pass + + +class Test3(Foo): + def test3(self): + pass + + +class Test4(Bar): + def test4(self): + pass diff --git a/selftests/unit/test_loader.py b/selftests/unit/test_loader.py index 467219019a3cf4fc54b6968a0bd8d03a188c69dc..ba082622d75bf320325450810547304d27f6bc1d 100644 --- a/selftests/unit/test_loader.py +++ b/selftests/unit/test_loader.py @@ -197,6 +197,22 @@ class SampleTest(TestCase): class LoaderTest(unittest.TestCase): + def _check_discovery(self, exps, tests): + self.assertEqual(len(exps), len(tests), "Total count of tests not " + "as expected (%s != %s)\nexps: %s\ntests: %s" + % (len(exps), len(tests), exps, tests)) + try: + for exp, tst in zip(exps, tests): + # Test class + self.assertEqual(tst[0], exp[0]) + # Test name (path) + # py2 reports relpath, py3 abspath + self.assertEqual(os.path.abspath(tst[1]['name']), + os.path.abspath(exp[1])) + except AssertionError as details: + raise AssertionError("%s\nexps: %s\ntests:%s" + % (details, exps, tests)) + def setUp(self): self.loader = loader.FileLoader(None, {}) self.queue = multiprocessing.Queue() @@ -494,6 +510,16 @@ class LoaderTest(unittest.TestCase): # py2 reports relpath, py3 abspath self.assertEqual(os.path.abspath(tst[1]['name']), os.path.abspath(exp[1])) + def test_double_import(self): + # This is currently broken in Avocado, so let's just document the + # current behavior. + path = os.path.join(os.path.dirname(os.path.dirname(__file__)), + '.data', 'loader_instrumented', 'double_import.py') + tests = self.loader.discover(path) + exps = [('Test2', 'selftests/.data/loader_instrumented/double_import.py:Test2.test2'), + ('Test4', 'selftests/.data/loader_instrumented/double_import.py:Test4.test4')] + self._check_discovery(exps, tests) + def tearDown(self): shutil.rmtree(self.tmpdir)