public void NoParameters_ProperlyCalled() { var instance = new ObscenelyAnnoyingClass(); var expected = MethodReference.Get(() => instance.Method()); var methodResult = Build <Action <object> >(expected.Name).Build(); methodResult(instance); Assert.Equal(expected: expected.ToString(), instance.LastCall.MethodString); }
public void StringParameter_ProperlyCalled() { var instance = new ObscenelyAnnoyingClass(); string parameter = string.Empty; var expected = MethodReference.Get(() => instance.Method(parameter)); var methodResult = Build <Action <object, string> >(expected.Name).WithParameters(parameter).Build(); methodResult(instance, parameter); Assert.Equal(expected: expected.ToString(), instance.LastCall.MethodString); }
public void StringParameterAsObject_ProperlyCalls_ObjectMethod() { var instance = new ObscenelyAnnoyingClass(); object parameter = string.Empty; var expected = MethodReference.Get(() => instance.Method(parameter)); var methodResult = Build <Action <object, object> >(expected.Name).WithParameters(parameter).Build(); methodResult.Invoke(instance, parameter); Assert.Equal(expected: expected.MetadataToken, instance.LastCall.MetadataToken); }
public void ShortParameter_ProperlyCalled() { var instance = new ObscenelyAnnoyingClass(); short parameter = 1; var expected = MethodReference.Get(() => instance.Method(parameter)); var methodResult = Build <Action <object, short> >(expected.Name).WithParameters(parameter).Build(); methodResult.Invoke(instance, parameter); Assert.Equal(expected: expected.MetadataToken, instance.LastCall.MetadataToken); }
public void AmbiguousParameters_ClassBClassCClassC_CallsExpectedMethod() { var instance = new ObscenelyAnnoyingClass(); var p1 = new ClassB(); var p2 = new ClassC(); var p3 = new ClassC(); var expected = MethodReference.Get(() => instance.Method(p1, p2, p3)); var methodResult = Build <Action <object, object, object, object> >(expected.Name).WithParameters(p1, p2, p3).Build(); methodResult(instance, p1, p2, p3); Assert.Equal(expected: expected.ToString(), instance.LastCall.MethodString); }
public void StringParameterAsObject_ProperlyCalls_ObjectMethod_WithNamespaceNameFilter() { var instance = new ObscenelyAnnoyingClass(); object parameter = string.Empty; var expected = MethodReference.Get(() => instance.Method(parameter)); var methodResult = Build <Action <object, object> >(expected.Name) .WithParameters(parameter) .WithNamespaceAndNameFilters(ClrNames.Void, ClrNames.Object) .Build(); methodResult(instance, parameter); Assert.Equal(expected: expected.ToString(), instance.LastCall.MethodString); }
public void TargetReturnsReferenceType_DelegateReturnsValueType_ThrowsException() { var instance = new ObscenelyAnnoyingClass(); object arg = new ClassA(); var methodToInvoke = MethodReference.Get(() => instance.ReturnInputObject(arg)); // Throws Assert.ThrowsAny <Exception>(() => MethodBuilder <Func <object, object, int> > .Start(_moduleVersionId, methodToInvoke.MetadataToken, (int)OpCodeValue.Callvirt, "ReturnInputObject") .WithConcreteType(typeof(ObscenelyAnnoyingClass)) .WithParameters(arg) .Build()); }
public void TargetReturnsReferenceType_DelegateReturnsDifferentReferenceType_IsOk() { var instance = new ObscenelyAnnoyingClass(); ClassB arg = new ClassB(); var methodToInvoke = MethodReference.Get(() => instance.ReturnInputClassA(arg)); var methodCall = MethodBuilder <Func <object, object, ClassB> > .Start(_moduleVersionId, methodToInvoke.MetadataToken, (int)OpCodeValue.Callvirt, "ReturnInputClassA") .WithConcreteType(typeof(ObscenelyAnnoyingClass)) .WithParameters(arg) .Build(); var actual = methodCall(instance, arg); Assert.Equal(arg, actual); }
public void WrongMetadataToken_NonSpecificDelegateSignature_GetsCorrectMethodAnyways() { var instance = new ObscenelyAnnoyingClass(); var wrongMethod = MethodReference.Get(() => instance.Method(1)); string parameter = string.Empty; var expected = MethodReference.Get(() => instance.Method(parameter)); var methodResult = MethodBuilder <Action <object, object> > // Proper use should be Action<object, string> .Start(_moduleVersionId, wrongMethod.MetadataToken, (int)OpCodeValue.Callvirt, "Method") .WithConcreteType(_testType) .WithParameters(parameter) // The parameter is the saving grace .Build(); methodResult(instance, parameter); Assert.Equal(expected: expected.ToString(), instance.LastCall.MethodString); }
public void AmbiguousParameters_ClassCClassBClassA_CallsExpectedMethod_WithNamespaceNameFilter() { var instance = new ObscenelyAnnoyingClass(); var p1 = new ClassC(); var p2 = new ClassB(); var p3 = new ClassA(); var expected = MethodReference.Get(() => instance.Method(p1, p2, p3)); var methodResult = Build <Action <object, object, object, object> >(expected.Name) .WithParameters(p1, p2, p3) .WithNamespaceAndNameFilters( ClrNames.Void, "Datadog.Trace.ClrProfiler.Managed.Tests.ClassA", "Datadog.Trace.ClrProfiler.Managed.Tests.ClassA", "Datadog.Trace.ClrProfiler.Managed.Tests.ClassA") .Build(); methodResult(instance, p1, p2, p3); Assert.Equal(expected: expected.ToString(), instance.LastCall.MethodString); }