You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
mitogen/tests/ansible/tests/module_finder_test.py

81 lines
3.1 KiB
Python

import os.path
import sys
import textwrap
import unittest
import ansible_mitogen.module_finder
import testlib
class ScanFromListTest(testlib.TestCase):
def test_absolute_imports(self):
source = textwrap.dedent('''\
from __future__ import absolute_import
import a; import b.c; from d.e import f; from g import h, i
''')
code = compile(source, '<str>', 'exec')
self.assertEqual(
list(ansible_mitogen.module_finder.scan_fromlist(code)),
[(0, '__future__.absolute_import'), (0, 'a'), (0, 'b.c'), (0, 'd.e.f'), (0, 'g.h'), (0, 'g.i')],
)
class WalkImportsTest(testlib.TestCase):
def test_absolute_imports(self):
source = textwrap.dedent('''\
from __future__ import absolute_import
import a; import b; import b.c; from b.d import e, f
''')
code = compile(source, '<str>', 'exec')
self.assertEqual(
list(ansible_mitogen.module_finder.walk_imports(code)),
['__future__', '__future__.absolute_import', 'a', 'b', 'b', 'b.c', 'b', 'b.d', 'b.d.e', 'b.d.f'],
)
self.assertEqual(
list(ansible_mitogen.module_finder.walk_imports(code, prefix='b')),
['b.c', 'b.d', 'b.d.e', 'b.d.f'],
)
class ScanTest(testlib.TestCase):
module_name = 'ansible_module_module_finder_test__this_should_not_matter'
module_path = os.path.join(testlib.ANSIBLE_MODULES_DIR, 'module_finder_test.py')
search_path = (
'does_not_exist/module_utils',
testlib.ANSIBLE_MODULE_UTILS_DIR,
)
@staticmethod
def relpath(path):
return os.path.relpath(path, testlib.ANSIBLE_MODULE_UTILS_DIR)
@unittest.skipIf(sys.version_info < (3, 4), 'find spec() unavailable')
def test_importlib_find_spec(self):
scan = ansible_mitogen.module_finder._scan_importlib_find_spec
actual = scan(self.module_name, self.module_path, self.search_path)
self.assertEqual(
[(name, self.relpath(path), is_pkg) for name, path, is_pkg in actual],
[
('ansible.module_utils.external1', 'external1.py', False),
('ansible.module_utils.external2', 'external2.py', False),
('ansible.module_utils.externalpkg', 'externalpkg/__init__.py', True),
('ansible.module_utils.externalpkg.extmod', 'externalpkg/extmod.py',False),
],
)
@unittest.skipIf(sys.version_info >= (3, 4), 'find spec() preferred')
def test_imp_find_module(self):
scan = ansible_mitogen.module_finder._scan_imp_find_module
actual = scan(self.module_name, self.module_path, self.search_path)
self.assertEqual(
[(name, self.relpath(path), is_pkg) for name, path, is_pkg in actual],
[
('ansible.module_utils.external1', 'external1.py', False),
('ansible.module_utils.external2', 'external2.py', False),
('ansible.module_utils.externalpkg', 'externalpkg/__init__.py', True),
('ansible.module_utils.externalpkg.extmod', 'externalpkg/extmod.py',False),
],
)