/// <summary>
        /// Return an IEnumerable providing data for use with the
        /// supplied parameter.
        /// </summary>
        /// <param name="parameter">A ParameterInfo representing one
        /// argument to a parameterized test</param>
        /// <returns>An IEnumerable providing the required data</returns>
        public IEnumerable GetDataFor(ParameterInfo parameter, Test suite)
        {
            ArrayList list = new ArrayList();

            foreach (IDataPointProvider provider in Extensions)
            {
                if (provider is IDataPointProvider2)
                {
                    IDataPointProvider2 provider2 = (IDataPointProvider2)provider;
                    if (provider2.HasDataFor(parameter, suite))
                    {
                        foreach (object o in provider2.GetDataFor(parameter, suite))
                        {
                            list.Add(o);
                        }
                    }
                }
                else if (provider.HasDataFor(parameter))
                {
                    foreach (object o in provider.GetDataFor(parameter))
                    {
                        list.Add(o);
                    }
                }
            }

            return(list);
        }
        private CombiningStrategy GetStrategy(MethodInfo method, Test suite)
        {
            ParameterInfo[] parameters = method.GetParameters();
            IEnumerable[]   sources    = new IEnumerable[parameters.Length];
            for (int i = 0; i < parameters.Length; i++)
            {
                sources[i] = dataPointProvider.GetDataFor(parameters[i], suite);
            }

            if (Reflect.HasAttribute(method, SequentialAttribute, false))
            {
                return(new SequentialStrategy(sources));
            }

            if (Reflect.HasAttribute(method, PairwiseAttribute, false) &&
                method.GetParameters().Length > 2)
            {
                return(new PairwiseStrategy(sources));
            }

            return(new CombinatorialStrategy(sources));
        }