def test_doesnt_include_side_effects_of_method_calls_into_user_object_test_case(self):
        klass = Class("UserClass")
        user_obj = UserObject(None, klass)

        init = Method("__init__", klass=klass)
        init_call = MethodCall(definition=init, args={}, output=user_obj)

        method1 = Method("method1", klass=klass)
        method1_call = MethodCall(definition=method1, args={}, output=create(ImmutableObject))
        se1 = GlobalRebind('mod', 'var', ImmutableObject('new_value'))
        method1_call.add_side_effect(se1)

        method2 = Method("method2", klass=klass)
        method2_call = MethodCall(definition=method2, args={}, output=create(ImmutableObject))
        se2 = AttributeRebind(user_obj, 'attr', create(ImmutableObject, obj=1))
        method2_call.add_side_effect(se2)

        user_obj.add_call(init_call)
        user_obj.add_call(method1_call)
        user_obj.add_call(method2_call)

        put_on_timeline(user_obj, init_call, method1_call, se1, method2_call, se2)

        assert_equal_types(assertions_for_interaction(user_obj),
                           [UserObject,
                            EqualAssertionLine,
                            EqualAssertionLine,
                            EqualAssertionLine,
                            EqualAssertionLine,
                            ImmutableObject,
                            ImmutableObject])
Exemplo n.º 2
0
 def create_serialized_user_object(self, obj):
     klass = self.project.find_object(Class, class_name(obj),
                                      module_name(obj))
     if klass:
         serialized = UserObject(obj, klass)
         klass.add_user_object(serialized)
         return serialized
Exemplo n.º 3
0
 def test_generates_side_effect_line_for_user_object_attribute_change(self):
     klass = Class("UserClass", module=Module(None, 'user_module'))
     user_obj = UserObject(None, klass)
     assign = Assign('user_obj', user_obj, 1)
     se = AttributeRebind(user_obj, 'attr', create(ImmutableObject, obj=1))
     assert_equal_strings("user_obj = UserClass()\nuser_obj.attr = 1\n",
                          generate_test_contents([assign, se], None))
Exemplo n.º 4
0
    def test_doesnt_include_side_effects_of_method_calls_into_user_object_test_case(
            self):
        klass = Class("UserClass")
        user_obj = UserObject(None, klass)

        init = Method("__init__", klass=klass)
        init_call = MethodCall(definition=init, args={}, output=user_obj)

        method1 = Method("method1", klass=klass)
        method1_call = MethodCall(definition=method1,
                                  args={},
                                  output=create(ImmutableObject))
        se1 = GlobalRebind('mod', 'var', ImmutableObject('new_value'))
        method1_call.add_side_effect(se1)

        method2 = Method("method2", klass=klass)
        method2_call = MethodCall(definition=method2,
                                  args={},
                                  output=create(ImmutableObject))
        se2 = AttributeRebind(user_obj, 'attr', create(ImmutableObject, obj=1))
        method2_call.add_side_effect(se2)

        user_obj.add_call(init_call)
        user_obj.add_call(method1_call)
        user_obj.add_call(method2_call)

        put_on_timeline(user_obj, init_call, method1_call, se1, method2_call,
                        se2)

        assert_equal_types(assertions_for_interaction(user_obj), [
            UserObject, EqualAssertionLine, EqualAssertionLine,
            EqualAssertionLine, EqualAssertionLine, ImmutableObject,
            ImmutableObject
        ])
Exemplo n.º 5
0
def ClassWithMethods(classname, methods, call_type='output'):
    """call_type has to be one of 'output', 'exception' or 'generator'.
    """
    execution = EmptyProjectExecution()
    method_objects = []
    method_calls = []

    klass = Class(classname, methods=method_objects)
    user_object = UserObject(None, klass)

    for name, calls in methods:
        method = Method(name, ['self'] + flatten([a.keys() for a,_ in calls]),
            is_generator=(call_type=='generator'))
        method_objects.append(method)
        for args, output in calls:
            method_calls.append(create_method_call(method, args, output, call_type, execution, user_object))

    klass.add_methods(method_objects)
    user_object.calls = method_calls
    klass.add_user_object(user_object)

    return klass
Exemplo n.º 6
0
 def create_user_object(_):
     return UserObject(obj, klass)