@@ -2792,6 +2792,49 @@ def _(arg: int | float):
2792
2792
self .assertEqual (f (1 ), "types.UnionType" )
2793
2793
self .assertEqual (f (1.0 ), "types.UnionType" )
2794
2794
2795
+ def test_union_conflict (self ):
2796
+ @functools .singledispatch
2797
+ def f (arg ):
2798
+ return "default"
2799
+
2800
+ @f .register
2801
+ def _ (arg : typing .Union [str , bytes ]):
2802
+ return "typing.Union"
2803
+
2804
+ @f .register
2805
+ def _ (arg : int | str ):
2806
+ return "types.UnionType"
2807
+
2808
+ self .assertEqual (f ([]), "default" )
2809
+ self .assertEqual (f ("" ), "types.UnionType" ) # last one wins
2810
+ self .assertEqual (f (b"" ), "typing.Union" )
2811
+ self .assertEqual (f (1 ), "types.UnionType" )
2812
+
2813
+ def test_union_None (self ):
2814
+ @functools .singledispatch
2815
+ def typing_union (arg ):
2816
+ return "default"
2817
+
2818
+ @typing_union .register
2819
+ def _ (arg : typing .Union [str , None ]):
2820
+ return "typing.Union"
2821
+
2822
+ self .assertEqual (typing_union (1 ), "default" )
2823
+ self .assertEqual (typing_union ("" ), "typing.Union" )
2824
+ self .assertEqual (typing_union (None ), "typing.Union" )
2825
+
2826
+ @functools .singledispatch
2827
+ def types_union (arg ):
2828
+ return "default"
2829
+
2830
+ @types_union .register
2831
+ def _ (arg : int | None ):
2832
+ return "types.UnionType"
2833
+
2834
+ self .assertEqual (types_union ("" ), "default" )
2835
+ self .assertEqual (types_union (1 ), "types.UnionType" )
2836
+ self .assertEqual (types_union (None ), "types.UnionType" )
2837
+
2795
2838
def test_register_genericalias (self ):
2796
2839
@functools .singledispatch
2797
2840
def f (arg ):
0 commit comments