示例#1
0
def common_superclass_is_preferred_over_union_of_four_or_more_types_even_when_additional_methods_are_defined():
    class Base(object):
        __metaclass__ = abc.ABCMeta
        
        @abc.abstractmethod
        def f(self):
            pass
    
    class A(Base):
        def f(self):
            pass
    
    class B(Base):
        def f(self):
            pass
        
        def g(self):
            pass
    
    class C(Base):
        def f(self):
            pass
    
    class D(Base):
        def f(self):
            pass
    
    assert_equal(
        union([describe(Base)]),
        common_super_type([describe(A), describe(B), describe(C), describe(D)])
    )
示例#2
0
def abstract_base_class_is_not_selected_as_type_if_sub_type_defines_additional_method():
    class Base(object):
        __metaclass__ = abc.ABCMeta
        
        @abc.abstractmethod
        def f(self):
            pass
    
    class A(Base):
        def f(self):
            pass
    
    class B(Base):
        def f(self):
            pass
        
        def g(self):
            pass
    
    assert_equal(
        union([describe(A), describe(B)]),
        common_super_type([describe(A), describe(B)])
    )
示例#3
0
def union_of_one_type_is_that_type():
    assert_equal(types.describe(int), types.union([types.describe(int)]))
示例#4
0
def unions_are_flattened():
    assert_equal(
        types.union([types.describe(int), types.describe(str), types.describe(float)]),
        types.union([types.describe(int), types.union([types.describe(str), types.describe(float)])])
    )
示例#5
0
def unions_are_order_agnostic():
    assert_equal(
        types.union([types.describe(str), types.describe(int)]),
        types.union([types.describe(int), types.describe(str)])
    )
示例#6
0
def common_super_type_of_dict_of_different_element_types_is_union_of_dict_types():
    assert_equal(
        union([Dict(describe(int), describe(str)), Dict(describe(str), describe(int))]),
        common_super_type([Dict(describe(int), describe(str)), Dict(describe(str), describe(int))])
    )
示例#7
0
def lists_of_different_types_have_super_type_of_list_of_super_type_of_elements():
    assert_equal(
        union([List(union([describe(str), describe(int)]))]),
        common_super_type([List(describe(str)), List(describe(int))])
    )
示例#8
0
def list_of_concrete_type_squashes_list_of_any_type_in_presence_of_other_types():
    assert_equal(
        union([List(describe(int)), describe(type(None))]),
        common_super_type([List(any_), List(describe(int)), describe(type(None))])
    )
示例#9
0
def common_super_type_of_types_with_none_is_union_with_none():
    assert_equal(
        union([describe(type(None)), describe(int)]),
        common_super_type([describe(type(None)), describe(int)])
    )
示例#10
0
def union_uses_union_class_with_getitem():
    type_ = types.union([types.describe(type(None)), types.describe(int)])
    assert_equal("Union[None, int]", format_type(type_))