public void IndirectionDelegate_should_get_the_delegate_type_that_indicates_the_method_that_has_a_type_as_same_as_declaring_type_variation()
        {
            // Arrange
            var name   = "FugaIndirectionStubTestDOfBarRef";
            var alias  = "FugaIndirectionStubTestDOfBarRef";
            var xml    = string.Empty;
            var target = typeof(D <>).GetMethods().First();
            var stub   = new IndirectionStub(name, alias, xml, target);


            // Act
            var indDlgt = stub.IndirectionDelegate;


            // Assert
            var invokeMeth = indDlgt.GetMethod("Invoke");
            {
                var genericType = invokeMeth.GetParameters()[1].ParameterType.GetElementType().GetElementType().GetGenericArguments()[0].GetElementType();
                Assert.AreEqual(typeof(D <>).ToString(), genericType.ToString());
                Assert.AreNotEqual(typeof(D <>), genericType);
            }
            {
                var genericType = invokeMeth.ReturnType.GetElementType().GetGenericArguments()[0].GetElementType();
                Assert.AreEqual(typeof(D <>).ToString(), genericType.ToString());
                Assert.AreNotEqual(typeof(D <>), genericType);
            }
        }
Exemple #2
0
        public void SetInstantiation_should_set_Instantiation_property_with_the_generic_method_signature_of_generic_type()
        {
            // Arrange
            var name   = "EchoOfT5OfT6OfT7OfT8OfTRetT4T8";
            var alias  = "EchoOfT5OfT6OfT7OfT8OfTRetT4T8";
            var xml    = string.Empty;
            var target = typeof(ULUnusedGeneric <, , ,>).GetMethods().First();
            var stub   = new IndirectionStub(name, alias, xml, target);

            var info = new IndirectionInfo();

            var typeGenericArgs   = new[] { typeof(sbyte), typeof(byte), typeof(short), typeof(ushort) };
            var methodGenericArgs = new[] { typeof(int), typeof(uint), typeof(long), typeof(ulong), typeof(decimal) };


            // Act
            info.SetInstantiation(target, stub.Signature, typeGenericArgs, methodGenericArgs);


            // Assert
            var expected = new[]
            {
                target.DeclaringType.MakeGenericType(typeGenericArgs[0], typeGenericArgs[1], typeGenericArgs[2], typeGenericArgs[3]),
                typeGenericArgs[3],
                methodGenericArgs[3],
                methodGenericArgs[4]
            }.Select(_ => _.ToString());

            CollectionAssert.AreEqual(expected, info.Instantiation);
        }
Exemple #3
0
        public void SetInstantiation_should_set_Instantiation_property_with_the_signature_of_the_method_that_has_a_type_as_same_as_declaring_type_variation()
        {
            // Arrange
            var name   = "FugaIndirectionInfoTestDOfBarRef";
            var alias  = "FugaIndirectionInfoTestDOfBarRef";
            var xml    = string.Empty;
            var target = typeof(D <>).GetMethods().First();
            var stub   = new IndirectionStub(name, alias, xml, target);

            var info = new IndirectionInfo();

            var typeGenericArgs   = new[] { typeof(int) };
            var methodGenericArgs = Type.EmptyTypes;


            // Act
            info.SetInstantiation(target, stub.Signature, typeGenericArgs, methodGenericArgs);


            // Assert
            var expected = new[]
            {
                target.DeclaringType.MakeGenericType(typeGenericArgs[0]),
                typeof(List <>).MakeGenericType(target.DeclaringType.MakeGenericType(typeGenericArgs[0]).MakeArrayType()).MakeArrayType(2).MakeByRefType(),
                typeof(List <>).MakeGenericType(target.DeclaringType.MakeGenericType(typeGenericArgs[0]).MakeArrayType()).MakeArrayType(2)
            }.Select(_ => _.ToString());

            CollectionAssert.AreEqual(expected, info.Instantiation);
        }
