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);
        }
Beispiel #3
0
        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);
        }
Beispiel #4
0
        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);
        }