1+ from __future__ import annotations
2+
3+ from types import ModuleType
4+
15import pytest
26
37from linkml_runtime .utils .compile_python import compile_python
48
59
6- @pytest .fixture
7- def module_1 () :
10+ @pytest .fixture ( scope = "module" )
11+ def base_module () -> str :
812 return """
913x: int = 2
1014
@@ -13,28 +17,47 @@ def fun(value: int):
1317"""
1418
1519
16- @pytest .fixture
17- def module_2 () :
20+ @pytest .fixture ( scope = "module" )
21+ def importing_module () -> str :
1822 return """
19- import module_1 as m
23+ import MODULE_NAME as m
2024
2125def more_fun(message: str):
2226 return f'got "{message}"'
2327"""
2428
2529
26- def test_compile (module_1 , module_2 ):
27- m1 = compile_python (module_1 , module_name = "module_1" )
28- assert m1 .__name__ == "module_1"
29- assert m1 .x == 2
30- assert m1 .fun (3 ) == "known value 3"
31- m2 = compile_python (module_2 , module_name = "module_2" , package_path = "." )
30+ def check_generated_module (module : ModuleType , module_name : str ) -> None :
31+ assert isinstance (module , ModuleType )
32+ assert module .__name__ == module_name
33+ assert module .x == 2
34+ assert module .fun (3 ) == "known value 3"
35+
36+
37+ @pytest .mark .parametrize (("name_arg" , "module_name" ), [(None , "test" ), ("" , "test" ), ("base_module" , "base_module" )])
38+ def test_compile_python_module_name (base_module : str , name_arg : str | None , module_name : str ) -> None :
39+ """Test the compilation of python code to create a module."""
40+ m = compile_python (base_module , module_name = name_arg )
41+ check_generated_module (m , module_name )
42+
43+
44+ @pytest .mark .parametrize (("name_arg" , "module_name" ), [(None , "test" ), ("" , "test" ), ("base_module" , "base_module" )])
45+ def test_compile_python_importing_module_local_module (
46+ base_module : str ,
47+ importing_module : str ,
48+ name_arg : str | None ,
49+ module_name : str ,
50+ ) -> None :
51+ """Test the compilation of python code to create a local module and then compile a second module that imports the first."""
52+ m = compile_python (base_module , module_name = name_arg )
53+ check_generated_module (m , module_name )
54+
55+ # switch in the appropriate module name
56+ importing_module_text = importing_module .replace ("MODULE_NAME" , module_name )
57+ m2 = compile_python (importing_module_text , package_path = "." , module_name = "module_2" )
58+ assert isinstance (m2 , ModuleType )
3259 assert m2 .__name__ == "module_2"
3360 assert m2 .more_fun ("hello" ) == 'got "hello"'
34- assert m2 .m .fun (4 ) == "known value 4"
35- assert m2 .m .x == 2
36-
3761
38- def test_default_module_name (module_1 ):
39- m = compile_python (module_1 )
40- assert m .__name__ == "test"
62+ # check the imported module, m2.m, has the correct type, name, etc.
63+ check_generated_module (m2 .m , module_name )
0 commit comments