@@ -4140,6 +4140,130 @@ def test_text_annotations(self):
41404140            {'foo' : dataclass_textanno .Foo ,
41414141             'return' : type (None )})
41424142
4143+     def  test_dataclass_from_another_module (self ):
4144+         # see bpo-45524 
4145+         from  test .test_dataclasses  import  dataclass_textanno 
4146+         from  dataclasses  import  dataclass 
4147+ 
4148+         @dataclass  
4149+         class  Default (dataclass_textanno .Bar ):
4150+             pass 
4151+ 
4152+         @dataclass (init = False ) 
4153+         class  WithInitFalse (dataclass_textanno .Bar ):
4154+             pass 
4155+ 
4156+         @dataclass (init = False ) 
4157+         class  CustomInit (dataclass_textanno .Bar ):
4158+             def  __init__ (self , foo : dataclass_textanno .Foo ) ->  None :
4159+                 pass 
4160+ 
4161+         @dataclass  
4162+         class  FutureInitChild (dataclass_textanno .WithFutureInit ):
4163+             pass 
4164+ 
4165+         classes  =  [
4166+             Default ,
4167+             WithInitFalse ,
4168+             CustomInit ,
4169+             dataclass_textanno .WithFutureInit ,
4170+             FutureInitChild ,
4171+         ]
4172+         for  klass  in  classes :
4173+             with  self .subTest (klass = klass ):
4174+                 self .assertEqual (
4175+                     get_type_hints (klass ),
4176+                     {'foo' : dataclass_textanno .Foo },
4177+                 )
4178+                 self .assertEqual (get_type_hints (klass .__new__ ), {})
4179+                 self .assertEqual (
4180+                     get_type_hints (klass .__init__ ),
4181+                     {'foo' : dataclass_textanno .Foo , 'return' : type (None )},
4182+                 )
4183+ 
4184+     def  test_dataclass_from_proxy_module (self ):
4185+         # see bpo-45524 
4186+         from  test .test_dataclasses  import  dataclass_textanno 
4187+         from  test .test_dataclasses  import  dataclass_textanno2 
4188+         from  dataclasses  import  dataclass 
4189+ 
4190+         @dataclass  
4191+         class  Default (dataclass_textanno2 .Child ):
4192+             pass 
4193+ 
4194+         @dataclass (init = False ) 
4195+         class  WithInitFalse (dataclass_textanno2 .Child ):
4196+             pass 
4197+ 
4198+         @dataclass (init = False ) 
4199+         class  CustomInit (dataclass_textanno2 .Child ):
4200+             def  __init__ (
4201+                 self ,
4202+                 foo : dataclass_textanno .Foo ,
4203+                 custom : dataclass_textanno2 .Custom ,
4204+             ) ->  None :
4205+                 pass 
4206+ 
4207+         @dataclass  
4208+         class  FutureInitChild (dataclass_textanno2 .WithFutureInit ):
4209+             pass 
4210+ 
4211+         classes  =  [
4212+             Default ,
4213+             WithInitFalse ,
4214+             CustomInit ,
4215+             dataclass_textanno2 .WithFutureInit ,
4216+             FutureInitChild ,
4217+         ]
4218+         for  klass  in  classes :
4219+             with  self .subTest (klass = klass ):
4220+                 self .assertEqual (
4221+                     get_type_hints (klass ),
4222+                     {
4223+                         'foo' : dataclass_textanno .Foo ,
4224+                         'custom' : dataclass_textanno2 .Custom ,
4225+                     },
4226+                 )
4227+                 self .assertEqual (get_type_hints (klass .__new__ ), {})
4228+                 self .assertEqual (
4229+                     get_type_hints (klass .__init__ ),
4230+                     {
4231+                         'foo' : dataclass_textanno .Foo ,
4232+                         'custom' : dataclass_textanno2 .Custom ,
4233+                         'return' : type (None ),
4234+                     },
4235+                 )
4236+ 
4237+     def  test_dataclass_proxy_modules_matching_name_override (self ):
4238+         # see bpo-45524 
4239+         from  test .test_dataclasses  import  dataclass_textanno2 
4240+         from  dataclasses  import  dataclass 
4241+ 
4242+         @dataclass  
4243+         class  Default (dataclass_textanno2 .WithMatchingNameOverride ):
4244+             pass 
4245+ 
4246+         classes  =  [
4247+             Default ,
4248+             dataclass_textanno2 .WithMatchingNameOverride 
4249+         ]
4250+         for  klass  in  classes :
4251+             with  self .subTest (klass = klass ):
4252+                 self .assertEqual (
4253+                     get_type_hints (klass ),
4254+                     {
4255+                         'foo' : dataclass_textanno2 .Foo ,
4256+                     },
4257+                 )
4258+                 self .assertEqual (get_type_hints (klass .__new__ ), {})
4259+                 self .assertEqual (
4260+                     get_type_hints (klass .__init__ ),
4261+                     {
4262+                         'foo' : dataclass_textanno2 .Foo ,
4263+                         'return' : type (None ),
4264+                     },
4265+                 )
4266+ 
41434267
41444268ByMakeDataClass  =  make_dataclass ('ByMakeDataClass' , [('x' , int )])
41454269ManualModuleMakeDataClass  =  make_dataclass ('ManualModuleMakeDataClass' ,
0 commit comments