@@ -3673,28 +3673,35 @@ def foo(a: A) -> Optional[BaseException]:
3673
3673
3674
3674
3675
3675
class NewTypeTests (BaseTestCase ):
3676
+ @classmethod
3677
+ def setUpClass (cls ):
3678
+ global UserId
3679
+ UserId = NewType ('UserId' , int )
3680
+ cls .UserName = NewType (cls .__qualname__ + '.UserName' , str )
3681
+
3682
+ @classmethod
3683
+ def tearDownClass (cls ):
3684
+ global UserId
3685
+ del UserId
3686
+ del cls .UserName
3687
+
3688
+ def tearDown (self ):
3689
+ self .clear_caches ()
3676
3690
3677
3691
def test_basic (self ):
3678
- UserId = NewType ('UserId' , int )
3679
- UserName = NewType ('UserName' , str )
3680
3692
self .assertIsInstance (UserId (5 ), int )
3681
- self .assertIsInstance (UserName ('Joe' ), str )
3693
+ self .assertIsInstance (self . UserName ('Joe' ), str )
3682
3694
self .assertEqual (UserId (5 ) + 1 , 6 )
3683
3695
3684
3696
def test_errors (self ):
3685
- UserId = NewType ('UserId' , int )
3686
- UserName = NewType ('UserName' , str )
3687
3697
with self .assertRaises (TypeError ):
3688
3698
issubclass (UserId , int )
3689
3699
with self .assertRaises (TypeError ):
3690
- class D (UserName ):
3700
+ class D (UserId ):
3691
3701
pass
3692
3702
3693
3703
def test_or (self ):
3694
- UserId = NewType ('UserId' , int )
3695
- UserName = NewType ('UserName' , str )
3696
-
3697
- for cls in (int , UserName ):
3704
+ for cls in (int , self .UserName ):
3698
3705
with self .subTest (cls = cls ):
3699
3706
self .assertEqual (UserId | cls , Union [UserId , cls ])
3700
3707
self .assertEqual (cls | UserId , Union [cls , UserId ])
@@ -3703,16 +3710,37 @@ def test_or(self):
3703
3710
self .assertEqual (get_args (cls | UserId ), (cls , UserId ))
3704
3711
3705
3712
def test_special_attrs (self ):
3706
- UserId = NewType ('UserId' , int )
3707
-
3708
3713
self .assertEqual (UserId .__name__ , 'UserId' )
3709
3714
self .assertEqual (UserId .__qualname__ , 'UserId' )
3710
3715
self .assertEqual (UserId .__module__ , __name__ )
3716
+ self .assertEqual (UserId .__supertype__ , int )
3711
3717
3712
- def test_repr (self ):
3713
- UserId = NewType ('UserId' , int )
3718
+ UserName = self .UserName
3719
+ self .assertEqual (UserName .__name__ , 'UserName' )
3720
+ self .assertEqual (UserName .__qualname__ ,
3721
+ self .__class__ .__qualname__ + '.UserName' )
3722
+ self .assertEqual (UserName .__module__ , __name__ )
3723
+ self .assertEqual (UserName .__supertype__ , str )
3714
3724
3725
+ def test_repr (self ):
3715
3726
self .assertEqual (repr (UserId ), f'{ __name__ } .UserId' )
3727
+ self .assertEqual (repr (self .UserName ),
3728
+ f'{ __name__ } .{ self .__class__ .__qualname__ } .UserName' )
3729
+
3730
+ def test_pickle (self ):
3731
+ UserAge = NewType ('UserAge' , float )
3732
+ for proto in range (pickle .HIGHEST_PROTOCOL + 1 ):
3733
+ pickled = pickle .dumps (UserId , proto )
3734
+ loaded = pickle .loads (pickled )
3735
+ self .assertIs (loaded , UserId )
3736
+
3737
+ pickled = pickle .dumps (self .UserName , proto )
3738
+ loaded = pickle .loads (pickled )
3739
+ self .assertIs (loaded , self .UserName )
3740
+
3741
+ with self .assertRaises (pickle .PicklingError ):
3742
+ pickle .dumps (UserAge , proto )
3743
+
3716
3744
3717
3745
class NamedTupleTests (BaseTestCase ):
3718
3746
class NestedEmployee (NamedTuple ):
0 commit comments