Ejemplo n.º 1
0
        private static IGen <object> ResolveGen(IGenFactory genFactory, IGen?customGen, ParameterInfo parameterInfo)
        {
            if (customGen == null)
            {
                var configuredGenFactory = ConfigureGenFactory(genFactory, parameterInfo);

                var createGenMethodInfo = typeof(IGenFactory)
                                          .GetMethod(nameof(IGenFactory.Create))
                                          .MakeGenericMethod(parameterInfo.ParameterType);

                var gen = (IGen)createGenMethodInfo.Invoke(configuredGenFactory, new object[] { });

                return(gen
                       .Cast <object>()
                       .SelectError(error => SelectParameterError(parameterInfo, error)));
            }
            else
            {
                var genTypeArgument = customGen.ReflectGenTypeArgument();

                if (parameterInfo.ParameterType.IsAssignableFrom(genTypeArgument) == false)
                {
                    return(Gen.Advanced.Error <object>(
                               nameof(ParametersGen),
                               $"generator of type '{genTypeArgument.FullName}' is not compatible with parameter of type '{parameterInfo.ParameterType.FullName}'"));
                }

                return(customGen.Cast <object>());
            }
        }
Ejemplo n.º 2
0
        private static IGenFactory ConfigureGenFactory(IGenFactory genFactory, ParameterInfo parameterInfo)
        {
            if (TryCreateGenFromAttribute(parameterInfo, out IGen? gen))
            {
                return(genFactory.RegisterType(parameterInfo.ParameterType, gen !));
            }

            return(genFactory);
        }
Ejemplo n.º 3
0
        private static IGen <object[]> CreateGen(
            MethodInfo methodInfo,
            IGenFactory genFactory,
            IReadOnlyDictionary <int, IGen> customGens)
        {
            var parameters = methodInfo.GetParameters();

            var invalidIndicies = customGens.Keys.Except(Enumerable.Range(0, parameters.Length));

            if (invalidIndicies.Any())
            {
                return(Gen.Advanced.Error <object[]>(
                           nameof(ParametersGen),
                           $"parameter index '{invalidIndicies.First()}' of custom generator was not valid"));
            }

            var gens = parameters.Select((parameterInfo, parameterIndex) =>
            {
                var customGen = customGens.ContainsKey(parameterIndex) ? customGens[parameterIndex] : null;
                return(ResolveGen(genFactory, customGen, parameterInfo));
            });

            return(Gen.Zip(gens).Select(xs => xs.ToArray()));
        }
Ejemplo n.º 4
0
 public ParametersGen(MethodInfo methodInfo, IGenFactory genFactory, IReadOnlyDictionary <int, IGen> customGens)
 {
     _lazyGen = new Lazy <IGen <object[]> >(() => CreateGen(methodInfo, genFactory, customGens));
 }
Ejemplo n.º 5
0
 public GenEmail(params string[] availableDomains)
 {
     this.domainGenerator = new GenDomain(availableDomains);
 }
Ejemplo n.º 6
0
 public GenEmail()
 {
     this.firstNameGenerator = new GenFirstName();
     this.lastNameGenerator  = new GenLastName();
     this.domainGenerator    = new GenDomain();
 }