# coding: utf-8 """Tests for the elpy.impmagic module""" import re import sys import unittest from elpy import impmagic from elpy.tests.support import BackendTestCase TEST_SOURCE = '''# test file import time import logging os.getcwd() time.sleep(1) ''' @unittest.skipIf(sys.version_info >= (3, 5), "importmagic fails in 3.5") class ImportMagicTestCase(BackendTestCase): def setUp(self): if not impmagic.importmagic: raise unittest.SkipTest self.importmagic = impmagic.ImportMagic() super(ImportMagicTestCase, self).setUp() def build_index(self): self.project_file('mymod.py', 'class AnUncommonName:\n pass\n') self.importmagic.build_index(self.project_root, custom_path=[self.project_root], blacklist_re=re.compile('^$')) self.importmagic._thread.join() def test_get_symbols(self): self.build_index() candidates = self.importmagic.get_import_symbols('AnUncommonName') self.assertEqual(candidates, ['from mymod import AnUncommonName']) candidates = self.importmagic.get_import_symbols('mymod') self.assertEqual(candidates, ['import mymod']) def test_add_import(self): self.build_index() start, end, newblock = self.importmagic.add_import( TEST_SOURCE, 'from mymod import AnUncommonName') self.assertEqual(start, 2) self.assertEqual(end, 5) self.assertEqual(newblock.strip(), 'import logging\n' 'import time\n' '\n' 'from mymod import AnUncommonName') start, end, newblock = self.importmagic.add_import( TEST_SOURCE, 'import mymod') self.assertEqual(start, 2) self.assertEqual(end, 5) self.assertEqual(newblock.strip(), 'import logging\nimport time\n\nimport mymod') def test_get_unresolved_symbols(self): self.build_index() symbols = self.importmagic.get_unresolved_symbols('x = a + b\ny = c.d') self.assertEqual(sorted(symbols), ['a', 'b', 'c.d']) def test_remove_unreferenced_imports(self): self.build_index() start, end, newblock = \ self.importmagic.remove_unreferenced_imports(TEST_SOURCE) self.assertEqual(start, 2) self.assertEqual(end, 5) self.assertEqual(newblock.strip(), 'import time')