def GeneratorWithSingleException(genname, input, exception): execution = EmptyProjectExecution() generator = Function(genname, input.keys(), is_generator=True) gobject = GeneratorObject(None, generator, stable_serialize_call_arguments(execution, input), generator) gobject.add_call(GeneratorObjectInvocation(generator, {}, exception=execution.serialize(exception))) generator.add_call(gobject) return generator
def GeneratorWithYields(genname, input, yields): execution = EmptyProjectExecution() generator = Function(genname, input.keys(), is_generator=True) gobject = GeneratorObject(None, generator, stable_serialize_call_arguments(execution, input), generator) for syield in map(execution.serialize, yields): gobject.add_call(GeneratorObjectInvocation(generator, {}, syield)) generator.add_call(gobject) return generator
def create_method_call(method, args, output, call_type, execution, user_object): sargs = stable_serialize_call_arguments(execution, args) if call_type == 'output': call = MethodCall(method, sargs) call.set_output(execution.serialize(output)) return call elif call_type == 'exception': call = MethodCall(method, sargs) call.set_exception(execution.serialize(output)) return call elif call_type == 'generator': gobject = GeneratorObject(None, method, sargs, user_object) for syield in map(execution.serialize, output): gobject.add_call(GeneratorObjectInvocation(method, {}, syield)) return gobject
def test_generates_complete_assertion_for_functions_which_take_defined_generator_objects_as_arguments(self): execution = EmptyProjectExecution() def ssca(args): return stable_serialize_call_arguments(execution, args) s = execution.serialize mygen = Function('mygen', ['a', 'b'], is_generator=True) gobject = GeneratorObject(None, mygen, ssca({'a': 42, 'b': False}), mygen) gobject.add_call(GeneratorObjectInvocation(mygen, {}, s(42))) mygen.add_call(gobject) function = Function('invoke', ['g']) function.add_call(FunctionCall(function, {'g': gobject}, output=s(True))) result = generate_single_test_module(objects=[function, mygen]) assert_contains(result, "from module import mygen") assert_contains(result, "def test_invoke_returns_true_for_mygen_instance(self):") assert_contains(result, "self.assertEqual(True, invoke(mygen(42, False)))")
def create_serialized_object(self, obj): # Generator object has been passed as a value. We don't have enough # information to create a complete GeneratorObject instance here, so # we create a stub to be activated later. if isinstance(obj, types.GeneratorType): return GeneratorObject(obj) user_object = self.create_serialized_user_object(obj) if user_object: return user_object elif is_immutable(obj): return ImmutableObject(obj) elif is_sequence(obj): return SequenceObject(obj, self.serialize) elif is_mapping(obj): return MapObject(obj, self.serialize) elif is_builtin_exception(obj): return BuiltinException(obj, self.serialize) elif is_library_object(obj): return LibraryObject(obj, self.serialize) else: return UnknownObject(obj)
def inject_generator_object(poe, obj, *args): return poe.execution._retrieve_or_capture( obj, lambda _: GeneratorObject(obj, *args))
def create_generator_object(_): gobject = GeneratorObject(generator, definition, sargs, callable) save_generator_inside(gobject, generator) return gobject