public void CodeGenerator_GeneratesNewobjectMethod() { var ctor = _assemblyDefinition1.MainModule.Types[1].Methods[1]; _referenceGenerator.Expect(r => r.GetCallableParamListCreateMethod(_assemblyDefinition1, _assemblyDefinition1.MainModule.Types[1].Methods[1], _tracker)).IgnoreArguments().Return( MethodReferenceObjectMother.GetParamListMethodRef(_assemblyDefinition1)); _referenceGenerator.Expect(r => r.GetCallableObjectFactoryCreateMethod(_assemblyDefinition1, _assemblyDefinition1.MainModule, _assemblyDefinition1.MainModule.Types[1], _tracker)).Return( MethodReferenceObjectMother.GetObjectFactoryMethodRef(_assemblyDefinition1)); _codeGenerator.CreateNewObjectMethod(_assemblyDefinition1, ctor, _tracker); var method = _assemblyDefinition1.MainModule.Types[1].Methods[3]; Assert.That(method != null); Assert.That(method.Name == "NewObject"); Assert.That(method.Parameters.Count == 1); }
public void CodeGenerator_ReplacesNew() { var method = _assemblyDefinition1.MainModule.Types[1].Methods[2]; var ctor = _assemblyDefinition1.MainModule.Types[1].Methods[1]; _checker.Stub(mock => mock.CanBeMixed(Arg <string> .Is.Anything)).Return(true); _checker.Stub(mock => mock.IsCached(Arg <string> .Is.Anything)).Return(true); _referenceGenerator.Expect(r => r.GetCallableParamListCreateMethod(_assemblyDefinition1, _assemblyDefinition1.MainModule.Types[1].Methods[1], _tracker)).IgnoreArguments().Return( MethodReferenceObjectMother.GetParamListMethodRef(_assemblyDefinition1)); _referenceGenerator.Expect(r => r.GetCallableObjectFactoryCreateMethod(_assemblyDefinition1, _assemblyDefinition1.MainModule, _assemblyDefinition1.MainModule.Types[1], _tracker)).Return( MethodReferenceObjectMother.GetObjectFactoryMethodRef(_assemblyDefinition1)); var result = _codeGenerator.ReplaceNewStatements(_assemblyDefinition1, method.DeclaringType, method, _tracker); Assert.That(result, Is.True); Assert.That(method.Body.Instructions[0] != (Instruction.Create(OpCodes.Newobj, ctor))); Assert.That(method.Body.Instructions[1] != (Instruction.Create(OpCodes.Newobj, ctor))); Assert.That(method.Body.Instructions[1].OpCode == OpCodes.Call); Assert.That(((MethodReference)method.Body.Instructions[1].Operand).Name == "ParamList"); }