1+ import inspect
12import sys
23from enum import Enum as PyEnum
34from io import StringIO
@@ -71,9 +72,6 @@ def test_restore_flattened_inputs(self) -> None:
7172 assert isinstance (result .ab , _GroupAttrDict )
7273 assert isinstance (result .ab .c , PipelineInput )
7374
74- @pytest .mark .skipif (
75- condition = sys .version_info >= (3 , 13 ), reason = "historical implementation doesn't support Python 3.13+"
76- )
7775 def test_auto_generated_functions (self ) -> None :
7876 class EnumOps (PyEnum ):
7977 Option1 = "Option1"
@@ -89,15 +87,27 @@ class MixedGroup:
8987
9088 # __init__ func test
9189 assert hasattr (MixedGroup , "__init__" ) is True
92- original_out = sys .stdout
93- sys .stdout = stdout_str_IO = StringIO ()
94- help (MixedGroup .__init__ )
95- assert (
96- "__init__(self,*,int_param:int=None,str_param:str=None,enum_param:str=None,"
97- "str_default_param:str='test',optional_int_param:int=5)->None"
98- in remove_extra_character (stdout_str_IO .getvalue ())
99- )
100- sys .stdout = original_out
90+ sig = inspect .signature (MixedGroup .__init__ )
91+ params = sig .parameters
92+
93+ # Verify all expected parameters exist
94+ assert "self" in params
95+ assert "int_param" in params
96+ assert "str_param" in params
97+ assert "enum_param" in params
98+ assert "str_default_param" in params
99+ assert "optional_int_param" in params
100+
101+ # Verify default values
102+ assert params ["int_param" ].default is None
103+ assert params ["str_param" ].default is None
104+ assert params ["enum_param" ].default is None
105+ assert params ["str_default_param" ].default == "test"
106+ assert params ["optional_int_param" ].default == 5
107+
108+ # Verify keyword-only parameters (after *)
109+ assert params ["int_param" ].kind == inspect .Parameter .KEYWORD_ONLY
110+ assert params ["str_param" ].kind == inspect .Parameter .KEYWORD_ONLY
101111
102112 # __repr__ func test
103113 var = MixedGroup (
@@ -415,9 +425,6 @@ def my_pipeline(my_inputs: PortInputs):
415425
416426 assert "Only primitive types can be used as input of group, got uri_file" in str (e .value )
417427
418- @pytest .mark .skipif (
419- condition = sys .version_info >= (3 , 13 ), reason = "historical implementation doesn't support Python 3.13+"
420- )
421428 def test_group_defaults_with_outputs (self ):
422429 @group
423430 class MixedGroup :
@@ -428,21 +435,28 @@ class MixedGroup:
428435 optional_int_param : Input (type = "integer" , optional = True ) = 5
429436 output_folder : Output (type = "uri_folder" )
430437
438+ # __init__ func test
431439 assert hasattr (MixedGroup , "__init__" ) is True
432- original_out = sys .stdout
433- sys .stdout = stdout_str_IO = StringIO ()
434- help (MixedGroup .__init__ )
435- assert (
436- "__init__(self,*,"
437- "int_param:int=None,"
438- "str_default_param:str='test',"
439- "str_param:str=None,"
440- "input_folder:{'type':'uri_folder'}=None,"
441- "optional_int_param:int=5,"
442- "output_folder:{'type':'uri_folder'}=None)"
443- "->None" in remove_extra_character (stdout_str_IO .getvalue ())
444- )
445- sys .stdout = original_out
440+ sig = inspect .signature (MixedGroup .__init__ )
441+ params = sig .parameters
442+
443+ # Verify all expected parameters exist
444+ assert "int_param" in params
445+ assert "str_default_param" in params
446+ assert "str_param" in params
447+ assert "input_folder" in params
448+ assert "optional_int_param" in params
449+ assert "output_folder" in params
450+
451+ # Verify default values
452+ assert params ["int_param" ].default is None
453+ assert params ["str_default_param" ].default == "test"
454+ assert params ["str_param" ].default is None
455+ assert params ["optional_int_param" ].default == 5
456+ # input_folder and output_folder should have None as default
457+ assert params ["input_folder" ].default is None
458+ assert params ["output_folder" ].default is None
459+
446460 # __repr__ func test
447461 var = MixedGroup (
448462 int_param = 1 , str_param = "test-str" , input_folder = Input (path = "input" ), output_folder = Output (path = "output" )
0 commit comments