Пример #1
0
        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);
        }
Пример #2
0
        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);
        }
Пример #3
0
        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);
        }
Пример #4
0
        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));
        }
Пример #5
0
 /// <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));
 }