@@ -3696,34 +3696,37 @@ def cleanup(self):
3696
3696
for f in self .module ._cleanups :
3697
3697
f ()
3698
3698
3699
- def setUp (self ):
3700
- sys .modules ['typing' ] = self .module
3699
+ @classmethod
3700
+ def setUpClass (cls ):
3701
+ sys .modules ['typing' ] = cls .module
3702
+ global UserId
3703
+ UserId = cls .module .NewType ('UserId' , int )
3704
+ cls .UserName = cls .module .NewType (cls .__qualname__ + '.UserName' , str )
3705
+
3706
+ @classmethod
3707
+ def tearDownClass (cls ):
3708
+ global UserId
3709
+ del UserId
3710
+ del cls .UserName
3711
+ sys .modules ['typing' ] = typing
3701
3712
3702
3713
def tearDown (self ):
3703
3714
self .cleanup ()
3704
- sys .modules ['typing' ] = typing
3705
3715
3706
3716
def test_basic (self ):
3707
- UserId = self .module .NewType ('UserId' , int )
3708
- UserName = self .module .NewType ('UserName' , str )
3709
3717
self .assertIsInstance (UserId (5 ), int )
3710
- self .assertIsInstance (UserName ('Joe' ), str )
3718
+ self .assertIsInstance (self . UserName ('Joe' ), str )
3711
3719
self .assertEqual (UserId (5 ) + 1 , 6 )
3712
3720
3713
3721
def test_errors (self ):
3714
- UserId = self .module .NewType ('UserId' , int )
3715
- UserName = self .module .NewType ('UserName' , str )
3716
3722
with self .assertRaises (TypeError ):
3717
3723
issubclass (UserId , int )
3718
3724
with self .assertRaises (TypeError ):
3719
- class D (UserName ):
3725
+ class D (UserId ):
3720
3726
pass
3721
3727
3722
3728
def test_or (self ):
3723
- UserId = self .module .NewType ('UserId' , int )
3724
- UserName = self .module .NewType ('UserName' , str )
3725
-
3726
- for cls in (int , UserName ):
3729
+ for cls in (int , self .UserName ):
3727
3730
with self .subTest (cls = cls ):
3728
3731
self .assertEqual (UserId | cls , self .module .Union [UserId , cls ])
3729
3732
self .assertEqual (cls | UserId , self .module .Union [cls , UserId ])
@@ -3732,16 +3735,37 @@ def test_or(self):
3732
3735
self .assertEqual (self .module .get_args (cls | UserId ), (cls , UserId ))
3733
3736
3734
3737
def test_special_attrs (self ):
3735
- UserId = self .module .NewType ('UserId' , int )
3736
-
3737
3738
self .assertEqual (UserId .__name__ , 'UserId' )
3738
3739
self .assertEqual (UserId .__qualname__ , 'UserId' )
3739
3740
self .assertEqual (UserId .__module__ , __name__ )
3741
+ self .assertEqual (UserId .__supertype__ , int )
3740
3742
3741
- def test_repr (self ):
3742
- UserId = self .module .NewType ('UserId' , int )
3743
+ UserName = self .UserName
3744
+ self .assertEqual (UserName .__name__ , 'UserName' )
3745
+ self .assertEqual (UserName .__qualname__ ,
3746
+ self .__class__ .__qualname__ + '.UserName' )
3747
+ self .assertEqual (UserName .__module__ , __name__ )
3748
+ self .assertEqual (UserName .__supertype__ , str )
3743
3749
3750
+ def test_repr (self ):
3744
3751
self .assertEqual (repr (UserId ), f'{ __name__ } .UserId' )
3752
+ self .assertEqual (repr (self .UserName ),
3753
+ f'{ __name__ } .{ self .__class__ .__qualname__ } .UserName' )
3754
+
3755
+ def test_pickle (self ):
3756
+ UserAge = self .module .NewType ('UserAge' , float )
3757
+ for proto in range (pickle .HIGHEST_PROTOCOL + 1 ):
3758
+ pickled = pickle .dumps (UserId , proto )
3759
+ loaded = pickle .loads (pickled )
3760
+ self .assertIs (loaded , UserId )
3761
+
3762
+ pickled = pickle .dumps (self .UserName , proto )
3763
+ loaded = pickle .loads (pickled )
3764
+ self .assertIs (loaded , self .UserName )
3765
+
3766
+ with self .assertRaises (pickle .PicklingError ):
3767
+ pickle .dumps (UserAge , proto )
3768
+
3745
3769
3746
3770
class NewTypePythonTests (NewTypeTests , BaseTestCase ):
3747
3771
module = py_typing
0 commit comments