private GallioFunc <object[], TOutput> TryGetMemberAsField(FixtureMemberInvokerTargets targets, ITypeInfo ownerInfo) { if ((targets & FixtureMemberInvokerTargets.Field) != 0) { IFieldInfo info = ownerInfo.GetField(memberName, bindingFlags); if (info != null) { return(args => { object fixtureInstance = GetFixtureInstance(info.IsStatic); FieldInfo field = (type == null) ? GetMemberInfo <FieldInfo>(t => t.GetField(memberName, bindingFlags)) : info.Resolve(true); if (field == null) { throw new TestFailedException(String.Format("Could not find field '{0}''.", memberName)); } return (TOutput)field.GetValue(fixtureInstance); }); } } return(null); }
private GallioFunc <object[], TOutput> TryGetMemberAsProperty(FixtureMemberInvokerTargets targets, ITypeInfo ownerInfo) { if ((targets & FixtureMemberInvokerTargets.Property) != 0) { IPropertyInfo info = ownerInfo.GetProperty(memberName, bindingFlags); if (info != null && info.GetMethod != null) { return(args => { object fixtureInstance = GetFixtureInstance(info.GetMethod.IsStatic); PropertyInfo property = (type == null) ? GetMemberInfo <PropertyInfo>(t => t.GetProperty(memberName, bindingFlags)) : info.Resolve(true); if (property == null) { throw new TestFailedException(String.Format("Could not find property '{0}'.", memberName)); } return (TOutput)property.GetValue(fixtureInstance, null); }); } } return(null); }
private GallioFunc <object[], TOutput> TryGetMemberAsMethod(FixtureMemberInvokerTargets targets, ITypeInfo ownerInfo) { if ((targets & FixtureMemberInvokerTargets.Method) != 0) { IMethodInfo info = ownerInfo.GetMethod(memberName, bindingFlags); if (info != null) { return(args => { object fixtureInstance = GetFixtureInstance(info.IsStatic); MethodInfo method = (type == null) ? GetMemberInfo <MethodInfo>(t => t.GetMethod(memberName, bindingFlags)) : info.Resolve(true); if (method == null) { throw new TestFailedException(String.Format("Could not find method '{0}'.", memberName)); } object[] convertedArgs = ConvertArguments(method.GetParameters(), args); return (TOutput)method.Invoke(fixtureInstance, convertedArgs); }); } } return(null); }
private TOutput InvokeImpl(FixtureMemberInvokerTargets targets, object[] args) { var ownerInfo = GetOwnerInfo(); var function = TryGetMemberAsMethod(targets, ownerInfo) ?? TryGetMemberAsProperty(targets, ownerInfo) ?? TryGetMemberAsField(targets, ownerInfo); if (function == null) { throw new PatternUsageErrorException(String.Format("Could not find a method, property or field named '{0}'.", memberName)); } return(function(args)); }
/// <summary> /// Invokes the member with the specified arguments and returns the resulting value. /// </summary> /// <param name="targets">The arguments to pass to the member.</param> /// <param name="args">The arguments to pass to the member.</param> /// <returns>The resulting value.</returns> public TOutput Invoke(FixtureMemberInvokerTargets targets, params object[] args) { return(InvokeImpl(targets, args)); }