def it_not_transform_if_its_already_ftype(self): Str_mock = mock.MagicMock() obj = ftypes.Str('abc') with mock.patch.dict('flowp.ftypes.TYPES_MAP', {str:Str_mock}): ftypes.this(obj) assert not Str_mock.called assert ftypes.this(obj) is obj
def it_transform_function_types_to_flowp_function_types(self): class SomeClass: def method(self): return 1 def function(): return 2 obj = SomeClass() assert isinstance(ftypes.this(function), ftypes.FunctionAdapter) assert isinstance(ftypes.this(obj.method), ftypes.FunctionAdapter) assert isinstance(ftypes.this("abc".index), ftypes.FunctionAdapter)
def it_transforms_builtin_types_to_flowp_types(self): class SomeClass: pass assert isinstance(ftypes.this(1), ftypes.Int) assert isinstance(ftypes.this(1.1), ftypes.Float) assert isinstance(ftypes.this("abc"), ftypes.Str) assert isinstance(ftypes.this(True), ftypes.BoolAdapter) assert isinstance(ftypes.this(None), ftypes.NoneAdapter) assert isinstance(ftypes.this([1, 2, 3]), ftypes.List) assert isinstance(ftypes.this((1, 2, 3)), ftypes.Tuple) assert isinstance(ftypes.this({'a': 1, 'b': 2}), ftypes.Dict) assert isinstance(ftypes.this({1, 2, 3}), ftypes.Set) assert isinstance(ftypes.this(SomeClass), ftypes.TypeAdapter)
def it_return_object_adapter_if_not_builtin_type(self): class SomeClass: pass obj = SomeClass() obj.a = 111 new_obj = ftypes.this(obj) assert new_obj.__class__ is ftypes.ObjectAdapter assert new_obj._adaptee is obj assert new_obj.a == 111
def it_leaves_class_and_object_attributes(self): class SomeClass: a = 1 def __init__(self): self.b = 2 obj = SomeClass() new_obj = ftypes.this(obj) assert new_obj.a == 1 assert new_obj.b == 2
def it_invokes_types_method_through_this_wrapper(self): expect(ftypes.this(self.s)).isinstance(ftypes.Str) expect(ftypes.this(self.l).hasattr('index'))