Exemple #4
0
        public void SetInstantiation_should_set_Instantiation_property_with_the_generic_method_signature_that_contains_same_type_parameter()
        {
            // Arrange
            var name   = "GetPropertyOfTStringT";
            var alias  = "GetPropertyOfTStringT";
            var xml    = string.Empty;
            var target = typeof(ULConfigurationManager).GetMethods().First();
            var stub   = new IndirectionStub(name, alias, xml, target);

            var info = new IndirectionInfo();

            var typeGenericArgs   = Type.EmptyTypes;
            var methodGenericArgs = new[] { typeof(DayOfWeek) };


            // Act
            info.SetInstantiation(target, stub.Signature, typeGenericArgs, methodGenericArgs);


            // Assert
            var expected = new[]
            {
                typeof(string),
                methodGenericArgs[0],
                methodGenericArgs[0]
            }.Select(_ => _.ToString());

            CollectionAssert.AreEqual(expected, info.Instantiation);
        }
        public void IndirectionDelegate_should_get_the_delegate_type_that_indicates_the_pinvoke_method_of_a_class()
        {
            // Arrange
            var name   = "IsWow64ProcessIntPtrBooleanRef";
            var alias  = "IsWow64ProcessIntPtrBooleanRef";
            var xml    = string.Empty;
            var target = typeof(Foo).GetMethods(BindingFlags.NonPublic | BindingFlags.Static).First();
            var stub   = new IndirectionStub(name, alias, xml, target);


            // Act
            var indDlgt = stub.IndirectionDelegate;


            // Assert
            Assert.AreEqual("Urasandesu.Prig.Delegates.IndirectionOutFunc`3[System.IntPtr,System.Boolean,System.Boolean]", indDlgt.ToString());
        }
        public void IndirectionDelegate_should_get_the_delegate_type_that_indicates_the_generic_method_of_a_class()
        {
            // Arrange
            var name   = "GetPropertyOfTStringT";
            var alias  = "GetPropertyOfTStringT";
            var xml    = string.Empty;
            var target = typeof(ULConfigurationManager).GetMethods().First();
            var stub   = new IndirectionStub(name, alias, xml, target);


            // Act
            var indDlgt = stub.IndirectionDelegate;


            // Assert
            Assert.AreEqual("Urasandesu.Prig.Delegates.IndirectionFunc`3[System.String,T,T]", indDlgt.ToString());
        }
        public void IndirectionDelegate_should_return_null_if_same_signature_delegate_is_not_found()
        {
            // Arrange
            var name   = "GetContractDetailsStringBooleanRefDecimalRefDecimalRef";
            var alias  = "GetContractDetailsStringBooleanRefDecimalRefDecimalRef";
            var xml    = string.Empty;
            var target = typeof(ULHelpers).GetMethods().First();
            var stub   = new IndirectionStub(name, alias, xml, target);


            // Act
            var indDlgt = stub.IndirectionDelegate;


            // Assert
            Assert.IsNull(indDlgt);
        }
        public void IndirectionDelegate_should_get_the_delegate_type_that_indicates_the_getter_of_static_class()
        {
            // Arrange
            var name   = "NowGet";
            var alias  = "NowGet";
            var xml    = string.Empty;
            var target = typeof(DateTime).GetProperty("Now").GetGetMethod();
            var stub   = new IndirectionStub(name, alias, xml, target);


            // Act
            var indDlgt = stub.IndirectionDelegate;


            // Assert
            Assert.AreEqual("Urasandesu.Prig.Delegates.IndirectionFunc`1[System.DateTime]", indDlgt.ToString());
        }
        public void CreateDelegateOfDefaultBehavior_should_return_the_default_behavior_that_indicates_the_getter_of_static_class()
        {
            // Arrange
            var name   = "NowGet";
            var alias  = "NowGet";
            var xml    = string.Empty;
            var target = typeof(DateTime).GetProperty("Now").GetGetMethod();
            var stub   = new IndirectionStub(name, alias, xml, target);


            // Act
            var defaultBehavior = stub.CreateDelegateOfDefaultBehavior(IndirectionBehaviors.DefaultValue, new Type[] { }, new Type[] { });


            // Assert
            var get_Now = defaultBehavior.Cast <IndirectionFunc <DateTime> >(GetType().Module);
            var value   = get_Now();

            Assert.AreEqual(default(DateTime), value);
        }
        public void CreateDelegateOfDefaultBehavior_should_return_the_default_behavior_that_indicates_the_generic_method_of_a_class()
        {
            // Arrange
            var name   = "GetPropertyOfTStringT";
            var alias  = "GetPropertyOfTStringT";
            var xml    = string.Empty;
            var target = typeof(ULConfigurationManager).GetMethods().First();
            var stub   = new IndirectionStub(name, alias, xml, target);


            // Act
            var defaultBehavior = stub.CreateDelegateOfDefaultBehavior(IndirectionBehaviors.DefaultValue, new Type[] { }, new Type[] { typeof(DayOfWeek) });


            // Assert
            var getProperty = defaultBehavior.Cast <IndirectionFunc <string, DayOfWeek, DayOfWeek> >(GetType().Module);
            var value       = getProperty("aiueo", DayOfWeek.Wednesday);

            Assert.AreEqual(default(DayOfWeek), value);
        }
        public void IndirectionDelegate_should_get_the_delegate_type_that_indicates_the_ctor_of_generic_struct()
        {
            // Arrange
            var name   = "ConstructorT";
            var alias  = "ConstructorT";
            var xml    = string.Empty;
            var target = typeof(Nullable <>).GetConstructors().First();
            var stub   = new IndirectionStub(name, alias, xml, target);


            // Act
            var indDlgt = stub.IndirectionDelegate;


            // Assert
            Assert.AreEqual("Urasandesu.Prig.Delegates.IndirectionRefThisAction`2[System.Nullable`1[T],T]", indDlgt.ToString());
            var genericType = indDlgt.GetMethod("Invoke").GetParameters()[0].ParameterType.GetElementType();

            Assert.AreEqual(typeof(Nullable <>).ToString(), genericType.ToString());
            Assert.AreNotEqual(typeof(Nullable <>), genericType);
        }
