|
1 | 1 | from typing import Set |
2 | 2 |
|
| 3 | + |
3 | 4 | import pytest # type: ignore |
4 | 5 |
|
5 | | -from textwrap import dedent |
6 | | -from grimp.adaptors.importscanner import ImportScanner, _ImportedObject |
| 6 | +from grimp.adaptors.importscanner import ImportScanner |
7 | 7 | from grimp.application.ports.modulefinder import FoundPackage, ModuleFile |
8 | 8 | from grimp.domain.valueobjects import DirectImport, Module |
9 | 9 | from tests.adaptors.filesystem import FakeFileSystem |
@@ -78,6 +78,59 @@ def test_absolute_imports(include_external_packages, expected_result): |
78 | 78 | assert expected_result == result |
79 | 79 |
|
80 | 80 |
|
| 81 | +def test_non_ascii(): |
| 82 | + blue_module = Module("mypackage.blue") |
| 83 | + non_ascii_modules = {Module("mypackage.ñon_ascii_变"), Module("mypackage.ñon_ascii_变.ラーメン")} |
| 84 | + file_system = FakeFileSystem( |
| 85 | + content_map={ |
| 86 | + "/path/to/mypackage/blue.py": """ |
| 87 | + from ñon_ascii_变 import * |
| 88 | + from . import ñon_ascii_变 |
| 89 | + import mypackage.ñon_ascii_变.ラーメン |
| 90 | + """, |
| 91 | + "/path/to/mypackage/ñon_ascii_变/__init__.py": "", |
| 92 | + "/path/to/mypackage/ñon_ascii_变/ラーメン.py": "", |
| 93 | + }, |
| 94 | + ) |
| 95 | + |
| 96 | + import_scanner = ImportScanner( |
| 97 | + found_packages={ |
| 98 | + FoundPackage( |
| 99 | + name="mypackage", |
| 100 | + directory="/path/to/mypackage", |
| 101 | + module_files=frozenset( |
| 102 | + _modules_to_module_files({blue_module} | non_ascii_modules) |
| 103 | + ), |
| 104 | + ) |
| 105 | + }, |
| 106 | + file_system=file_system, |
| 107 | + include_external_packages=True, |
| 108 | + ) |
| 109 | + |
| 110 | + result = import_scanner.scan_for_imports(blue_module) |
| 111 | + |
| 112 | + assert result == { |
| 113 | + DirectImport( |
| 114 | + importer="mypackage.blue", |
| 115 | + imported="ñon_ascii_变", |
| 116 | + line_number=1, |
| 117 | + line_contents="from ñon_ascii_变 import *", |
| 118 | + ), |
| 119 | + DirectImport( |
| 120 | + importer="mypackage.blue", |
| 121 | + imported="mypackage.ñon_ascii_变", |
| 122 | + line_number=2, |
| 123 | + line_contents="from . import ñon_ascii_变", |
| 124 | + ), |
| 125 | + DirectImport( |
| 126 | + importer="mypackage.blue", |
| 127 | + imported="mypackage.ñon_ascii_变.ラーメン", |
| 128 | + line_number=3, |
| 129 | + line_contents="import mypackage.ñon_ascii_变.ラーメン", |
| 130 | + ), |
| 131 | + } |
| 132 | + |
| 133 | + |
81 | 134 | def test_single_namespace_package_portion(): |
82 | 135 | MODULE_FOO = Module("namespace.foo") |
83 | 136 | MODULE_ONE = Module("namespace.foo.one") |
@@ -843,110 +896,3 @@ def test_exclude_type_checking_imports( |
843 | 896 | def _modules_to_module_files(modules: Set[Module]) -> Set[ModuleFile]: |
844 | 897 | some_mtime = 100933.4 |
845 | 898 | return {ModuleFile(module=module, mtime=some_mtime) for module in modules} |
846 | | - |
847 | | - |
848 | | -class TestGetRawImportedObjects: |
849 | | - def test_get_raw_imports(self): |
850 | | - module_contents = dedent( |
851 | | - """\ |
852 | | - import a |
853 | | - if TYPE_CHECKING: |
854 | | - import b |
855 | | - from c import d |
856 | | - from .e import f |
857 | | - from . import g |
858 | | - from .. import h |
859 | | - from i import * |
860 | | - from ñon_ascii_变 import * |
861 | | - from . import ñon_ascii_变 |
862 | | - import ñon_ascii_变.ラーメン |
863 | | - """ |
864 | | - ) |
865 | | - raw_imported_objects = ImportScanner._get_raw_imported_objects(module_contents) |
866 | | - |
867 | | - assert raw_imported_objects == { |
868 | | - _ImportedObject( |
869 | | - name="a", |
870 | | - line_number=1, |
871 | | - line_contents="import a", |
872 | | - typechecking_only=False, |
873 | | - ), |
874 | | - _ImportedObject( |
875 | | - name="b", |
876 | | - line_number=3, |
877 | | - line_contents="import b", |
878 | | - typechecking_only=True, |
879 | | - ), |
880 | | - _ImportedObject( |
881 | | - name="c.d", |
882 | | - line_number=4, |
883 | | - line_contents="from c import d", |
884 | | - typechecking_only=False, |
885 | | - ), |
886 | | - _ImportedObject( |
887 | | - name=".e.f", |
888 | | - line_number=5, |
889 | | - line_contents="from .e import f", |
890 | | - typechecking_only=False, |
891 | | - ), |
892 | | - _ImportedObject( |
893 | | - name=".g", |
894 | | - line_number=6, |
895 | | - line_contents="from . import g", |
896 | | - typechecking_only=False, |
897 | | - ), |
898 | | - _ImportedObject( |
899 | | - name="..h", |
900 | | - line_number=7, |
901 | | - line_contents="from .. import h", |
902 | | - typechecking_only=False, |
903 | | - ), |
904 | | - _ImportedObject( |
905 | | - name="i.*", |
906 | | - line_number=8, |
907 | | - line_contents="from i import *", |
908 | | - typechecking_only=False, |
909 | | - ), |
910 | | - _ImportedObject( |
911 | | - name="ñon_ascii_变.*", |
912 | | - line_number=9, |
913 | | - line_contents="from ñon_ascii_变 import *", |
914 | | - typechecking_only=False, |
915 | | - ), |
916 | | - _ImportedObject( |
917 | | - name=".ñon_ascii_变", |
918 | | - line_number=10, |
919 | | - line_contents="from . import ñon_ascii_变", |
920 | | - typechecking_only=False, |
921 | | - ), |
922 | | - _ImportedObject( |
923 | | - name="ñon_ascii_变.ラーメン", |
924 | | - line_number=11, |
925 | | - line_contents="import ñon_ascii_变.ラーメン", |
926 | | - typechecking_only=False, |
927 | | - ), |
928 | | - } |
929 | | - |
930 | | - |
931 | | -@pytest.mark.parametrize( |
932 | | - "is_package,imported_object_name,expected_absolute_imported_object_name", |
933 | | - [ |
934 | | - [True, "a.b", "a.b"], |
935 | | - [True, ".a.b", "foo.bar.baz.a.b"], |
936 | | - [True, "..a.b", "foo.bar.a.b"], |
937 | | - [False, "a.b", "a.b"], |
938 | | - [False, ".a.b", "foo.bar.a.b"], |
939 | | - [False, "..a.b", "foo.a.b"], |
940 | | - ], |
941 | | -) |
942 | | -def test_get_absolute_imported_object_name( |
943 | | - is_package, imported_object_name, expected_absolute_imported_object_name |
944 | | -): |
945 | | - assert ( |
946 | | - ImportScanner._get_absolute_imported_object_name( |
947 | | - module=Module("foo.bar.baz"), |
948 | | - is_package=is_package, |
949 | | - imported_object_name=imported_object_name, |
950 | | - ) |
951 | | - == expected_absolute_imported_object_name |
952 | | - ) |
0 commit comments