X Tutup
import os import tempfile import unittest from pathlib import Path from bpython.importcompletion import ModuleGatherer class TestSimpleComplete(unittest.TestCase): def setUp(self): self.module_gatherer = ModuleGatherer() self.module_gatherer.modules = [ "zzabc", "zzabd", "zzefg", "zzabc.e", "zzabc.f", "zzefg.a1", "zzefg.a2", ] def test_simple_completion(self): self.assertSetEqual( self.module_gatherer.complete(10, "import zza"), {"zzabc", "zzabd"} ) self.assertSetEqual( self.module_gatherer.complete(11, "import zza"), {"zzabc", "zzabd"} ) def test_import_empty(self): self.assertSetEqual( self.module_gatherer.complete(13, "import zzabc."), {"zzabc.e", "zzabc.f"}, ) self.assertSetEqual( self.module_gatherer.complete(14, "import zzabc."), {"zzabc.e", "zzabc.f"}, ) def test_import(self): self.assertSetEqual( self.module_gatherer.complete(14, "import zzefg.a"), {"zzefg.a1", "zzefg.a2"}, ) self.assertSetEqual( self.module_gatherer.complete(15, "import zzefg.a"), {"zzefg.a1", "zzefg.a2"}, ) @unittest.expectedFailure def test_import_blank(self): self.assertSetEqual( self.module_gatherer.complete(7, "import "), {"zzabc", "zzabd", "zzefg"}, ) self.assertSetEqual( self.module_gatherer.complete(8, "import "), {"zzabc", "zzabd", "zzefg"}, ) @unittest.expectedFailure def test_from_import_empty(self): self.assertSetEqual( self.module_gatherer.complete(5, "from "), {"zzabc", "zzabd", "zzefg"}, ) self.assertSetEqual( self.module_gatherer.complete(6, "from "), {"zzabc", "zzabd", "zzefg"}, ) @unittest.expectedFailure def test_from_module_import_empty(self): self.assertSetEqual( self.module_gatherer.complete(18, "from zzabc import "), {"e", "f"} ) self.assertSetEqual( self.module_gatherer.complete(19, "from zzabc import "), {"e", "f"} ) self.assertSetEqual( self.module_gatherer.complete(19, "from zzabc import "), {"e", "f"} ) self.assertSetEqual( self.module_gatherer.complete(19, "from zzabc import "), {"e", "f"} ) def test_from_module_import(self): self.assertSetEqual( self.module_gatherer.complete(19, "from zzefg import a"), {"a1", "a2"}, ) self.assertSetEqual( self.module_gatherer.complete(20, "from zzefg import a"), {"a1", "a2"}, ) self.assertSetEqual( self.module_gatherer.complete(20, "from zzefg import a"), {"a1", "a2"}, ) self.assertSetEqual( self.module_gatherer.complete(20, "from zzefg import a"), {"a1", "a2"}, ) class TestRealComplete(unittest.TestCase): def setUp(self): self.module_gatherer = ModuleGatherer() while self.module_gatherer.find_coroutine(): pass __import__("sys") __import__("os") def test_from_attribute(self): self.assertSetEqual( self.module_gatherer.complete(19, "from sys import arg"), {"argv"} ) def test_from_attr_module(self): self.assertSetEqual( self.module_gatherer.complete(9, "from os.p"), {"os.path"} ) def test_from_package(self): self.assertSetEqual( self.module_gatherer.complete(17, "from xml import d"), {"dom"} ) class TestAvoidSymbolicLinks(unittest.TestCase): def setUp(self): with tempfile.TemporaryDirectory() as import_test_folder: base_path = Path(import_test_folder) (base_path / "Level0" / "Level1" / "Level2").mkdir(parents=True) (base_path / "Left").mkdir(parents=True) (base_path / "Right").mkdir(parents=True) current_path = base_path / "Level0" (current_path / "__init__.py").touch() current_path = current_path / "Level1" (current_path / "__init__.py").touch() current_path = current_path / "Level2" (current_path / "__init__.py").touch() # Level0/Level1/Level2/Level3 -> Level0/Level1 (current_path / "Level3").symlink_to( base_path / "Level0" / "Level1", target_is_directory=True ) current_path = base_path / "Right" (current_path / "__init__.py").touch() # Right/toLeft -> Left (current_path / "toLeft").symlink_to( base_path / "Left", target_is_directory=True ) current_path = base_path / "Left" (current_path / "__init__.py").touch() # Left/toRight -> Right (current_path / "toRight").symlink_to( base_path / "Right", target_is_directory=True ) self.module_gatherer = ModuleGatherer((base_path.absolute(),)) while self.module_gatherer.find_coroutine(): pass def test_simple_symbolic_link_loop(self): filepaths = [ "Left.toRight.toLeft", "Left.toRight", "Left", "Level0.Level1.Level2.Level3", "Level0.Level1.Level2", "Level0.Level1", "Level0", "Right", "Right.toLeft", "Right.toLeft.toRight", ] for thing in self.module_gatherer.modules: self.assertIn(thing, filepaths) if thing == "Left.toRight.toLeft": filepaths.remove("Right.toLeft") filepaths.remove("Right.toLeft.toRight") if thing == "Right.toLeft.toRight": filepaths.remove("Left.toRight.toLeft") filepaths.remove("Left.toRight") filepaths.remove(thing) self.assertFalse(filepaths) class TestBugReports(unittest.TestCase): def test_issue_847(self): with tempfile.TemporaryDirectory() as import_test_folder: # ./xyzzy # ./xyzzy/__init__.py # ./xyzzy/plugh # ./xyzzy/plugh/__init__.py # ./xyzzy/plugh/bar.py # ./xyzzy/plugh/foo.py base_path = Path(import_test_folder) (base_path / "xyzzy" / "plugh").mkdir(parents=True) (base_path / "xyzzy" / "__init__.py").touch() (base_path / "xyzzy" / "plugh" / "__init__.py").touch() (base_path / "xyzzy" / "plugh" / "bar.py").touch() (base_path / "xyzzy" / "plugh" / "foo.py").touch() module_gatherer = ModuleGatherer((base_path.absolute(),)) while module_gatherer.find_coroutine(): pass self.assertSetEqual( module_gatherer.complete(17, "from xyzzy.plugh."), {"xyzzy.plugh.bar", "xyzzy.plugh.foo"}, ) if __name__ == "__main__": unittest.main()
X Tutup