Exemple #12
0
        protected BehaviorPreparableImpl(IndirectionStub stub, Type[] typeGenericArgs, Type[] methodGenericArgs)
        {
            if (stub == null)
            {
                throw new ArgumentNullException("stub");
            }

            if (typeGenericArgs == null)
            {
                throw new ArgumentNullException("typeGenericArgs");
            }

            if (methodGenericArgs == null)
            {
                throw new ArgumentNullException("methodGenericArgs");
            }

            IndirectionStub        = stub;
            TypeGenericArguments   = typeGenericArgs;
            MethodGenericArguments = methodGenericArgs;
        }
        public void CreateDelegateOfDefaultBehavior_should_return_the_default_behavior_that_indicates_the_ctor_of_generic_struct()
        {
            // Arrange
            var name   = "ConstructorT";
            var alias  = "ConstructorT";
            var xml    = string.Empty;
            var target = typeof(Nullable <>).GetConstructors().First();
            var stub   = new IndirectionStub(name, alias, xml, target);


            // Act
            var defaultBehavior = stub.CreateDelegateOfDefaultBehavior(IndirectionBehaviors.DefaultValue, new Type[] { typeof(int) }, new Type[] { });


            // Assert
            var ctor  = defaultBehavior.Cast <IndirectionRefThisAction <Nullable <int>, int> >(GetType().Module);
            var value = new int?(42);

            ctor(ref value, 42);
            Assert.AreEqual(default(int?), value);
        }
        public void IndirectionDelegate_should_get_the_delegate_type_that_indicates_the_method_that_has_a_type_as_same_as_declaring_type_excluding_this()
        {
            // Arrange
            var name   = "FugaIndirectionStubTestCOfBar";
            var alias  = "FugaIndirectionStubTestCOfBar";
            var xml    = string.Empty;
            var target = typeof(C <>).GetMethods().First();
            var stub   = new IndirectionStub(name, alias, xml, target);


            // Act
            var indDlgt = stub.IndirectionDelegate;


            // Assert
            Assert.AreEqual("Urasandesu.Prig.Delegates.IndirectionFunc`3[Test.Urasandesu.Prig.Framework.PilotStubberConfiguration.IndirectionStubTest+C`1[Bar]," +
                            "Test.Urasandesu.Prig.Framework.PilotStubberConfiguration.IndirectionStubTest+C`1[Bar]," +
                            "Test.Urasandesu.Prig.Framework.PilotStubberConfiguration.IndirectionStubTest+C`1[Bar]]", indDlgt.ToString());
            var invokeMeth = indDlgt.GetMethod("Invoke");
            {
                var genericType = invokeMeth.GetParameters()[0].ParameterType;

                Assert.AreEqual(typeof(C <>).ToString(), genericType.ToString());
                Assert.AreNotEqual(typeof(C <>), genericType);
            }
            {
                var genericType = invokeMeth.GetParameters()[1].ParameterType;
                Assert.AreEqual(typeof(C <>).ToString(), genericType.ToString());
                Assert.AreNotEqual(typeof(C <>), genericType);
            }
            {
                var genericType = invokeMeth.ReturnType;
                Assert.AreEqual(typeof(C <>).ToString(), genericType.ToString());
                Assert.AreNotEqual(typeof(C <>), genericType);
            }
        }
Exemple #15
0
 void SetBodyExecutingDefaultOr(Delegate defaultBehavior, Dictionary <object, TargetSettingValue <Delegate> > indirections)
 {
     BodyCore = IndirectionStub.CreateDelegateExecutingDefaultOr(defaultBehavior, indirections, TypeGenericArguments, MethodGenericArguments);
 }
Exemple #16
0
 Delegate GetBodyOfDefaultBehavior()
 {
     return(BodyCore == null?
            IndirectionStub.CreateDelegateOfDefaultBehavior(IndirectionBehaviors.Fallthrough, TypeGenericArguments, MethodGenericArguments) :
                BodyCore);
 }
Exemple #17
0
        public override void Prepare(IndirectionBehaviors defaultBehavior)
        {
            var behavior = IndirectionStub.CreateDelegateOfDefaultBehavior(defaultBehavior, TypeGenericArguments, MethodGenericArguments);

            Body = behavior;
        }
Exemple #18
0
 protected TypedBehaviorPreparableImpl(IndirectionStub stub, Type[] typeGenericArgs, Type[] methodGenericArgs)
     : base(stub, typeGenericArgs, methodGenericArgs)
 {
 }