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); } }
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); }
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); }
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); }
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); } }
void SetBodyExecutingDefaultOr(Delegate defaultBehavior, Dictionary <object, TargetSettingValue <Delegate> > indirections) { BodyCore = IndirectionStub.CreateDelegateExecutingDefaultOr(defaultBehavior, indirections, TypeGenericArguments, MethodGenericArguments); }
Delegate GetBodyOfDefaultBehavior() { return(BodyCore == null? IndirectionStub.CreateDelegateOfDefaultBehavior(IndirectionBehaviors.Fallthrough, TypeGenericArguments, MethodGenericArguments) : BodyCore); }
public override void Prepare(IndirectionBehaviors defaultBehavior) { var behavior = IndirectionStub.CreateDelegateOfDefaultBehavior(defaultBehavior, TypeGenericArguments, MethodGenericArguments); Body = behavior; }
protected TypedBehaviorPreparableImpl(IndirectionStub stub, Type[] typeGenericArgs, Type[] methodGenericArgs) : base(stub, typeGenericArgs, methodGenericArgs) { }