resolved SPRNET-992 - tx 2 Steve Bendiola

This commit is contained in:
eeichinger
2008-10-29 14:46:05 +00:00
parent e71ec9c45e
commit 635e513798
2 changed files with 82 additions and 12 deletions

View File

@@ -231,7 +231,7 @@ namespace Spring.Util
ParameterInfo[] parameters = m.GetParameters();
bool isMatch = true;
bool isExactMatch = true;
object[] paramValues = argValues;
object[] paramValues = (argValues==null)?new object[0] : argValues;
try
{
@@ -246,19 +246,26 @@ namespace Spring.Util
}
}
for (int i = 0; i < parameters.Length; i++)
if (parameters.Length != paramValues.Length)
{
isMatch = false;
}
else
{
Type paramType = parameters[i].ParameterType;
object paramValue = paramValues[i];
if ((paramValue == null && paramType.IsValueType)
|| (paramValue != null && !paramType.IsAssignableFrom(paramValue.GetType())))
for (int i = 0; i < parameters.Length; i++)
{
isMatch = false;
break;
}
if (paramValue == null || paramType != paramValue.GetType())
{
isExactMatch = false;
Type paramType = parameters[i].ParameterType;
object paramValue = paramValues[i];
if ((paramValue == null && paramType.IsValueType)
|| (paramValue != null && !paramType.IsAssignableFrom(paramValue.GetType())))
{
isMatch = false;
break;
}
if (paramValue == null || paramType != paramValue.GetType())
{
isExactMatch = false;
}
}
}
}

View File

@@ -48,6 +48,69 @@ namespace Spring.Util
[TestFixture]
public sealed class ReflectionUtilsTests
{
#region Helper class for http://jira.springframework.org/browse/SPRNET-992 tests
public class Foo
{
public readonly string a = "";
public readonly int b = -1;
public readonly char c = '0';
public Foo(string a, int b, char c)
{
this.a = a;
this.b = b;
this.c = c;
}
public Foo(string a)
{
this.a = a;
}
public Foo()
{
}
}
#endregion
[Test(Description="http://jira.springframework.org/browse/SPRNET-992")]
public void ShouldPickDefaultConstructorWithoutArgs()
{
object[] args = new object[] {};
ConstructorInfo best = ReflectionUtils.GetConstructorByArgumentValues(typeof (Foo).GetConstructors(), null);
Foo foo = (Foo) best.Invoke(args);
Assert.AreEqual("", foo.a);
Assert.AreEqual(-1, foo.b);
Assert.AreEqual('0', foo.c);
}
[Test(Description="http://jira.springframework.org/browse/SPRNET-992")]
public void ShouldPickDefaultConstructor()
{
object[] args = new object[] {};
ConstructorInfo best = ReflectionUtils.GetConstructorByArgumentValues(typeof (Foo).GetConstructors(), args);
Foo foo = (Foo) best.Invoke(args);
Assert.AreEqual("", foo.a);
Assert.AreEqual(-1, foo.b);
Assert.AreEqual('0', foo.c);
}
[Test(Description="http://jira.springframework.org/browse/SPRNET-992")]
public void ShouldPickSingleArgConstructor()
{
object[] args = new object[] { "b"};
ConstructorInfo best = ReflectionUtils.GetConstructorByArgumentValues(typeof(Foo).GetConstructors(), args);
Foo foo = (Foo)best.Invoke(args);
Assert.AreEqual("b", foo.a);
Assert.AreEqual(-1, foo.b);
Assert.AreEqual('0', foo.c);
}
[Test]
public void GetParameterTypes()
{